diff --git a/cms/djangoapps/contentstore/management/commands/generate_courses.py b/cms/djangoapps/contentstore/management/commands/generate_courses.py
new file mode 100644
index 0000000000..475e22801d
--- /dev/null
+++ b/cms/djangoapps/contentstore/management/commands/generate_courses.py
@@ -0,0 +1,160 @@
+"""
+Django management command to generate a test course from a course config json
+"""
+import json
+import logging
+
+from django.contrib.auth.models import User
+from django.core.management.base import BaseCommand, CommandError
+
+from contentstore.management.commands.utils import user_from_str
+from contentstore.views.course import create_new_course_in_store
+from openedx.core.djangoapps.credit.models import CreditProvider
+from xmodule.course_module import CourseFields
+from xmodule.fields import Date
+from xmodule.modulestore.exceptions import DuplicateCourseError
+from xmodule.tabs import CourseTabList
+
+logger = logging.getLogger(__name__)
+
+
+class Command(BaseCommand):
+ """ Generate a basic course """
+ help = 'Generate courses on studio from a json list of courses'
+
+ def add_arguments(self, parser):
+ parser.add_argument(
+ 'courses_json',
+ )
+
+ def handle(self, *args, **options):
+ try:
+ courses = json.loads(options["courses_json"])["courses"]
+ except ValueError:
+ raise CommandError("Invalid JSON object")
+ except KeyError:
+ raise CommandError("JSON object is missing courses list")
+
+ for course_settings in courses:
+ # Validate course
+ if not self._course_is_valid(course_settings):
+ logger.warning("Can't create course, proceeding to next course")
+ continue
+
+ # Retrieve settings
+ org = course_settings["organization"]
+ num = course_settings["number"]
+ run = course_settings["run"]
+ user_email = course_settings["user"]
+ try:
+ user = user_from_str(user_email)
+ except User.DoesNotExist:
+ logger.warning(user_email + " user does not exist")
+ logger.warning("Can't create course, proceeding to next course")
+ continue
+ fields = self._process_course_fields(course_settings["fields"])
+
+ # Create the course
+ try:
+ new_course = create_new_course_in_store("split", user, org, num, run, fields)
+ logger.info("Created {}".format(unicode(new_course.id)))
+ except DuplicateCourseError:
+ logger.warning("Course already exists for %s, %s, %s", org, num, run)
+
+ # Configure credit provider
+ if ("enrollment" in course_settings) and ("credit_provider" in course_settings["enrollment"]):
+ credit_provider = course_settings["enrollment"]["credit_provider"]
+ if credit_provider is not None:
+ CreditProvider.objects.get_or_create(
+ provider_id=credit_provider,
+ display_name=credit_provider
+ )
+
+ def _process_course_fields(self, fields):
+ """ Returns a validated list of course fields """
+ all_fields = CourseFields.__dict__.keys()
+ non_course_fields = [
+ "__doc__",
+ "__module__",
+ "__weakref__",
+ "__dict__"
+ ]
+ for field in non_course_fields:
+ all_fields.remove(field)
+
+ # Non-primitive course fields
+ date_fields = [
+ "certificate_available_date",
+ "announcement",
+ "enrollment_start",
+ "enrollment_end",
+ "start",
+ "end"
+ ]
+ course_tab_list_fields = [
+ "tabs"
+ ]
+
+ for field in dict(fields):
+ if field not in all_fields:
+ # field does not exist as a CourseField
+ del fields[field]
+ logger.info(field + "is not a valid CourseField")
+ elif fields[field] is None:
+ # field is unset
+ del fields[field]
+ elif field in date_fields:
+ # Generate Date object from the json value
+ try:
+ date_json = fields[field]
+ fields[field] = Date().from_json(date_json)
+ logger.info(field + " has been set to " + date_json)
+ except Exception: # pylint: disable=broad-except
+ logger.info("The date string could not be parsed for " + field)
+ del fields[field]
+ elif field in course_tab_list_fields:
+ # Generate CourseTabList object from the json value
+ try:
+ course_tab_list_json = fields[field]
+ fields[field] = CourseTabList().from_json(course_tab_list_json)
+ logger.info(field + " has been set to " + course_tab_list_json)
+ except Exception: # pylint: disable=broad-except
+ logger.info("The course tab list string could not be parsed for " + field)
+ del fields[field]
+ else:
+ # CourseField is valid and has been set
+ logger.info(field + " has been set to " + str(fields[field]))
+
+ for field in all_fields:
+ if field not in fields:
+ logger.info(field + " has not been set")
+ return fields
+
+ def _course_is_valid(self, course):
+ """ Returns true if the course contains required settings """
+ is_valid = True
+
+ # Check course settings
+ required_course_settings = [
+ "organization",
+ "number",
+ "run",
+ "fields",
+ "user"
+ ]
+ for setting in required_course_settings:
+ if setting not in course:
+ logger.warning("Course json is missing " + setting)
+ is_valid = False
+
+ # Check fields settings
+ required_field_settings = [
+ "display_name"
+ ]
+ if "fields" in course:
+ for setting in required_field_settings:
+ if setting not in course["fields"]:
+ logger.warning("Fields json is missing " + setting)
+ is_valid = False
+
+ return is_valid
diff --git a/cms/djangoapps/contentstore/management/commands/generate_test_course.py b/cms/djangoapps/contentstore/management/commands/generate_test_course.py
deleted file mode 100644
index cd386aa24e..0000000000
--- a/cms/djangoapps/contentstore/management/commands/generate_test_course.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-Django management command to generate a test course in a specific modulestore
-"""
-import json
-
-from django.contrib.auth.models import User
-from django.core.management.base import BaseCommand, CommandError
-
-from contentstore.management.commands.utils import user_from_str
-from contentstore.views.course import create_new_course_in_store
-from xmodule.modulestore import ModuleStoreEnum
-from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
-
-
-class Command(BaseCommand):
- """ Generate a basic course """
- help = 'Generate a course with settings on studio'
-
- def add_arguments(self, parser):
- parser.add_argument(
- 'json',
- help='JSON object with values for store, user, name, organization, number, fields'
- )
-
- def handle(self, *args, **options):
-
- if options["json"] is None:
- raise CommandError("Must pass in JSON object")
-
- try:
- settings = json.loads(options["json"])
- except ValueError:
- raise CommandError("Invalid JSON")
-
- if not(all(key in settings for key in ("store", "user", "organization", "number", "run", "fields"))):
- raise CommandError("JSON object is missing required fields")
-
- if settings["store"] in [ModuleStoreEnum.Type.mongo, ModuleStoreEnum.Type.split]:
- store = settings["store"]
- else:
- raise CommandError("Modulestore invalid_store is not valid")
-
- try:
- user = user_from_str(settings["user"])
- except User.DoesNotExist:
- raise CommandError("User {user} not found".format(user=settings["user"]))
-
- org = settings["organization"]
- num = settings["number"]
- run = settings["run"]
- fields = settings["fields"]
-
- # Create the course
- new_course = create_new_course_in_store(store, user, org, num, run, fields)
- self.stdout.write(u"Created {}".format(unicode(new_course.id)))
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_cleanup_assets.py b/cms/djangoapps/contentstore/management/commands/tests/test_cleanup_assets.py
index 4fd4004fbb..4824779dab 100644
--- a/cms/djangoapps/contentstore/management/commands/tests/test_cleanup_assets.py
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_cleanup_assets.py
@@ -4,7 +4,7 @@ or with filename which starts with "._")
"""
from django.core.management import call_command
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from xmodule.contentstore.content import XASSET_LOCATION_TAG
from xmodule.contentstore.django import contentstore
from xmodule.modulestore.django import modulestore
@@ -44,7 +44,7 @@ class ExportAllCourses(ModuleStoreTestCase):
verbose=True
)
- course = self.module_store.get_course(SlashSeparatedCourseKey('edX', 'dot-underscore', '2014_Fall'))
+ course = self.module_store.get_course(CourseKey.from_string('/'.join(['edX', 'dot-underscore', '2014_Fall'])))
self.assertIsNotNone(course)
# check that there are two assets ['example.txt', '.example.txt'] in contentstore for imported course
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_delete_course.py b/cms/djangoapps/contentstore/management/commands/tests/test_delete_course.py
index 28a26b41ed..c4ad14c8e9 100644
--- a/cms/djangoapps/contentstore/management/commands/tests/test_delete_course.py
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_delete_course.py
@@ -4,7 +4,7 @@ Unittests for deleting a course in an chosen modulestore
import mock
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from django.core.management import call_command, CommandError
from django.contrib.auth.models import User
from contentstore.tests.utils import CourseTestCase
@@ -54,14 +54,14 @@ class DeleteCourseTest(CourseTestCase):
"""
Testing if the entered course was deleted
"""
-
+ course_key = CourseKey.from_string('/'.join(["TestX", "TS01", "2015_Q1"]))
#Test if the course that is about to be deleted exists
- self.assertIsNotNone(modulestore().get_course(SlashSeparatedCourseKey("TestX", "TS01", "2015_Q1")))
+ self.assertIsNotNone(modulestore().get_course(course_key))
with mock.patch(self.YESNO_PATCH_LOCATION) as patched_yes_no:
patched_yes_no.return_value = True
call_command('delete_course', 'TestX/TS01/2015_Q1')
- self.assertIsNone(modulestore().get_course(SlashSeparatedCourseKey("TestX", "TS01", "2015_Q1")))
+ self.assertIsNone(modulestore().get_course(course_key))
def test_course_deletion_with_keep_instructors(self):
"""
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_generate_courses.py b/cms/djangoapps/contentstore/management/commands/tests/test_generate_courses.py
new file mode 100644
index 0000000000..aa83b9d7ce
--- /dev/null
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_generate_courses.py
@@ -0,0 +1,170 @@
+"""
+Unittest for generate a test course in an given modulestore
+"""
+import json
+
+import ddt
+import mock
+from django.core.management import CommandError, call_command
+
+from xmodule.modulestore.django import modulestore
+from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
+
+
+@ddt.ddt
+class TestGenerateCourses(ModuleStoreTestCase):
+ """
+ Unit tests for creating a course in split store via command line
+ """
+
+ @mock.patch('contentstore.management.commands.generate_courses.logger')
+ def test_generate_course_in_stores(self, mock_logger):
+ """
+ Test that a course is created successfully
+ """
+ settings = {"courses": [{
+ "organization": "test-course-generator",
+ "number": "1",
+ "run": "1",
+ "user": str(self.user.email),
+ "fields": {"display_name": "test-course", "announcement": "2010-04-20T20:08:21.634121"}
+ }]}
+ arg = json.dumps(settings)
+ call_command("generate_courses", arg)
+ key = modulestore().make_course_key("test-course-generator", "1", "1")
+ self.assertTrue(modulestore().has_course(key))
+ mock_logger.info.assert_any_call("Created course-v1:test-course-generator+1+1")
+ mock_logger.info.assert_any_call("announcement has been set to 2010-04-20T20:08:21.634121")
+ mock_logger.info.assert_any_call("display_name has been set to test-course")
+
+ def test_invalid_json(self):
+ """
+ Test that providing an invalid JSON object will result in the appropriate command error
+ """
+ with self.assertRaisesRegexp(CommandError, "Invalid JSON object"):
+ arg = "invalid_json"
+ call_command("generate_courses", arg)
+
+ def test_missing_courses_list(self):
+ """
+ Test that a missing list of courses in json will result in the appropriate command error
+ """
+ with self.assertRaisesRegexp(CommandError, "JSON object is missing courses list"):
+ settings = {}
+ arg = json.dumps(settings)
+ call_command("generate_courses", arg)
+
+ @mock.patch('contentstore.management.commands.generate_courses.logger')
+ @ddt.data("organization", "number", "run", "fields")
+ def test_missing_course_settings(self, setting, mock_logger):
+ """
+ Test that missing required settings in JSON object will result in the appropriate error message
+ """
+ settings = {"courses": [{
+ "organization": "test-course-generator",
+ "number": "1",
+ "run": "1",
+ "user": str(self.user.email),
+ "fields": {"display_name": "test-course"}
+ }]}
+ del settings["courses"][0][setting]
+ arg = json.dumps(settings)
+ call_command("generate_courses", arg)
+ mock_logger.warning.assert_any_call("Course json is missing " + setting)
+
+ @mock.patch('contentstore.management.commands.generate_courses.logger')
+ def test_invalid_user(self, mock_logger):
+ """
+ Test that providing an invalid user in the course JSON will result in the appropriate error message
+ """
+ settings = {"courses": [{
+ "organization": "test-course-generator",
+ "number": "1",
+ "run": "1",
+ "user": "invalid_user",
+ "fields": {"display_name": "test-course"}
+ }]}
+ arg = json.dumps(settings)
+ call_command("generate_courses", arg)
+ mock_logger.warning.assert_any_call("invalid_user user does not exist")
+
+ @mock.patch('contentstore.management.commands.generate_courses.logger')
+ def test_missing_display_name(self, mock_logger):
+ """
+ Test that missing required display_name in JSON object will result in the appropriate error message
+ """
+ settings = {"courses": [{
+ "organization": "test-course-generator",
+ "number": "1",
+ "run": "1",
+ "user": str(self.user.email),
+ "fields": {}
+ }]}
+ arg = json.dumps(settings)
+ call_command("generate_courses", arg)
+ mock_logger.warning.assert_any_call("Fields json is missing display_name")
+
+ @mock.patch('contentstore.management.commands.generate_courses.logger')
+ def test_invalid_course_field(self, mock_logger):
+ """
+ Test that an invalid course field will result in the appropriate message
+ """
+ settings = {"courses": [{
+ "organization": "test-course-generator",
+ "number": "1",
+ "run": "1",
+ "user": str(self.user.email),
+ "fields": {"display_name": "test-course", "invalid_field": "invalid_value"}
+ }]}
+ arg = json.dumps(settings)
+ call_command("generate_courses", arg)
+ mock_logger.info.assert_any_call((u'invalid_field') + "is not a valid CourseField")
+
+ @mock.patch('contentstore.management.commands.generate_courses.logger')
+ def test_invalid_date_setting(self, mock_logger):
+ """
+ Test that an invalid date json will result in the appropriate message
+ """
+ settings = {"courses": [{
+ "organization": "test-course-generator",
+ "number": "1",
+ "run": "1",
+ "user": str(self.user.email),
+ "fields": {"display_name": "test-course", "announcement": "invalid_date"}
+ }]}
+ arg = json.dumps(settings)
+ call_command("generate_courses", arg)
+ mock_logger.info.assert_any_call("The date string could not be parsed for announcement")
+
+ @mock.patch('contentstore.management.commands.generate_courses.logger')
+ def test_invalid_course_tab_list_setting(self, mock_logger):
+ """
+ Test that an invalid course tab list json will result in the appropriate message
+ """
+ settings = {"courses": [{
+ "organization": "test-course-generator",
+ "number": "1",
+ "run": "1",
+ "user": str(self.user.email),
+ "fields": {"display_name": "test-course", "tabs": "invalid_tabs"}
+ }]}
+ arg = json.dumps(settings)
+ call_command("generate_courses", arg)
+ mock_logger.info.assert_any_call("The course tab list string could not be parsed for tabs")
+
+ @mock.patch('contentstore.management.commands.generate_courses.logger')
+ @ddt.data("mobile_available", "enable_proctored_exams")
+ def test_missing_course_fields(self, field, mock_logger):
+ """
+ Test that missing course fields in fields json will result in the appropriate message
+ """
+ settings = {"courses": [{
+ "organization": "test-course-generator",
+ "number": "1",
+ "run": "1",
+ "user": str(self.user.email),
+ "fields": {"display_name": "test-course"}
+ }]}
+ arg = json.dumps(settings)
+ call_command("generate_courses", arg)
+ mock_logger.info.assert_any_call(field + " has not been set")
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_generate_test_course.py b/cms/djangoapps/contentstore/management/commands/tests/test_generate_test_course.py
deleted file mode 100644
index 67dd8a1de4..0000000000
--- a/cms/djangoapps/contentstore/management/commands/tests/test_generate_test_course.py
+++ /dev/null
@@ -1,89 +0,0 @@
-"""
-Unittest for generate a test course in an given modulestore
-"""
-import unittest
-import ddt
-from django.core.management import CommandError, call_command
-
-from contentstore.management.commands.generate_test_course import Command
-from xmodule.modulestore import ModuleStoreEnum
-from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
-from xmodule.modulestore.django import modulestore
-
-
-@ddt.ddt
-class TestGenerateTestCourse(ModuleStoreTestCase):
- """
- Unit tests for creating a course in either old mongo or split mongo via command line
- """
-
- @ddt.data(ModuleStoreEnum.Type.mongo, ModuleStoreEnum.Type.split)
- def test_generate_course_in_stores(self, store):
- """
- Test that courses are created successfully for both ModuleStores
- """
- arg = (
- '{"store":"' + store + '",' +
- '"user":"' + self.user.email + '",' +
- '"organization":"test-course-generator",' +
- '"number":"1",' +
- '"run":"1",' +
- '"fields":{"display_name":"test-course"}}'
- )
- call_command("generate_test_course", arg)
- key = modulestore().make_course_key("test-course-generator", "1", "1")
- self.assertTrue(modulestore().has_course(key))
-
- def test_invalid_json(self):
- """
- Test that providing an invalid JSON object will result in the appropriate command error
- """
- error_msg = "Invalid JSON"
- with self.assertRaisesRegexp(CommandError, error_msg):
- arg = "invalid_json"
- call_command("generate_test_course", arg)
-
- def test_missing_fields(self):
- """
- Test that missing required fields in JSON object will result in the appropriate command error
- """
- error_msg = "JSON object is missing required fields"
- with self.assertRaisesRegexp(CommandError, error_msg):
- arg = (
- '{"store":"invalid_store",' +
- '"user":"user@example.com",' +
- '"organization":"test-course-generator"}'
- )
- call_command("generate_test_course", arg)
-
- def test_invalid_store(self):
- """
- Test that providing an invalid store option will result in the appropriate command error
- """
- error_msg = "Modulestore invalid_store is not valid"
- with self.assertRaisesRegexp(CommandError, error_msg):
- arg = (
- '{"store":"invalid_store",' +
- '"user":"user@example.com",' +
- '"organization":"test-course-generator",' +
- '"number":"1",' +
- '"run":"1",' +
- '"fields":{"display_name":"test-course"}}'
- )
- call_command("generate_test_course", arg)
-
- def test_invalid_user(self):
- """
- Test that providing an invalid user will result in the appropriate command error
- """
- error_msg = "User invalid_user not found"
- with self.assertRaisesRegexp(CommandError, error_msg):
- arg = (
- '{"store":"split",' +
- '"user":"invalid_user",' +
- '"organization":"test-course-generator",' +
- '"number":"1",' +
- '"run":"1",' +
- '"fields":{"display_name":"test-course"}}'
- )
- call_command("generate_test_course", arg)
diff --git a/cms/djangoapps/contentstore/management/commands/tests/test_git_export.py b/cms/djangoapps/contentstore/management/commands/tests/test_git_export.py
index a8dfe03cd0..14c36448c2 100644
--- a/cms/djangoapps/contentstore/management/commands/tests/test_git_export.py
+++ b/cms/djangoapps/contentstore/management/commands/tests/test_git_export.py
@@ -18,7 +18,7 @@ from django.test.utils import override_settings
from contentstore.tests.utils import CourseTestCase
import contentstore.git_export_utils as git_export_utils
from contentstore.git_export_utils import GitExportError
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
FEATURES_WITH_EXPORT_GIT = settings.FEATURES.copy()
FEATURES_WITH_EXPORT_GIT['ENABLE_EXPORT_GIT'] = True
@@ -88,7 +88,7 @@ class TestGitExport(CourseTestCase):
"""
Test several bad URLs for validation
"""
- course_key = SlashSeparatedCourseKey('org', 'course', 'run')
+ course_key = CourseLocator('org', 'course', 'run')
with self.assertRaisesRegexp(GitExportError, unicode(GitExportError.URL_BAD)):
git_export_utils.export_to_git(course_key, 'Sillyness')
@@ -105,7 +105,7 @@ class TestGitExport(CourseTestCase):
"""
test_repo_path = '{}/test_repo'.format(git_export_utils.GIT_REPO_EXPORT_DIR)
self.assertFalse(os.path.isdir(test_repo_path))
- course_key = SlashSeparatedCourseKey('foo', 'blah', '100-')
+ course_key = CourseLocator('foo', 'blah', '100-')
# Test bad clones
with self.assertRaisesRegexp(GitExportError,
unicode(GitExportError.CANNOT_PULL)):
diff --git a/cms/djangoapps/contentstore/tests/test_clone_course.py b/cms/djangoapps/contentstore/tests/test_clone_course.py
index 82b931a54f..9ef484c91b 100644
--- a/cms/djangoapps/contentstore/tests/test_clone_course.py
+++ b/cms/djangoapps/contentstore/tests/test_clone_course.py
@@ -28,15 +28,6 @@ class CloneCourseTest(CourseTestCase):
"""Tests cloning of a course as follows: XML -> Mongo (+ data) -> Mongo -> Split -> Split"""
# 1. import and populate test toy course
mongo_course1_id = self.import_and_populate_course()
-
- # 2. clone course (mongo -> mongo)
- # TODO - This is currently failing since clone_course doesn't handle Private content - fails on Publish
- # mongo_course2_id = SlashSeparatedCourseKey('edX2', 'toy2', '2013_Fall')
- # self.store.clone_course(mongo_course1_id, mongo_course2_id, self.user.id)
- # self.assertCoursesEqual(mongo_course1_id, mongo_course2_id)
- # self.check_populated_course(mongo_course2_id)
-
- # NOTE: When the code above is uncommented this can be removed.
mongo_course2_id = mongo_course1_id
# 3. clone course (mongo -> split)
diff --git a/cms/djangoapps/contentstore/tests/test_utils.py b/cms/djangoapps/contentstore/tests/test_utils.py
index a2e137f3b4..0d5d640c78 100644
--- a/cms/djangoapps/contentstore/tests/test_utils.py
+++ b/cms/djangoapps/contentstore/tests/test_utils.py
@@ -3,7 +3,7 @@ import collections
from datetime import datetime, timedelta
from django.test import TestCase
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from pytz import UTC
from contentstore import utils
@@ -21,26 +21,26 @@ class LMSLinksTestCase(TestCase):
def lms_link_test(self):
""" Tests get_lms_link_for_item. """
- course_key = SlashSeparatedCourseKey('mitX', '101', 'test')
+ course_key = CourseLocator('mitX', '101', 'test')
location = course_key.make_usage_key('vertical', 'contacting_us')
link = utils.get_lms_link_for_item(location, False)
- self.assertEquals(link, "//localhost:8000/courses/mitX/101/test/jump_to/i4x://mitX/101/vertical/contacting_us")
+ self.assertEquals(link, "//localhost:8000/courses/course-v1:mitX+101+test/jump_to/block-v1:mitX+101+test+type@vertical+block@contacting_us")
# test preview
link = utils.get_lms_link_for_item(location, True)
self.assertEquals(
link,
- "//preview.localhost/courses/mitX/101/test/jump_to/i4x://mitX/101/vertical/contacting_us"
+ "//preview.localhost/courses/course-v1:mitX+101+test/jump_to/block-v1:mitX+101+test+type@vertical+block@contacting_us"
)
# now test with the course' location
location = course_key.make_usage_key('course', 'test')
link = utils.get_lms_link_for_item(location)
- self.assertEquals(link, "//localhost:8000/courses/mitX/101/test/jump_to/i4x://mitX/101/course/test")
+ self.assertEquals(link, "//localhost:8000/courses/course-v1:mitX+101+test/jump_to/block-v1:mitX+101+test+type@course+block@test")
def lms_link_for_certificate_web_view_test(self):
""" Tests get_lms_link_for_certificate_web_view. """
- course_key = SlashSeparatedCourseKey('mitX', '101', 'test')
+ course_key = CourseLocator('mitX', '101', 'test')
dummy_user = ModuleStoreEnum.UserID.test
mode = 'professional'
diff --git a/cms/djangoapps/contentstore/tests/utils.py b/cms/djangoapps/contentstore/tests/utils.py
index 0c62bddbc9..87975ce395 100644
--- a/cms/djangoapps/contentstore/tests/utils.py
+++ b/cms/djangoapps/contentstore/tests/utils.py
@@ -8,7 +8,8 @@ from django.conf import settings
from django.contrib.auth.models import User
from django.test.client import Client
from mock import Mock
-from opaque_keys.edx.locations import AssetLocation, SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
+from opaque_keys.edx.locations import AssetLocation
from contentstore.utils import reverse_url
from student.models import Registration
@@ -129,7 +130,7 @@ class CourseTestCase(ProceduralCourseTestMixin, ModuleStoreTestCase):
"""
content_store = contentstore()
import_course_from_xml(self.store, self.user.id, TEST_DATA_DIR, ['toy'], static_content_store=content_store)
- course_id = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ course_id = CourseKey.from_string('/'.join(['edX', 'toy', '2012_Fall']))
# create an Orphan
# We had a bug where orphaned draft nodes caused export to fail. This is here to cover that case.
diff --git a/cms/djangoapps/contentstore/views/course.py b/cms/djangoapps/contentstore/views/course.py
index 413a6ba390..deaf7a8d8a 100644
--- a/cms/djangoapps/contentstore/views/course.py
+++ b/cms/djangoapps/contentstore/views/course.py
@@ -524,11 +524,13 @@ def course_listing(request):
u'can_edit': has_studio_write_access(request.user, library.location.library_key),
}
- courses_iter = _remove_in_process_courses(courses_iter, in_process_course_actions)
+ split_archived = settings.FEATURES.get(u'ENABLE_SEPARATE_ARCHIVED_COURSES', False)
+ active_courses, archived_courses = _process_courses_list(courses_iter, in_process_course_actions, split_archived)
in_process_course_actions = [format_in_process_course_view(uca) for uca in in_process_course_actions]
return render_to_response(u'index.html', {
- u'courses': list(courses_iter),
+ u'courses': active_courses,
+ u'archived_courses': archived_courses,
u'in_process_course_actions': in_process_course_actions,
u'libraries_enabled': LIBRARIES_ENABLED,
u'libraries': [format_library_for_view(lib) for lib in libraries],
@@ -645,7 +647,6 @@ def get_courses_accessible_to_user(request, org=None):
the courses returned. A value of None will have no effect (all courses
returned), an empty string will result in no courses, and otherwise only courses with the
specified org will be returned. The default value is None.
-
"""
if GlobalStaff().has_user(request.user):
# user has global access so no need to get courses from django groups
@@ -660,10 +661,15 @@ def get_courses_accessible_to_user(request, org=None):
return courses, in_process_course_actions
-def _remove_in_process_courses(courses_iter, in_process_course_actions):
+def _process_courses_list(courses_iter, in_process_course_actions, split_archived=False):
"""
- removes any in-process courses in courses list. in-process actually refers to courses
- that are in the process of being generated for re-run
+ Iterates over the list of courses to be displayed to the user, and:
+
+ * Removes any in-process courses from the courses list. "In-process" refers to courses
+ that are in the process of being generated for re-run.
+ * If split_archived=True, removes any archived courses and returns them in a separate list.
+ Archived courses have has_ended() == True.
+ * Formats the returned courses (in both lists) to prepare them for rendering to the view.
"""
def format_course_for_view(course):
"""
@@ -681,11 +687,20 @@ def _remove_in_process_courses(courses_iter, in_process_course_actions):
}
in_process_action_course_keys = {uca.course_key for uca in in_process_course_actions}
- return (
- format_course_for_view(course)
- for course in courses_iter
- if not isinstance(course, ErrorDescriptor) and (course.id not in in_process_action_course_keys)
- )
+ active_courses = []
+ archived_courses = []
+
+ for course in courses_iter:
+ if isinstance(course, ErrorDescriptor) or (course.id in in_process_action_course_keys):
+ continue
+
+ formatted_course = format_course_for_view(course)
+ if split_archived and course.has_ended():
+ archived_courses.append(formatted_course)
+ else:
+ active_courses.append(formatted_course)
+
+ return active_courses, archived_courses
def course_outline_initial_state(locator_to_show, course_structure):
@@ -1041,7 +1056,7 @@ def settings_handler(request, course_key_string):
# exclude current course from the list of available courses
courses = (course for course in courses if course.id != course_key)
if courses:
- courses = _remove_in_process_courses(courses, in_process_course_actions)
+ courses, __ = _process_courses_list(courses, in_process_course_actions)
settings_context.update({'possible_pre_requisite_courses': list(courses)})
if credit_eligibility_enabled:
diff --git a/cms/djangoapps/contentstore/views/tests/test_access.py b/cms/djangoapps/contentstore/views/tests/test_access.py
index 235193b980..a9aefbd4c4 100644
--- a/cms/djangoapps/contentstore/views/tests/test_access.py
+++ b/cms/djangoapps/contentstore/views/tests/test_access.py
@@ -3,7 +3,7 @@ Tests access.py
"""
from django.contrib.auth.models import User
from django.test import TestCase
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from contentstore.views.access import get_user_role
from student.auth import add_users
@@ -22,7 +22,7 @@ class RolesTest(TestCase):
self.global_admin = AdminFactory()
self.instructor = User.objects.create_user('testinstructor', 'testinstructor+courses@edx.org', 'foo')
self.staff = User.objects.create_user('teststaff', 'teststaff+courses@edx.org', 'foo')
- self.course_key = SlashSeparatedCourseKey('mitX', '101', 'test')
+ self.course_key = CourseLocator('mitX', '101', 'test')
def test_get_user_role_instructor(self):
"""
diff --git a/cms/djangoapps/contentstore/views/tests/test_assets.py b/cms/djangoapps/contentstore/views/tests/test_assets.py
index 57fe05d064..4275c33cf6 100644
--- a/cms/djangoapps/contentstore/views/tests/test_assets.py
+++ b/cms/djangoapps/contentstore/views/tests/test_assets.py
@@ -10,7 +10,8 @@ from ddt import data, ddt
from django.conf import settings
from django.test.utils import override_settings
from mock import patch
-from opaque_keys.edx.locations import AssetLocation, SlashSeparatedCourseKey
+from opaque_keys.edx.locations import AssetLocation
+from opaque_keys.edx.locator import CourseLocator
from PIL import Image
from pytz import UTC
@@ -80,7 +81,7 @@ class BasicAssetsTestCase(AssetsTestCase):
def test_static_url_generation(self):
- course_key = SlashSeparatedCourseKey('org', 'class', 'run')
+ course_key = CourseLocator('org', 'class', 'run')
location = course_key.make_asset_key('asset', 'my_file_name.jpg')
path = StaticContent.get_static_path_from_location(location)
self.assertEquals(path, '/static/my_file_name.jpg')
@@ -348,7 +349,7 @@ class AssetToJsonTestCase(AssetsTestCase):
def test_basic(self):
upload_date = datetime(2013, 6, 1, 10, 30, tzinfo=UTC)
content_type = 'image/jpg'
- course_key = SlashSeparatedCourseKey('org', 'class', 'run')
+ course_key = CourseLocator('org', 'class', 'run')
location = course_key.make_asset_key('asset', 'my_file_name.jpg')
thumbnail_location = course_key.make_asset_key('thumbnail', 'my_file_name_thumb.jpg')
@@ -357,10 +358,10 @@ class AssetToJsonTestCase(AssetsTestCase):
self.assertEquals(output["display_name"], "my_file")
self.assertEquals(output["date_added"], "Jun 01, 2013 at 10:30 UTC")
- self.assertEquals(output["url"], "/c4x/org/class/asset/my_file_name.jpg")
- self.assertEquals(output["external_url"], "lms_base_url/c4x/org/class/asset/my_file_name.jpg")
+ self.assertEquals(output["url"], "/asset-v1:org+class+run+type@asset+block@my_file_name.jpg")
+ self.assertEquals(output["external_url"], "lms_base_url/asset-v1:org+class+run+type@asset+block@my_file_name.jpg")
self.assertEquals(output["portable_url"], "/static/my_file_name.jpg")
- self.assertEquals(output["thumbnail"], "/c4x/org/class/thumbnail/my_file_name_thumb.jpg")
+ self.assertEquals(output["thumbnail"], "/asset-v1:org+class+run+type@thumbnail+block@my_file_name_thumb.jpg")
self.assertEquals(output["id"], unicode(location))
self.assertEquals(output['locked'], True)
diff --git a/cms/djangoapps/contentstore/views/tests/test_course_index.py b/cms/djangoapps/contentstore/views/tests/test_course_index.py
index 83636e0e6b..14221e030e 100644
--- a/cms/djangoapps/contentstore/views/tests/test_course_index.py
+++ b/cms/djangoapps/contentstore/views/tests/test_course_index.py
@@ -10,6 +10,7 @@ import mock
import pytz
from django.conf import settings
from django.core.exceptions import PermissionDenied
+from django.test.utils import override_settings
from django.utils.translation import ugettext as _
from opaque_keys.edx.locator import CourseLocator
from search.api import perform_search
@@ -26,13 +27,13 @@ from contentstore.views.item import VisibilityState, create_xblock_info
from course_action_state.managers import CourseRerunUIStateManager
from course_action_state.models import CourseRerunState
from student.auth import has_course_author_access
-from student.roles import LibraryUserRole
+from student.roles import CourseStaffRole, GlobalStaff, LibraryUserRole
from student.tests.factories import UserFactory
from util.date_utils import get_default_time_display
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.django import modulestore
from xmodule.modulestore.exceptions import ItemNotFoundError
-from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory, LibraryFactory
+from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory, LibraryFactory, check_mongo_calls
class TestCourseIndex(CourseTestCase):
@@ -328,6 +329,136 @@ class TestCourseIndex(CourseTestCase):
self.assertIn('display_course_number: ""', response.content)
+@ddt.ddt
+class TestCourseIndexArchived(CourseTestCase):
+ """
+ Unit tests for testing the course index list when there are archived courses.
+ """
+ NOW = datetime.datetime.now(pytz.utc)
+ DAY = datetime.timedelta(days=1)
+ YESTERDAY = NOW - DAY
+ TOMORROW = NOW + DAY
+
+ ORG = 'MyOrg'
+
+ ENABLE_SEPARATE_ARCHIVED_COURSES = settings.FEATURES.copy()
+ ENABLE_SEPARATE_ARCHIVED_COURSES['ENABLE_SEPARATE_ARCHIVED_COURSES'] = True
+ DISABLE_SEPARATE_ARCHIVED_COURSES = settings.FEATURES.copy()
+ DISABLE_SEPARATE_ARCHIVED_COURSES['ENABLE_SEPARATE_ARCHIVED_COURSES'] = False
+
+ def setUp(self):
+ """
+ Add courses with the end date set to various values
+ """
+ super(TestCourseIndexArchived, self).setUp()
+
+ # Base course has no end date (so is active)
+ self.course.end = None
+ self.course.display_name = 'Active Course 1'
+ self.ORG = self.course.location.org
+ self.save_course()
+
+ # Active course has end date set to tomorrow
+ self.active_course = CourseFactory.create(
+ display_name='Active Course 2',
+ org=self.ORG,
+ end=self.TOMORROW,
+ )
+
+ # Archived course has end date set to yesterday
+ self.archived_course = CourseFactory.create(
+ display_name='Archived Course',
+ org=self.ORG,
+ end=self.YESTERDAY,
+ )
+
+ # Base user has global staff access
+ self.assertTrue(GlobalStaff().has_user(self.user))
+
+ # Staff user just has course staff access
+ self.staff, self.staff_password = self.create_non_staff_user()
+ for course in (self.course, self.active_course, self.archived_course):
+ CourseStaffRole(course.id).add_users(self.staff)
+
+ def check_index_page_with_query_count(self, separate_archived_courses, org, mongo_queries, sql_queries):
+ """
+ Checks the index page, and ensures the number of database queries is as expected.
+ """
+ with self.assertNumQueries(sql_queries):
+ with check_mongo_calls(mongo_queries):
+ self.check_index_page(separate_archived_courses=separate_archived_courses, org=org)
+
+ def check_index_page(self, separate_archived_courses, org):
+ """
+ Ensure that the index page displays the archived courses as expected.
+ """
+ index_url = '/home/'
+ index_params = {}
+ if org is not None:
+ index_params['org'] = org
+ index_response = self.client.get(index_url, index_params, HTTP_ACCEPT='text/html')
+ self.assertEquals(index_response.status_code, 200)
+
+ parsed_html = lxml.html.fromstring(index_response.content)
+ course_tab = parsed_html.find_class('courses')
+ self.assertEqual(len(course_tab), 1)
+ course_links = course_tab[0].find_class('course-link')
+ course_titles = course_tab[0].find_class('course-title')
+ archived_course_tab = parsed_html.find_class('archived-courses')
+
+ if separate_archived_courses:
+ # Archived courses should be separated from the main course list
+ self.assertEqual(len(archived_course_tab), 1)
+ archived_course_links = archived_course_tab[0].find_class('course-link')
+ archived_course_titles = archived_course_tab[0].find_class('course-title')
+ self.assertEqual(len(archived_course_links), 1)
+ self.assertEqual(len(archived_course_titles), 1)
+ self.assertEqual(archived_course_titles[0].text, 'Archived Course')
+
+ self.assertEqual(len(course_links), 2)
+ self.assertEqual(len(course_titles), 2)
+ self.assertEqual(course_titles[0].text, 'Active Course 1')
+ self.assertEqual(course_titles[1].text, 'Active Course 2')
+ else:
+ # Archived courses should be included in the main course list
+ self.assertEqual(len(archived_course_tab), 0)
+ self.assertEqual(len(course_links), 3)
+ self.assertEqual(len(course_titles), 3)
+ self.assertEqual(course_titles[0].text, 'Active Course 1')
+ self.assertEqual(course_titles[1].text, 'Active Course 2')
+ self.assertEqual(course_titles[2].text, 'Archived Course')
+
+ @ddt.data(
+ # Staff user has course staff access
+ (True, 'staff', None, 4, 21),
+ (False, 'staff', None, 4, 21),
+ # Base user has global staff access
+ (True, 'user', ORG, 3, 17),
+ (False, 'user', ORG, 3, 17),
+ (True, 'user', None, 3, 17),
+ (False, 'user', None, 3, 17),
+ )
+ @ddt.unpack
+ def test_separate_archived_courses(self, separate_archived_courses, username, org, mongo_queries, sql_queries):
+ """
+ Ensure that archived courses are shown as expected for all user types, when the feature is enabled/disabled.
+ Also ensure that enabling the feature does not adversely affect the database query count.
+ """
+ # Authenticate the requested user
+ user = getattr(self, username)
+ password = getattr(self, username + '_password')
+ self.client.login(username=user, password=password)
+
+ # Enable/disable the feature before viewing the index page.
+ features = settings.FEATURES.copy()
+ features['ENABLE_SEPARATE_ARCHIVED_COURSES'] = separate_archived_courses
+ with override_settings(FEATURES=features):
+ self.check_index_page_with_query_count(separate_archived_courses=separate_archived_courses,
+ org=org,
+ mongo_queries=mongo_queries,
+ sql_queries=sql_queries)
+
+
@ddt.ddt
class TestCourseOutline(CourseTestCase):
"""
diff --git a/cms/djangoapps/course_creators/admin.py b/cms/djangoapps/course_creators/admin.py
index 5a018ab049..52d983c725 100644
--- a/cms/djangoapps/course_creators/admin.py
+++ b/cms/djangoapps/course_creators/admin.py
@@ -6,9 +6,9 @@ import logging
from smtplib import SMTPException
from django.conf import settings
+from django.contrib import admin
from django.core.mail import send_mail
from django.dispatch import receiver
-from ratelimitbackend import admin
from course_creators.models import CourseCreator, send_admin_notification, send_user_notification, update_creator_state
from course_creators.views import update_course_creator_group
diff --git a/cms/envs/aws.py b/cms/envs/aws.py
index e64dbbf08a..4484aca24d 100644
--- a/cms/envs/aws.py
+++ b/cms/envs/aws.py
@@ -514,9 +514,11 @@ HELP_TOKENS_BOOKS = ENV_TOKENS.get('HELP_TOKENS_BOOKS', HELP_TOKENS_BOOKS)
############## Settings for CourseGraph ############################
COURSEGRAPH_JOB_QUEUE = ENV_TOKENS.get('COURSEGRAPH_JOB_QUEUE', LOW_PRIORITY_QUEUE)
-############## Settings for Profile Image Size ######################
+########################## Parental controls config #######################
-PROFILE_IMAGE_SIZES_MAP = ENV_TOKENS.get(
- 'PROFILE_IMAGE_SIZES_MAP',
- PROFILE_IMAGE_SIZES_MAP
+# The age at which a learner no longer requires parental consent, or None
+# if parental consent is never required.
+PARENTAL_CONSENT_AGE_LIMIT = ENV_TOKENS.get(
+ 'PARENTAL_CONSENT_AGE_LIMIT',
+ PARENTAL_CONSENT_AGE_LIMIT
)
diff --git a/cms/envs/bok_choy_docker.env.json b/cms/envs/bok_choy_docker.env.json
index 905ca64104..77cd2e4318 100644
--- a/cms/envs/bok_choy_docker.env.json
+++ b/cms/envs/bok_choy_docker.env.json
@@ -56,7 +56,7 @@
}
},
"COMMENTS_SERVICE_KEY": "password",
- "COMMENTS_SERVICE_URL": "http://localhost:4567",
+ "COMMENTS_SERVICE_URL": "http://edx.devstack.forum:4567",
"CONTACT_EMAIL": "info@example.com",
"DEFAULT_FEEDBACK_EMAIL": "feedback@example.com",
"DEFAULT_FROM_EMAIL": "registration@example.com",
diff --git a/cms/envs/common.py b/cms/envs/common.py
index 59d6c9328d..b9ca6546bf 100644
--- a/cms/envs/common.py
+++ b/cms/envs/common.py
@@ -55,7 +55,7 @@ from lms.envs.common import (
# indirectly accessed through the email opt-in API, which is
# technically accessible through the CMS via legacy URLs.
PROFILE_IMAGE_BACKEND, PROFILE_IMAGE_DEFAULT_FILENAME, PROFILE_IMAGE_DEFAULT_FILE_EXTENSION,
- PROFILE_IMAGE_SECRET_KEY, PROFILE_IMAGE_MIN_BYTES, PROFILE_IMAGE_MAX_BYTES,
+ PROFILE_IMAGE_SECRET_KEY, PROFILE_IMAGE_MIN_BYTES, PROFILE_IMAGE_MAX_BYTES, PROFILE_IMAGE_SIZES_MAP,
# The following setting is included as it is used to check whether to
# display credit eligibility table on the CMS or not.
ENABLE_CREDIT_ELIGIBILITY, YOUTUBE_API_KEY,
@@ -1364,15 +1364,6 @@ POLICY_CHANGE_GRADES_ROUTING_KEY = LOW_PRIORITY_QUEUE
############## Settings for CourseGraph ############################
COURSEGRAPH_JOB_QUEUE = LOW_PRIORITY_QUEUE
-############## Settings for Profile Image Size ######################
-
-PROFILE_IMAGE_SIZES_MAP = {
- 'full': 500,
- 'large': 120,
- 'medium': 50,
- 'small': 30
-}
-
###################### VIDEO IMAGE STORAGE ######################
VIDEO_IMAGE_DEFAULT_FILENAME = 'images/video-images/default_video_image.png'
diff --git a/cms/envs/devstack.py b/cms/envs/devstack.py
index 46103bab4b..1292ef4ff4 100644
--- a/cms/envs/devstack.py
+++ b/cms/envs/devstack.py
@@ -86,7 +86,6 @@ DEBUG_TOOLBAR_CONFIG = {
'debug_toolbar.panels.profiling.ProfilingPanel',
),
'SHOW_TOOLBAR_CALLBACK': 'cms.envs.devstack.should_show_debug_toolbar',
- 'JQUERY_URL': None,
}
@@ -94,9 +93,6 @@ def should_show_debug_toolbar(request):
# We always want the toolbar on devstack unless running tests from another Docker container
if request.get_host().startswith('edx.devstack.studio:'):
return False
- # Only display for non-ajax requests.
- if request.is_ajax():
- return False
return True
diff --git a/cms/static/js/i18n/ar/djangojs.js b/cms/static/js/i18n/ar/djangojs.js
index a78d5f919e..e7b40d6342 100644
--- a/cms/static/js/i18n/ar/djangojs.js
+++ b/cms/static/js/i18n/ar/djangojs.js
@@ -193,15 +193,10 @@
"A valid email address is required": "\u064a\u062c\u0628 \u0625\u062f\u062e\u0627\u0644 \u0639\u0646\u0648\u0627\u0646 \u0635\u062d\u064a\u062d \u0644\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a.",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "\u0623 \u0628 \u062a \u062b \u062c \u062d \u062e \u062f \u0630 \u0631 \u0632 \u0633 \u0634 \u0635 \u0636 \u0637 \u0638 \u0639 \u063a \u0641 \u0642 \u0643 \u0644 \u0645 \u0646 \u0647\u0640 \u0648 \u064a",
"Abbreviation": "\u0627\u0644\u0627\u062e\u062a\u0635\u0627\u0631",
- "About Me": "\u0646\u0628\u0630\u0629 \u0639\u0646\u0651\u064a",
"About You": "\u0646\u0628\u0630\u0629 \u0639\u0646\u0643",
- "About me": "\u0646\u0628\u0630\u0629 \u0639\u0646\u064a",
- "Accomplishments": "\u0627\u0644\u0625\u0646\u062c\u0627\u0632\u0627\u062a",
- "Accomplishments Pagination": "\u062a\u0631\u0642\u064a\u0645 \u0635\u0641\u062d\u0627\u062a \u0627\u0644\u0625\u0646\u062c\u0627\u0632\u0627\u062a",
"Account Information": "\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0628",
"Account Not Activated": "\u0627\u0644\u062d\u0633\u0627\u0628 \u063a\u064a\u0631 \u0645\u0641\u0639\u0651\u0644",
"Account Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0628",
- "Account Settings page.": "\u0635\u0641\u062d\u0629 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0628",
"Action": "\u0627\u0644\u0625\u062c\u0631\u0627\u0621",
"Action required: Enter a valid date.": "\u0625\u062c\u0631\u0627\u0621 \u0644\u0627\u0632\u0645: \u0623\u062f\u062e\u0644 \u062a\u0627\u0631\u064a\u062e\u0627\u064b \u0635\u0627\u0644\u062d\u0627\u064b.",
"Actions": "\u0627\u0644\u0625\u062c\u0631\u0627\u0621\u0627\u062a",
@@ -213,7 +208,6 @@
"Add Additional Signatory": "\u0625\u0636\u0627\u0641\u0629 \u0645\u064f\u0648\u064e\u0642\u0651\u0639 \u0625\u0636\u0627\u0641\u064a",
"Add Cohort": "\u0625\u0636\u0627\u0641\u0629 \u0634\u0639\u0628\u0629",
"Add Component:": "\u0625\u0636\u0627\u0641\u0629 \u0645\u0643\u0648\u0651\u0650\u0646:",
- "Add Country": "\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0628\u0644\u062f",
"Add New Component": "\u0625\u0636\u0627\u0641\u0629 \u0645\u0643\u0648\u0651\u0650\u0646 \u062c\u062f\u064a\u062f",
"Add URLs for additional versions": "\u0625\u0636\u0627\u0641\u0629 \u0631\u0648\u0627\u0628\u0637 \u0644\u0644\u0646\u0633\u062e\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629",
"Add a Chapter": "\u0625\u0636\u0627\u0641\u0629 \u0641\u0635\u0644",
@@ -224,7 +218,6 @@
"Add a learning outcome here": "\u0625\u0636\u0627\u0641\u0629 \u0646\u062a\u064a\u062c\u0629 \u062a\u0639\u0644\u064a\u0645\u064a\u0629 \u0647\u0646\u0627",
"Add a response:": "\u0623\u0636\u0641 \u0631\u062f\u0627\u064b:",
"Add another group": "\u0625\u0636\u0627\u0641\u0629 \u0645\u062c\u0645\u0648\u0639\u0629 \u0623\u062e\u0631\u0649",
- "Add language": "\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0644\u063a\u0629",
"Add notes about this learner": "\u0623\u0636\u0641 \u0645\u0644\u0627\u062d\u0638\u0627\u062a \u062a\u062e\u0635\u0651 \u0647\u0630\u0627 \u0627\u0644\u0645\u062a\u0639\u0644\u0651\u0645",
"Add to Dictionary": "\u0623\u0636\u0641 \u0625\u0644\u0649 \u0627\u0644\u0642\u0627\u0645\u0648\u0633",
"Add to Exception List": "\u0625\u0636\u0641 \u0625\u0644\u0649 \u0644\u0627\u0626\u062d\u0629 \u0627\u0644\u0627\u0633\u062a\u062b\u0646\u0627\u0621\u0627\u062a",
@@ -376,7 +369,6 @@
"Change Manually": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631 \u064a\u062f\u0648\u064a\u0651\u064b\u0627 ",
"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}": "\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0644\u0640 {display_name}",
"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",
@@ -606,7 +598,6 @@
"Edit Membership": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0639\u0636\u0648\u064a\u0651\u0629",
"Edit Team": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0641\u0631\u064a\u0642",
"Edit Your Name": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0633\u0645\u0643 ",
- "Edit the name": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0627\u0633\u0645",
"Edit this certificate?": "\u0647\u0644 \u062a\u0631\u064a\u062f \u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0634\u0647\u0627\u062f\u0629\u061f",
"Edit your post below.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0646\u0634\u0648\u0631 \u0623\u062f\u0646\u0627\u0647.",
"Editable": "\u0642\u0627\u0628\u0644 \u0644\u0644\u062a\u0639\u062f\u064a\u0644",
@@ -736,7 +727,6 @@
"Free text notes": "\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0645\u0643\u062a\u0648\u0628\u0629 \u062d\u0631\u0629",
"Frequently Asked Questions": "\u0627\u0644\u0623\u0633\u0626\u0644\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629",
"Full Name": "\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0643\u0627\u0645\u0644",
- "Full Profile": "\u0643\u0627\u0645\u0644 \u0645\u0644\u0641\u0651\u064a \u0627\u0644\u0634\u062e\u0635\u064a",
"Fullscreen": "\u0639\u0631\u0636 \u0628\u0634\u0627\u0634\u0629 \u0643\u0627\u0645\u0644\u0629",
"Fully Supported": "\u0645\u062f\u0639\u0648\u0645 \u062a\u0645\u0627\u0645\u0627\u064b",
"Gender": "\u0627\u0644\u062c\u0646\u0633",
@@ -898,7 +888,6 @@
"License Display": "\u0639\u0631\u0636 \u0627\u0644\u0625\u062c\u0627\u0632\u0629",
"License Type": "\u0646\u0648\u0639 \u0627\u0644\u0625\u062c\u0627\u0632\u0629",
"Limit Access": "\u0627\u0644\u062d\u062f\u0651 \u0645\u0646 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0648\u0635\u0648\u0644",
- "Limited Profile": "\u0645\u0644\u0641\u0651\u064a \u0627\u0644\u0634\u062e\u0635\u064a \u0627\u0644\u0645\u062d\u062f\u0648\u062f",
"Link Description": "\u0648\u0635\u0641 \u0627\u0644\u0631\u0627\u0628\u0637",
"Link Your Account": "\u0627\u0631\u0628\u0637 \u062d\u0633\u0627\u0628\u0643",
"Link types should be unique.": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0631\u0648\u0627\u0628\u0637 \u0641\u0631\u064a\u062f\u0629.",
@@ -1134,9 +1123,6 @@
"Professional Certificate for {courseName}": "\u0634\u0647\u0627\u062f\u0629 \u0627\u062d\u062a\u0631\u0627\u0641\u064a\u0629 \u0644\u0640 {courseName}",
"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": "\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a",
- "Profile Image": "\u0635\u0648\u0631\u0629 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a",
- "Profile image for {username}": "\u0635\u0648\u0631\u0629 \u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645 {username}",
"Promote another member to Admin to remove your admin rights": "\u064a\u064f\u0631\u062c\u0649 \u062a\u0631\u0642\u064a\u0629 \u0639\u0636\u0648 \u0622\u062e\u0631 \u0625\u0644\u0649 \u062f\u0631\u062c\u0629 \u0645\u0634\u0631\u0650\u0641 \u0644\u062a\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u0625\u0644\u063a\u0627\u0621 \u062d\u0642\u0648\u0642\u0643 \u0643\u0645\u0634\u0631\u0650\u0641.",
"Provisional": "\u0645\u0624\u0642\u062a",
"Provisionally Supported": "\u0645\u062f\u0639\u0648\u0645 \u0645\u0624\u0642\u062a\u0627\u064b",
@@ -1400,7 +1386,6 @@
"Team name cannot have more than 255 characters.": "\u064a\u062c\u0628 \u0623\u0644\u0627 \u064a\u062a\u062c\u0627\u0648\u0632 \u0627\u0633\u0645 \u0627\u0644\u0641\u0631\u064a\u0642 255 \u062d\u0631\u0641\u064b\u0627.",
"Teams": "\u0627\u0644\u0641\u0650\u0631\u064e\u0642",
"Teams Pagination": "\u062a\u0631\u0642\u064a\u0645 \u0635\u0641\u062d\u0627\u062a \u0627\u0644\u0641\u0650\u0631\u0642",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\u062a\u0641\u0636\u0651\u0644 \u0628\u0625\u0639\u0637\u0627\u0621 \u0627\u0644\u0645\u062a\u0639\u0644\u0651\u0645\u064a\u0646 \u0627\u0644\u0622\u062e\u0631\u064a\u0646 \u0641\u0643\u0631\u0629 \u0639\u0627\u0645\u0629 \u0639\u0646\u0643: \u0645\u0643\u0627\u0646 \u0633\u0643\u0646\u0643\u060c \u0627\u0647\u062a\u0645\u0627\u0645\u0627\u062a\u0643\u060c \u0633\u0628\u0628 \u0627\u0644\u062a\u062d\u0627\u0642\u0643 \u0628\u0647\u0630\u0647 \u0627\u0644\u0645\u0633\u0627\u0642\u0627\u062a\u060c \u0623\u0648 \u0645\u0627 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u0639\u0644\u0651\u0645\u0647.",
"Templates": "\u0646\u0645\u0627\u0630\u062c",
"Text": "\u0646\u0635\u0651",
"Text color": "\u0644\u0648\u0646 \u0627\u0644\u0646\u0635",
@@ -1640,14 +1625,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "\u064a\u064f\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0643\u0627\u0645\u064a\u0631\u062a\u0643 \u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0644\u0648\u062c\u0647\u0643. \u062b\u0645\u0651 \u0633\u0646\u0637\u0627\u0628\u0642 \u0647\u0630\u0647 \u0627\u0644\u0635\u0648\u0631\u0629 \u0645\u0639 \u0635\u0648\u0631\u0629 \u0648\u062c\u0647\u0643 \u0648\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0645\u0648\u062c\u0648\u062f\u064a\u0646 \u0641\u064a \u062d\u0633\u0627\u0628\u0643. ",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "\u0627\u0633\u062a\u062e\u062f\u0645 \u0643\u0627\u0645\u064a\u0631\u062a\u0643 \u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0644\u0648\u062c\u0647\u0643. \u062b\u0645\u0651 \u0633\u0646\u0637\u0627\u0628\u0642 \u0647\u0630\u0647 \u0627\u0644\u0635\u0648\u0631\u0629 \u0645\u0639 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0645\u0648\u062c\u0648\u062f\u0629 \u0639\u0644\u0649 \u0628\u0637\u0627\u0642\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629. ",
"Used": "\u0645\u0633\u062a\u062e\u062f\u064e\u0645",
- "Used in {count} unit": [
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629"
- ],
"User": "\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645",
"User Email": "\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645",
"Username": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645",
@@ -1772,12 +1749,10 @@
"You haven't added any assets to this course yet.": "\u0644\u0645 \u062a\u064f\u0636\u0650\u0641 \u0623\u064a \u0645\u0648\u0627\u062f \u0645\u0644\u062d\u0642\u0629 \u0628\u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0642 \u0628\u0639\u062f. ",
"You haven't added any content to this course yet.": "\u0644\u0645 \u062a\u064f\u0636\u0650\u0641 \u0623\u064a \u0645\u062d\u062a\u0648\u0649 \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0642 \u0628\u0639\u062f.",
"You haven't added any textbooks to this course yet.": "\u0644\u0645 \u062a\u064f\u0636\u0650\u0641 \u0628\u0639\u062f \u0623\u064a \u0643\u062a\u0628 \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0642.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0639\u0645\u0631\u0643 \u0645\u0627 \u0641\u0648\u0642 13 \u0633\u0646\u0629 \u0644\u062a\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u0645\u0634\u0627\u0631\u0643\u0629 \u0635\u0641\u062d\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u0628\u0623\u0643\u0645\u0644\u0647\u0627. \u0641\u0625\u0630\u0627 \u0643\u0627\u0646 \u0639\u0645\u0631\u0643 \u0645\u0627 \u0641\u0648\u0642 13 \u0633\u0646\u0629\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u062a\u0623\u0643\u0651\u062f \u0645\u0646 \u0623\u0646\u0651\u0643 \u062d\u062f\u0651\u062f\u062a \u0633\u0646\u0629 \u0645\u064a\u0644\u0627\u062f\u0643 \u0641\u064a \u0635\u0641\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a {account_settings_page_link}.",
"You must enter a valid email address in order to add a new team member": "\u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u0623\u0646 \u062a\u064f\u062f\u062e\u0650\u0644 \u0639\u0646\u0648\u0627\u0646 \u0635\u062d\u064a\u062d \u0644\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u062a\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u0625\u0636\u0627\u0641\u0629 \u0639\u0636\u0648 \u062c\u062f\u064a\u062f \u0625\u0644\u0649 \u0627\u0644\u0641\u0631\u064a\u0642.",
"You must sign out and sign back in before your language changes take effect.": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u0633\u062c\u0651\u0644 \u062e\u0631\u0648\u062c\u0643 \u062b\u0645\u0651 \u062a\u064f\u0639\u064a\u062f \u062a\u0633\u062c\u064a\u0644 \u062f\u062e\u0648\u0644\u0643 \u0644\u064a\u062c\u0631\u064a \u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u062a\u064a \u0623\u062f\u062e\u0644\u062a\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0644\u063a\u0629.",
"You must specify a name": "\u0639\u0644\u064a\u0643 \u0623\u0646 \u062a\u062d\u062f\u0651\u062f \u0627\u0633\u0645\u064b\u0627.",
"You must specify a name for the cohort": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u062d\u062f\u0651\u062f \u0627\u0633\u0645\u064b\u0627 \u0644\u0644\u0634\u0639\u0628\u0629.",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u062d\u062f\u0651\u062f \u0633\u0646\u0629 \u0645\u064a\u0644\u0627\u062f\u0643 \u0642\u0628\u0644 \u0623\u0646 \u062a\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u0645\u0634\u0627\u0631\u0643\u0629 \u0635\u0641\u062d\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u0628\u0623\u0643\u0645\u0644\u0647\u0627. \u0648\u0644\u062a\u062d\u062f\u0651\u062f \u0633\u0646\u0629 \u0645\u064a\u0644\u0627\u062f\u0643\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u0625\u0644\u0649 \u0635\u0641\u062d\u0629 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0628 {account_settings_page_link}.",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062c\u0647\u0627\u0632 \u0643\u0648\u0645\u0628\u064a\u0648\u062a\u0631 \u0645\u0632\u0648\u0651\u064e\u062f \u0628\u0643\u0627\u0645\u064a\u0631\u0627. \u0648\u0639\u0646\u062f \u0627\u0633\u062a\u0644\u0627\u0645\u0643 \u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0633\u062a\u0639\u062f\u0627\u062f \u0645\u0646 \u0627\u0644\u0645\u062a\u0635\u0641\u0651\u062d\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u062a\u0623\u0643\u0651\u062f \u0645\u0646 \u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0631\u062e\u0635\u0629 \u0642\u064a\u0627\u062f\u0629 \u0623\u0648 \u062c\u0648\u0627\u0632 \u0633\u0641\u0631 \u0623\u0648 \u063a\u064a\u0631\u0647\u0627 \u0645\u0646 \u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u0627\u0644\u0635\u0627\u062f\u0631\u0629 \u0639\u0646 \u0627\u0644\u062d\u0643\u0648\u0645\u0629 \u0648\u0627\u0644\u062a\u064a \u062a\u062d\u0645\u0644 \u0627\u0633\u0645\u0643 \u0648\u0635\u0648\u0631\u062a\u0643.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0628\u0637\u0627\u0642\u0629 \u0634\u062e\u0635\u064a\u0629 \u062a\u062d\u0645\u0644 \u0627\u0633\u0645\u0643 \u0648\u0635\u0648\u0631\u062a\u0643. \u0648\u064a\u0645\u0643\u0646 \u062a\u0642\u062f\u064a\u0645 \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 \u0623\u062e\u0631\u0649 \u0635\u0627\u062f\u0631\u0629 \u0639\u0646 \u0627\u0644\u062d\u0643\u0648\u0645\u0629\u060c \u0641\u062c\u0645\u064a\u0639 \u0647\u0630\u0647 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0645\u0642\u0628\u0648\u0644\u0629. ",
@@ -1944,7 +1919,6 @@
"{numVotes} \u0635\u0648\u062a"
],
"{organization}\\'s logo": "\u0634\u0639\u0627\u0631 \u0627\u0644{organization}",
- "{platform_name} learners can see my:": "\u064a\u0645\u0643\u0646 \u0644\u0644\u0645\u062a\u0639\u0644\u0651\u0645\u064a\u0646 \u0641\u064a \u0645\u0646\u0635\u0651\u0629 {platform_name} \u0631\u0624\u064a\u0629:",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}\u062a\u062d\u0630\u064a\u0631:{screen_reader_end} \u062a\u0639\u0630\u0651\u0631 \u0625\u064a\u062c\u0627\u062f \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0645\u062d\u062a\u0648\u0649.",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}\u062a\u062d\u0630\u064a\u0631:{screen_reader_end} \u062d\u0651\u0630\u0641\u062a \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0627\u0644\u0645\u062d\u062f\u0651\u062f\u0629 \u0633\u0627\u0628\u0642\u064b\u0627. \u064a\u064f\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062d\u062a\u0648\u0649 \u0623\u062e\u0631\u0649.",
"{start_strong}{total}{end_strong} words submitted in total.": "\u0625\u062c\u0645\u0627\u0644\u064a \u0639\u062f\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u062a\u064a \u062a\u0645 \u0627\u0631\u0633\u0627\u0644\u0647\u0627 {start_strong}{total}{end_strong}.",
diff --git a/cms/static/js/i18n/eo/djangojs.js b/cms/static/js/i18n/eo/djangojs.js
index ef58f0bf45..964edd9576 100644
--- a/cms/static/js/i18n/eo/djangojs.js
+++ b/cms/static/js/i18n/eo/djangojs.js
@@ -1451,6 +1451,7 @@
"Thanks for returning to verify your ID in: {courseName}": "Th\u00e4nks f\u00f6r r\u00e9t\u00fcrn\u00efng t\u00f6 v\u00e9r\u00eff\u00fd \u00fd\u00f6\u00fcr \u00ccD \u00efn: {courseName} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Th\u00e9 \u00dbRL \u00fd\u00f6\u00fc \u00e9nt\u00e9r\u00e9d s\u00e9\u00e9ms t\u00f6 \u00df\u00e9 \u00e4n \u00e9m\u00e4\u00efl \u00e4ddr\u00e9ss. D\u00f6 \u00fd\u00f6\u00fc w\u00e4nt t\u00f6 \u00e4dd th\u00e9 r\u00e9q\u00fc\u00efr\u00e9d m\u00e4\u00eflt\u00f6: pr\u00e9f\u00efx? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #",
"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "Th\u00e9 \u00dbRL \u00fd\u00f6\u00fc \u00e9nt\u00e9r\u00e9d s\u00e9\u00e9ms t\u00f6 \u00df\u00e9 \u00e4n \u00e9xt\u00e9rn\u00e4l l\u00efnk. D\u00f6 \u00fd\u00f6\u00fc w\u00e4nt t\u00f6 \u00e4dd th\u00e9 r\u00e9q\u00fc\u00efr\u00e9d http:// pr\u00e9f\u00efx? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #",
+ "The certificate available date must be later than the enrollment start date.": "Th\u00e9 \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9 \u00e4v\u00e4\u00efl\u00e4\u00dfl\u00e9 d\u00e4t\u00e9 m\u00fcst \u00df\u00e9 l\u00e4t\u00e9r th\u00e4n th\u00e9 \u00e9nr\u00f6llm\u00e9nt st\u00e4rt d\u00e4t\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#",
"The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "Th\u00e9 \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9 f\u00f6r th\u00efs l\u00e9\u00e4rn\u00e9r h\u00e4s \u00df\u00e9\u00e9n r\u00e9-v\u00e4l\u00efd\u00e4t\u00e9d \u00e4nd th\u00e9 s\u00fdst\u00e9m \u00efs r\u00e9-r\u00fcnn\u00efng th\u00e9 gr\u00e4d\u00e9 f\u00f6r th\u00efs l\u00e9\u00e4rn\u00e9r. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #",
"The cohort cannot be added": "Th\u00e9 \u00e7\u00f6h\u00f6rt \u00e7\u00e4nn\u00f6t \u00df\u00e9 \u00e4dd\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#",
"The cohort cannot be saved": "Th\u00e9 \u00e7\u00f6h\u00f6rt \u00e7\u00e4nn\u00f6t \u00df\u00e9 s\u00e4v\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#",
@@ -1586,6 +1587,7 @@
"This team does not have any members.": "Th\u00efs t\u00e9\u00e4m d\u00f6\u00e9s n\u00f6t h\u00e4v\u00e9 \u00e4n\u00fd m\u00e9m\u00df\u00e9rs. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#",
"This team is full.": "Th\u00efs t\u00e9\u00e4m \u00efs f\u00fcll. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#",
"This thread is closed.": "Th\u00efs thr\u00e9\u00e4d \u00efs \u00e7l\u00f6s\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#",
+ "This unit has validation issues.": "Th\u00efs \u00fcn\u00eft h\u00e4s v\u00e4l\u00efd\u00e4t\u00ef\u00f6n \u00efss\u00fc\u00e9s. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454#",
"This vote could not be processed. Refresh the page and try again.": "Th\u00efs v\u00f6t\u00e9 \u00e7\u00f6\u00fcld n\u00f6t \u00df\u00e9 pr\u00f6\u00e7\u00e9ss\u00e9d. R\u00e9fr\u00e9sh th\u00e9 p\u00e4g\u00e9 \u00e4nd tr\u00fd \u00e4g\u00e4\u00efn. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#",
"This {parentCategory} has no {childCategory}": "Th\u00efs {parentCategory} h\u00e4s n\u00f6 {childCategory} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442,#",
"Thumbnail": "Th\u00fcm\u00dfn\u00e4\u00efl \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#",
diff --git a/cms/static/js/i18n/es-419/djangojs.js b/cms/static/js/i18n/es-419/djangojs.js
index 8d2568f239..8823e143ac 100644
--- a/cms/static/js/i18n/es-419/djangojs.js
+++ b/cms/static/js/i18n/es-419/djangojs.js
@@ -137,15 +137,10 @@
"A valid email address is required": "Un email correcto es requerido.",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "ABCDEFGHIJKLMN\u00d1OPQRSTUVWXYZ",
"Abbreviation": "Abreviatura",
- "About Me": "Sobre M\u00ed",
"About You": "Acerca de usted",
- "About me": "Sobre m\u00ed",
- "Accomplishments": "Logros",
- "Accomplishments Pagination": "Paginaci\u00f3n de Logros",
"Account Information": "Informaci\u00f3n de la cuenta",
"Account Not Activated": "Cuenta no activada",
"Account Settings": "Configuraci\u00f3n de cuenta",
- "Account Settings page.": "P\u00e1gina de configuraci\u00f3n de cuenta.",
"Action": "Acci\u00f3n",
"Action required: Enter a valid date.": "Acci\u00f3n requerida: Introduzca una fecha v\u00e1lida.",
"Actions": "Acciones",
@@ -157,7 +152,6 @@
"Add Additional Signatory": "A\u00f1adir signatario adicional",
"Add Cohort": "A\u00f1adir cohorte",
"Add Component:": "A\u00f1adir Componente:",
- "Add Country": "A\u00f1adir pa\u00eds",
"Add New Component": "A\u00f1adir nuevo Componente",
"Add URLs for additional versions": "A\u00f1ada URLs para las versiones adicionales",
"Add a Chapter": "A\u00f1adir cap\u00edtulo",
@@ -168,7 +162,6 @@
"Add a learning outcome here": "Agregar Resultado de aprendizaje",
"Add a response:": "A\u00f1ada su respuesta:",
"Add another group": "A\u00f1adir nuevo grupo",
- "Add language": "A\u00f1adir idioma",
"Add notes about this learner": "A\u00f1ada una nota sobre este estudiante",
"Add to Dictionary": "Agregar al diccionario",
"Add to Exception List": "Agregar a lista de excepciones",
@@ -324,7 +317,6 @@
"Change Manually": "Cambiar Manualmente",
"Change My Email Address": "Cambiar mi direcci\u00f3n de correo electr\u00f3nico",
"Change image": "Cambiar imagen",
- "Change the settings for {display_name}": "Cambiar los ajustes para {display_name}",
"Chapter Asset": "Recursos del cap\u00edtulo",
"Chapter Name": "Nombre del cap\u00edtulo",
"Chapter information": "Informaci\u00f3n del cap\u00edtulo",
@@ -547,7 +539,6 @@
"Edit Membership": "Editar membres\u00eda",
"Edit Team": "Editar Equipo",
"Edit Your Name": "Edite su nombre",
- "Edit the name": "Editar el nombre",
"Edit this certificate?": "\u00bfEditar este certificado?",
"Edit your post below.": "Edite su publicaci\u00f3n a continuaci\u00f3n.",
"Editable": "Editable",
@@ -682,7 +673,6 @@
"Free text notes": "Notas libres",
"Frequently Asked Questions": "Preguntas frecuentes",
"Full Name": "Nombre completo",
- "Full Profile": "Perfil completo",
"Fullscreen": "Pantalla completa",
"Fully Supported": "Completamente soportado",
"Gender": "G\u00e9nero",
@@ -845,7 +835,6 @@
"License Display": "Muestra de la Licencia",
"License Type": "Tipo de Licencia",
"Limit Access": "Restrinja permisos",
- "Limited Profile": "Perfil limitado",
"Link Description": "Descripci\u00f3n del v\u00ednculo",
"Link Your Account": "Vincular tu cuenta",
"Link types should be unique.": "Los tipos de v\u00ednculos deben ser \u00fanicos.",
@@ -1084,9 +1073,6 @@
"Professional Certificate for {courseName}": "Certificado Profesional para {courseName}",
"Professional Education": "Educaci\u00f3n profesional",
"Professional Education Verified Certificate": "Certificado Verificado de Educaci\u00f3n Profesional",
- "Profile": "Perfil",
- "Profile Image": "Foto de perfil",
- "Profile image for {username}": "Foto de perfil para {username}",
"Promote another member to Admin to remove your admin rights": "Promueva a otro miembro del equipo a administrador si quiere quitar sus propios privilegios de administrador",
"Provisional": "Provisional",
"Provisionally Supported": "Soportado de forma provisional",
@@ -1347,7 +1333,6 @@
"Team name cannot have more than 255 characters.": "El nombre del equipo no puede tener m\u00e1s de 255 caracteres.",
"Teams": "Equipos",
"Teams Pagination": "Paginaci\u00f3n de Equipos",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "Comparte con otros usuarios algo sobre ti: donde vives, cuales son tus intereses, porque est\u00e1s tomando estos cursos, o cuales son tus expectativas de aprendizaje.",
"Templates": "Plantillas",
"Terms of Service and Honor Code": "T\u00e9rminos del servicio y c\u00f3digo de honor",
"Text": "Texto",
@@ -1609,10 +1594,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "Use su c\u00e1mara web para tomar una fotograf\u00eda de su documento de identidad. Usaremos esta foto para verificarla contra la fotograf\u00eda de su cara y el nombre de su cuenta.",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "Use su c\u00e1mara web para tomar una fotograf\u00eda de su cara. Usaremos esta foto para verificarla contra la fotograf\u00eda de su documento de identificaci\u00f3n.",
"Used": "Utilizado",
- "Used in {count} unit": [
- "Usado en {count} unidades",
- "Usado en {count} unidades"
- ],
"User": "Usuario",
"User Email": "Correo electr\u00f3nico del usuario",
"Username": "Nombre de usuario",
@@ -1740,12 +1721,10 @@
"You haven't added any assets to this course yet.": "No ha a\u00f1adido a\u00fan ning\u00fan recurso a este curso.",
"You haven't added any content to this course yet.": "Todav\u00eda no ha a\u00f1adido ning\u00fan contenido a este curso.",
"You haven't added any textbooks to this course yet.": "No ha a\u00f1adido a\u00fan ning\u00fan libro de texto a este curso.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "Debes tener 13 a\u00f1os o m\u00e1s para compartir un perfil completo. Si tienes m\u00e1s de esta edad, aseg\u00farate que has especificado un a\u00f1o de nacimiento en {account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "Se debe introducir un email valido para adicionar un nuevo miembro en el equipo. ",
"You must sign out and sign back in before your language changes take effect.": "Debes cerrar sesi\u00f3n y volver a iniciar para que se aplique el cambio de idioma",
"You must specify a name": "Debe especificar un nombre",
"You must specify a name for the cohort": "Debes especificar un nombre para el cohorte",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "Debes especificar un a\u00f1o de nacimiento antes de poder compartir tu perfil completo. Para definir un a\u00f1o de nacimiento, visita {account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "Necesita un equipo que tenga una webcam. Cuando reciba un mensaje desde su navegador web, aseg\u00farese de permitir el acceso a su webcam.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "Necesita el documento de identidad, licencia de conducir, pasaporte u otra identificaci\u00f3n certificada por el gobierno, que contenga su foto y nombre.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "Necesitas un ID con tu nombre y foto. Licencia, pasaporte, c\u00e9dula todos son aceptados.",
@@ -1916,7 +1895,6 @@
],
"{organization}\\'s logo": "Logo de la {organization}",
"{paragraphStart}You entered {boldStart}{email}{boldEnd}. If this email address is associated with your {platform_name} account, we will send a message with password reset instructions to this email address.{paragraphEnd}{paragraphStart}If you do not receive a password reset message, verify that you entered the correct email address, or check your spam folder.{paragraphEnd}{paragraphStart}If you need further assistance, {anchorStart}contact technical support{anchorEnd}.{paragraphEnd}": "{paragraphStart}Tu ingresaste {boldStart}{email}{boldEnd}. Si esta direcci\u00f3n de email est\u00e1 asociada con tu cuenta en {platform_name}, enviaremos un mensaje a esta direcci\u00f3n con instrucciones para restablecer tu contrase\u00f1a.{paragraphEnd}{paragraphStart}Si no recibes ning\u00fan mensaje, verifica que ingresaste la direcci\u00f3n correctamente y revisa tu carpeta de spam.{paragraphEnd}{paragraphStart}Si necesitas asistencia adicional, {anchorStart}contacta al equipo de soporte{anchorEnd}.{paragraphEnd}",
- "{platform_name} learners can see my:": "Los usuarios de {platform_name} pueden ver mi:",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}Advertencia:{screen_reader_end} No existe ning\u00fan grupo de contenido.",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}Advertencia:{screen_reader_end} El grupo de contenido previamente seleccionado ha sido borrado. Seleccione otro grupo de contenido.",
"{start_strong}{total}{end_strong} words submitted in total.": "{start_strong}{total}{end_strong} palabras enviadas en total.",
diff --git a/cms/static/js/i18n/fake2/djangojs.js b/cms/static/js/i18n/fake2/djangojs.js
index ec40ea0c90..71b910f28d 100644
--- a/cms/static/js/i18n/fake2/djangojs.js
+++ b/cms/static/js/i18n/fake2/djangojs.js
@@ -1451,6 +1451,7 @@
"Thanks for returning to verify your ID in: {courseName}": "\u0166\u0265\u0250n\u029es \u025f\u00f8\u0279 \u0279\u01dd\u0287n\u0279n\u1d09n\u0183 \u0287\u00f8 \u028c\u01dd\u0279\u1d09\u025f\u028e \u028e\u00f8n\u0279 \u0197\u0110 \u1d09n: {courseName}",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0166\u0265\u01dd \u0244\u024c\u0141 \u028e\u00f8n \u01ddn\u0287\u01dd\u0279\u01ddd s\u01dd\u01dd\u026fs \u0287\u00f8 b\u01dd \u0250n \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss. \u0110\u00f8 \u028e\u00f8n \u028d\u0250n\u0287 \u0287\u00f8 \u0250dd \u0287\u0265\u01dd \u0279\u01ddbn\u1d09\u0279\u01ddd \u026f\u0250\u1d09l\u0287\u00f8: d\u0279\u01dd\u025f\u1d09x?",
"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u0166\u0265\u01dd \u0244\u024c\u0141 \u028e\u00f8n \u01ddn\u0287\u01dd\u0279\u01ddd s\u01dd\u01dd\u026fs \u0287\u00f8 b\u01dd \u0250n \u01ddx\u0287\u01dd\u0279n\u0250l l\u1d09n\u029e. \u0110\u00f8 \u028e\u00f8n \u028d\u0250n\u0287 \u0287\u00f8 \u0250dd \u0287\u0265\u01dd \u0279\u01ddbn\u1d09\u0279\u01ddd \u0265\u0287\u0287d:// d\u0279\u01dd\u025f\u1d09x?",
+ "The certificate available date must be later than the enrollment start date.": "\u0166\u0265\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u0250\u028c\u0250\u1d09l\u0250bl\u01dd d\u0250\u0287\u01dd \u026fns\u0287 b\u01dd l\u0250\u0287\u01dd\u0279 \u0287\u0265\u0250n \u0287\u0265\u01dd \u01ddn\u0279\u00f8ll\u026f\u01ddn\u0287 s\u0287\u0250\u0279\u0287 d\u0250\u0287\u01dd.",
"The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "\u0166\u0265\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u025f\u00f8\u0279 \u0287\u0265\u1d09s l\u01dd\u0250\u0279n\u01dd\u0279 \u0265\u0250s b\u01dd\u01ddn \u0279\u01dd-\u028c\u0250l\u1d09d\u0250\u0287\u01ddd \u0250nd \u0287\u0265\u01dd s\u028es\u0287\u01dd\u026f \u1d09s \u0279\u01dd-\u0279nnn\u1d09n\u0183 \u0287\u0265\u01dd \u0183\u0279\u0250d\u01dd \u025f\u00f8\u0279 \u0287\u0265\u1d09s l\u01dd\u0250\u0279n\u01dd\u0279.",
"The cohort cannot be added": "\u0166\u0265\u01dd \u0254\u00f8\u0265\u00f8\u0279\u0287 \u0254\u0250nn\u00f8\u0287 b\u01dd \u0250dd\u01ddd",
"The cohort cannot be saved": "\u0166\u0265\u01dd \u0254\u00f8\u0265\u00f8\u0279\u0287 \u0254\u0250nn\u00f8\u0287 b\u01dd s\u0250\u028c\u01ddd",
@@ -1586,6 +1587,7 @@
"This team does not have any members.": "\u0166\u0265\u1d09s \u0287\u01dd\u0250\u026f d\u00f8\u01dds n\u00f8\u0287 \u0265\u0250\u028c\u01dd \u0250n\u028e \u026f\u01dd\u026fb\u01dd\u0279s.",
"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.",
+ "This unit has validation issues.": "\u0166\u0265\u1d09s nn\u1d09\u0287 \u0265\u0250s \u028c\u0250l\u1d09d\u0250\u0287\u1d09\u00f8n \u1d09ssn\u01dds.",
"This vote could not be processed. Refresh the page and try again.": "\u0166\u0265\u1d09s \u028c\u00f8\u0287\u01dd \u0254\u00f8nld n\u00f8\u0287 b\u01dd d\u0279\u00f8\u0254\u01ddss\u01ddd. \u024c\u01dd\u025f\u0279\u01dds\u0265 \u0287\u0265\u01dd d\u0250\u0183\u01dd \u0250nd \u0287\u0279\u028e \u0250\u0183\u0250\u1d09n.",
"This {parentCategory} has no {childCategory}": "\u0166\u0265\u1d09s {parentCategory} \u0265\u0250s n\u00f8 {childCategory}",
"Thumbnail": "\u0166\u0265n\u026fbn\u0250\u1d09l",
diff --git a/cms/static/js/i18n/fr/djangojs.js b/cms/static/js/i18n/fr/djangojs.js
index e2fb72ba9b..9f6cee11d2 100644
--- a/cms/static/js/i18n/fr/djangojs.js
+++ b/cms/static/js/i18n/fr/djangojs.js
@@ -112,15 +112,10 @@
"A valid email address is required": "Une adresse email valide est requise",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"Abbreviation": "Abr\u00e9viation",
- "About Me": "\u00c0 propos de moi",
"About You": "A propos de vous",
- "About me": "A propos de moi",
- "Accomplishments": "Accomplissements",
- "Accomplishments Pagination": "Paginations des r\u00e9alisations",
"Account Information": "Information du compte",
"Account Not Activated": "Compte non activ\u00e9",
"Account Settings": "Param\u00e8tres du compte",
- "Account Settings page.": "Param\u00e8tres du compte",
"Action": "Action",
"Action required: Enter a valid date.": "Action requise : Entrez une date valide.",
"Actions": "Actions",
@@ -131,7 +126,6 @@
"Add Additional Signatory": "Ajouter une signature additionnelle.",
"Add Cohort": "Ajouter une cohorte",
"Add Component:": "Ajouter un composant :",
- "Add Country": "Ajouter un Pays",
"Add New Component": "Ajouter un nouveau Composant",
"Add URLs for additional versions": "Ajoutez des URL pour des versions suppl\u00e9mentaires",
"Add a Chapter": "Ajouter un chapitre",
@@ -141,7 +135,6 @@
"Add a comment": "Ajouter un commentaire",
"Add a response:": "Ajouter une r\u00e9ponse",
"Add another group": "Ajouter un autre groupe",
- "Add language": "Ajouter une langue",
"Add to Dictionary": "Ajouter au dictionnaire",
"Add your first content group": "Ajouter votre premier groupe de contenu",
"Add your first group configuration": "Ajouter votre premier groupe de configuration",
@@ -267,7 +260,6 @@
"Change Manually": "Changer manuellement",
"Change My Email Address": "Modifier mon adresse email",
"Change image": "Modifier l'image",
- "Change the settings for {display_name}": "Modifier les param\u00e8tres pour {display_name}",
"Chapter Asset": "Ressource associ\u00e9e au chapitre",
"Chapter Name": "Nom du chapitre",
"Chapter information": "Information sur le chapitre",
@@ -455,7 +447,6 @@
"Edit HTML": "Editer le code HTML",
"Edit Team": "Modifier l'\u00e9quipe",
"Edit Your Name": "Modifier votre nom",
- "Edit the name": "Modifier le nom",
"Edit this certificate?": "Modifier ce certificat ?",
"Editable": "Modifiable",
"Editing comment": "Commentaire en cours d'\u00e9dition",
@@ -562,7 +553,6 @@
"Free text notes": "Notes libres",
"Frequently Asked Questions": "Foire Aux Questions",
"Full Name": "Nom complet",
- "Full Profile": "Profil complet",
"Fullscreen": "Plein \u00e9cran",
"Gender": "Genre",
"General": "G\u00e9n\u00e9ral",
@@ -690,7 +680,6 @@
"License Display": "Affichage de la licence",
"License Type": "Type de licence",
"Limit Access": "Acc\u00e8s Limit\u00e9",
- "Limited Profile": "Profil restreint",
"Link Description": "Description du Lien",
"Link Your Account": "Liez votre compte",
"Link types should be unique.": "Les types de liens doivent \u00eatre uniques.",
@@ -895,9 +884,6 @@
"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.": "Les examens v\u00e9rifi\u00e9s sont minut\u00e9s et un enregistrement vid\u00e9o est fait que chaque \u00e9tudiant. Les vid\u00e9o sont ensuite v\u00e9rifi\u00e9es pour s'assurer que les conditions de l'examen \u00e9taient correctes;",
"Professional Education": "Formation professionnelle",
"Professional Education Verified Certificate": "Certificat v\u00e9rifif\u00e9 professionel",
- "Profile": "Profil",
- "Profile Image": "Image du profil",
- "Profile image for {username}": "Image de profil pour {username}",
"Promote another member to Admin to remove your admin rights": "Veuillez ajouter un autre membre comme administrateur pour supprimer vos droits d'administrateurs",
"Public": "Public",
"Publish": "Publier",
@@ -1098,7 +1084,6 @@
"Team name cannot have more than 255 characters.": "Le nom de l'\u00e9quipe ne peut pas d\u00e9passer 255 caract\u00e8res.",
"Teams": "\u00c9quipes",
"Teams Pagination": "Pagination des \u00e9quipes",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "Parlez nous de vous : o\u00f9 habitez-vous, quels sont vos int\u00e9r\u00eats, pourquoi suivez-vous des cours ou ce que vous souhaitez apprendre.",
"Templates": "Mod\u00e8les",
"Text": "Texte",
"Text color": "Couleur du texte",
@@ -1282,10 +1267,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "Utilisez votre webcam pour prendre une photo de votre pi\u00e8ce d'identit\u00e9. Nous allons v\u00e9rifier sa concordance avec la photo de votre visage et le nom de votre compte.",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "Utiliser votre webcam pour prendre une photo de votre visage, afin que nous puissions la comparer avec celle de votre pi\u00e8ce d'identit\u00e9.",
"Used": "Utilis\u00e9",
- "Used in {count} unit": [
- "Utilis\u00e9 par {count} unit\u00e9s.",
- "Utilis\u00e9s par {count} unit\u00e9s."
- ],
"User": "Utilisateur",
"User Email": "Email de l'utilisateur",
"Username": "Nom d'utilisateur",
@@ -1390,12 +1371,10 @@
"You haven't added any assets to this course yet.": "Vous n'avez encore ajout\u00e9 aucune ressource dans ce cours.",
"You haven't added any content to this course yet.": "Vous n'avez pas encore ajout\u00e9 de contenu \u00e0 ce cours.",
"You haven't added any textbooks to this course yet.": "Vous n'avez encore ajout\u00e9 aucun manuel \u00e0 ce cours.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "Vous devez avoir plus de 13 ans pour partager un profil complet. Si vous avez plus de 13 ans, assurez-vous que votre ann\u00e9e de naissance est correcte dans {account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "Vous devez saisir une adresse e-mail valide afin d'ajouter un nouveau membre \u00e0 l'\u00e9quipe",
"You must sign out and sign back in before your language changes take effect.": "Vous devez vous d\u00e9connecter puis vous connecter \u00e0 nouveau afin que les param\u00e8tres de langue prennent effet.",
"You must specify a name": "Vous devez indiquer un nom",
"You must specify a name for the cohort": "Vous devez indiquer un nom pour la cohorte",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "Vous devez renseigner votre ann\u00e9e de naissance avant de pouvoir partager votre profil complet. Pour renseigner votre ann\u00e9e de naissance, allez sur {account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "Vous avez besoin d'un ordinateur dot\u00e9 d'une webcam. Lors que votre explorateur vous le demandera, assurez vous de lui donner l'autorisation d'acc\u00e9der \u00e0 la webcam.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "Vous avez besoin d'un permis de conduire, d'un passeport ou d'une pi\u00e8ce d'identit\u00e9 avec votre nom et photo.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "Vous avez besoin d'un permis de conduire, un passeport ou toute pi\u00e8ce d'identit\u00e9 avec votre nom et photo.",
@@ -1526,7 +1505,6 @@
"{numVotes} Vote",
"{numVotes} Votes"
],
- "{platform_name} learners can see my:": "Les utilisateurs de {platform_name} peuvent voir mon:",
"{start_strong}{total}{end_strong} words submitted in total.": "{start_strong}{total}{end_strong} mots soumis au total.",
"{unread_comments_count} new": "{unread_comments_count} nouveaux",
"\u2026": "\u2026"
diff --git a/cms/static/js/i18n/he/djangojs.js b/cms/static/js/i18n/he/djangojs.js
index b14d84eaac..0691756f33 100644
--- a/cms/static/js/i18n/he/djangojs.js
+++ b/cms/static/js/i18n/he/djangojs.js
@@ -19,9 +19,17 @@
/* gettext library */
django.catalog = {
+ " and ": "\u05d5\u05d2\u05dd",
" learner does not exist in LMS and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3 \u05d0\u05d9\u05e0\u05d5 \u05e7\u05d9\u05d9\u05dd \u05d1-LMS \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " learner is already white listed and not added to the exception list": " \u05d4\u05ea\u05dc\u05de\u05d9\u05d3 \u05db\u05d1\u05e8 \u05e0\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05d4 \u05d4\u05d1\u05d8\u05d5\u05d7\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd ",
+ " learner is not enrolled in course and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3 \u05d0\u05d9\u05e0\u05d5 \u05e8\u05e9\u05d5\u05dd \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
" learner is successfully added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3 \u05e0\u05d5\u05e1\u05e3 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " learners are already white listed and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05db\u05d1\u05e8 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05d4 \u05d4\u05dc\u05d1\u05e0\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd ",
+ " learners are not enrolled in course and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d0\u05d9\u05e0\u05dd \u05e8\u05e9\u05d5\u05de\u05d9\u05dd \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
" learners are successfully added to exception list": " \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d5 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " learners do not exist in LMS and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05dc\u05d0 \u05e7\u05d9\u05d9\u05de\u05d9\u05dd \u05d1-LMS \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " record is not in correct format and not added to the exception list": " \u05d4\u05e8\u05e9\u05d5\u05de\u05d4 \u05d0\u05d9\u05e0\u05d4 \u05d1\u05ea\u05d1\u05e0\u05d9\u05ea \u05d4\u05e0\u05db\u05d5\u05e0\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d4 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " records are not in correct format and not added to the exception list": " \u05d4\u05e8\u05e9\u05d5\u05de\u05d5\u05ea \u05d0\u05d9\u05e0\u05df \u05d1\u05ea\u05d1\u05e0\u05d9\u05ea \u05d4\u05e0\u05db\u05d5\u05e0\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
"#Replies": "#\u05ea\u05e9\u05d5\u05d1\u05d5\u05ea",
"%(cohort_name)s (%(user_count)s)": "%(cohort_name)s (%(user_count)s)",
"%(comments_count)s %(span_sr_open)scomments %(span_close)s": "%(comments_count)s %(span_sr_open)s\u05d4\u05e2\u05e8\u05d5\u05ea %(span_close)s",
@@ -104,11 +112,14 @@
"%s from now": "%s \u05de\u05e2\u05db\u05e9\u05d9\u05d5",
"(Add signatories for a certificate)": "(\u05d4\u05d5\u05e1\u05e3 \u05d7\u05ea\u05d9\u05de\u05d5\u05ea \u05dc\u05ea\u05e2\u05d5\u05d3\u05d4)",
"(Caption will be displayed when you start playing the video.)": "(\u05db\u05ea\u05d5\u05d1\u05d9\u05d5\u05ea \u05d9\u05d5\u05e6\u05d2\u05d5 \u05db\u05d0\u05e9\u05e8 \u05ea\u05e4\u05e2\u05d9\u05dc \u05d0\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5).",
+ "(Community TA)": "(\u05e2\u05d5\u05d6\u05e8 \u05d4\u05d5\u05e8\u05d0\u05d4 \u05e7\u05d4\u05d9\u05dc\u05ea\u05d9)",
"(Required Field)": "(\u05e9\u05d3\u05d4 \u05d7\u05d5\u05d1\u05d4)",
+ "(Staff)": "(\u05e6\u05d5\u05d5\u05ea)",
"(contains %(student_count)s student)": [
"(\u05db\u05d5\u05dc\u05dc\u05ea \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 %(student_count)s)",
"(\u05db\u05d5\u05dc\u05dc\u05ea %(student_count)s \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd)"
],
+ "(optional)": "(\u05d0\u05d5\u05e4\u05e6\u05d9\u05d5\u05e0\u05d0\u05dc\u05d9)",
"- Sortable": "-\u05e0\u05d9\u05ea\u05df \u05dc\u05de\u05d9\u05d5\u05df",
": video upload complete.": ": \u05d4\u05e2\u05dc\u05d0\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5 \u05d4\u05d5\u05e9\u05dc\u05de\u05d4.",
"<%= user %> already in exception list.": "<%= user %> \u05db\u05d1\u05e8 \u05e0\u05de\u05e6\u05d0 \u05d1\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd.",
@@ -121,15 +132,10 @@
"A valid email address is required": "\u05d3\u05e8\u05d5\u05e9\u05d4 \u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05ea\u05e7\u05d9\u05e0\u05d4",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05db\u05dc\u05de\u05e0\u05e1\u05e2\u05e4\u05e6\u05e7\u05e8\u05e9\u05ea",
"Abbreviation": "\u05e7\u05d9\u05e6\u05d5\u05e8",
- "About Me": "\u05e2\u05dc \u05e2\u05e6\u05de\u05d9",
"About You": "\u05e2\u05dc \u05e2\u05e6\u05de\u05da",
- "About me": "\u05e2\u05dc \u05e2\u05e6\u05de\u05d9",
- "Accomplishments": "\u05d4\u05d9\u05e9\u05d2\u05d9\u05dd",
- "Accomplishments Pagination": "\u05e2\u05d9\u05de\u05d5\u05d3 \u05d4\u05d9\u05e9\u05d2\u05d9\u05dd",
"Account Information": "\u05e4\u05e8\u05d8\u05d9 \u05d7\u05e9\u05d1\u05d5\u05df",
"Account Not Activated": "\u05d4\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e4\u05e2\u05dc",
"Account Settings": "\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d7\u05e9\u05d1\u05d5\u05df",
- "Account Settings page.": "\u05e2\u05de\u05d5\u05d3 \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d7\u05e9\u05d1\u05d5\u05df",
"Action": "\u05e4\u05e2\u05d5\u05dc\u05d4",
"Action required: Enter a valid date.": "\u05e0\u05d3\u05e8\u05e9\u05ea \u05e4\u05e2\u05d5\u05dc\u05d4: \u05d4\u05d6\u05df \u05ea\u05d0\u05e8\u05d9\u05da \u05d7\u05d5\u05e7\u05d9.",
"Actions": "\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea",
@@ -141,28 +147,30 @@
"Add Additional Signatory": "\u05d4\u05d5\u05e1\u05e3 \u05d7\u05ea\u05d9\u05de\u05d4 \u05e0\u05d5\u05e1\u05e4\u05ea",
"Add Cohort": "\u05d4\u05d5\u05e1\u05e3 \u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3",
"Add Component:": "\u05d4\u05d5\u05e1\u05e3 \u05e8\u05db\u05d9\u05d1:",
- "Add Country": "\u05d4\u05d5\u05e1\u05e3 \u05de\u05d3\u05d9\u05e0\u05d4",
"Add New Component": "\u05d4\u05d5\u05e1\u05e3 \u05e8\u05db\u05d9\u05d1 \u05d7\u05d3\u05e9",
"Add URLs for additional versions": "\u05d4\u05d5\u05e1\u05e3 \u05db\u05ea\u05d5\u05d1\u05d5\u05ea URL \u05e2\u05d1\u05d5\u05e8 \u05d2\u05e8\u05e1\u05d0\u05d5\u05ea \u05e0\u05d5\u05e1\u05e4\u05d5\u05ea",
"Add a Chapter": "\u05d4\u05d5\u05e1\u05e3 \u05e4\u05e8\u05e7",
"Add a New Cohort": "\u05d4\u05d5\u05e1\u05e3 \u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3 \u05d7\u05d3\u05e9\u05d4",
"Add a Post": "\u05d4\u05d5\u05e1\u05e3 \u05e4\u05d5\u05e1\u05d8",
"Add a Response": "\u05d4\u05d5\u05e1\u05e3 \u05ea\u05d2\u05d5\u05d1\u05d4",
+ "Add a clear and descriptive title to encourage participation. (Required)": "\u05d4\u05d5\u05e1\u05e3 \u05db\u05d5\u05ea\u05e8\u05ea \u05d1\u05e8\u05d5\u05e8\u05d4 \u05d5\u05ea\u05d9\u05d0\u05d5\u05e8\u05d9\u05ea \u05d1\u05db\u05d3\u05d9 \u05dc\u05e2\u05d5\u05d3\u05d3 \u05d0\u05ea \u05d4\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d1\u05d3\u05d9\u05d5\u05df. (\u05d7\u05d5\u05d1\u05d4).",
"Add a comment": "\u05d4\u05d5\u05e1\u05e3 \u05d4\u05e2\u05e8\u05d4",
"Add a learning outcome here": "\u05d4\u05d5\u05e1\u05e3 \u05ea\u05d5\u05e6\u05d0\u05ea \u05dc\u05de\u05d9\u05d3\u05d4 \u05db\u05d0\u05df",
"Add a response:": "\u05d4\u05d5\u05e1\u05e3 \u05ea\u05d2\u05d5\u05d1\u05d4:",
"Add another group": "\u05d4\u05d5\u05e1\u05e3 \u05e7\u05d1\u05d5\u05e6\u05d4 \u05d0\u05d7\u05e8\u05ea",
- "Add language": "\u05d4\u05d5\u05e1\u05e3 \u05e9\u05e4\u05d4",
"Add notes about this learner": "\u05d4\u05d5\u05e1\u05e3 \u05d4\u05e2\u05e8\u05d5\u05ea \u05dc\u05d2\u05d1\u05d9 \u05dc\u05d5\u05de\u05d3 \u05d6\u05d4",
"Add to Dictionary": "\u05d4\u05d5\u05e1\u05e3 \u05dc\u05de\u05d9\u05dc\u05d5\u05df",
"Add to Exception List": "\u05d4\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
"Add your first content group": "\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 \u05e9\u05dc\u05da",
"Add your first group configuration": "\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05d4\u05d2\u05d3\u05e8\u05ea \u05ea\u05e6\u05d5\u05e8\u05ea \u05e7\u05d1\u05d5\u05e6\u05ea\u05da \u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 ",
"Add your first textbook": "\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05e1\u05e4\u05e8 \u05d4\u05dc\u05d9\u05de\u05d5\u05d3 \u05d4\u05e8\u05d0\u05e9\u05d5\u05df \u05e9\u05dc\u05da",
+ "Add your post to a relevant topic to help others find it. (Required)": "\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8 \u05e9\u05dc\u05da \u05dc\u05e0\u05d5\u05e9\u05d0 \u05d4\u05e8\u05dc\u05d5\u05d5\u05e0\u05d8\u05d9 \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d4\u05e7\u05dc \u05e2\u05dc \u05d0\u05d7\u05e8\u05d9\u05dd \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05d5\u05ea\u05d5. (\u05d7\u05d5\u05d1\u05d4)",
"Add {role} Access": "\u05d4\u05d5\u05e1\u05e3 \u05d2\u05d9\u05e9\u05ea {role}",
"Adding": "\u05de\u05d5\u05e1\u05d9\u05e3",
"Adding the selected course to your cart": "\u05d4\u05d5\u05e1\u05e4\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05e9\u05e0\u05d1\u05d7\u05e8 \u05dc\u05e2\u05d2\u05dc\u05ea \u05d4\u05e7\u05e0\u05d9\u05d5\u05ea \u05e9\u05dc\u05da",
"Additional Information": "\u05de\u05d9\u05d3\u05e2 \u05e0\u05d5\u05e1\u05e3",
+ "Additional posts could not be loaded. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05e4\u05d5\u05e1\u05d8\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "Additional responses could not be loaded. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05ea\u05d2\u05d5\u05d1\u05d5\u05ea \u05e0\u05d5\u05e1\u05e4\u05d5\u05ea. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"Adjust video speed": "\u05d4\u05ea\u05d0\u05dd \u05d0\u05ea \u05de\u05d4\u05d9\u05e8\u05d5\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5",
"Adjust video volume": "\u05d4\u05ea\u05d0\u05dd \u05d0\u05ea \u05e2\u05d5\u05e6\u05de\u05ea \u05d4\u05e7\u05d5\u05dc \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5",
"Admin": "\u05de\u05e0\u05d4\u05dc",
@@ -183,6 +191,7 @@
"All groups must have a name.": "\u05dc\u05db\u05dc \u05d4\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05e9\u05dd.",
"All groups must have a unique name.": "\u05dc\u05db\u05dc \u05d4\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05e9\u05dd \u05d9\u05d9\u05d7\u05d5\u05d3\u05d9.",
"All learners in the {cohort_name} cohort": "\u05db\u05dc \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d1\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3 {cohort_name}",
+ "All learners in the {track_name} track": "\u05db\u05dc \u05de\u05d9 \u05e9\u05dc\u05d5\u05de\u05d3 \u05d1\u05de\u05e1\u05dc\u05d5\u05dc {track_name}",
"All learners who are enrolled in this course": "\u05db\u05dc \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05e9\u05e8\u05e9\u05d5\u05de\u05d9\u05dd \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4",
"All payment options are currently unavailable.": "\u05db\u05dc \u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d4\u05ea\u05e9\u05dc\u05d5\u05dd \u05d0\u05d9\u05e0\u05df \u05d6\u05de\u05d9\u05e0\u05d5\u05ea \u05db\u05e8\u05d2\u05e2.",
"All professional education courses are fee-based, and require payment to complete the enrollment process.": "\u05db\u05dc \u05d4\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05d1\u05d7\u05d9\u05e0\u05d5\u05da \u05d4\u05de\u05e7\u05e6\u05d5\u05e2\u05d9 \u05de\u05d1\u05d5\u05e1\u05e1\u05d9\u05dd \u05e2\u05dc \u05ea\u05e9\u05dc\u05d5\u05dd, \u05d5\u05dc\u05db\u05df \u05e0\u05d3\u05e8\u05e9 \u05ea\u05e9\u05dc\u05d5\u05dd \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d4\u05e9\u05dc\u05d9\u05dd \u05d0\u05ea \u05ea\u05d4\u05dc\u05d9\u05da \u05d4\u05d4\u05e8\u05e9\u05de\u05d4.",
@@ -211,6 +220,7 @@
"An error has occurred. Refresh the page, and then try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
"An error has occurred. Try refreshing the page, or check your Internet connection.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4. \u05e0\u05e1\u05d4 \u05dc\u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05d3\u05e3 \u05d0\u05d5 \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d7\u05d9\u05d1\u05d5\u05e8 \u05d4\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8.",
"An error occurred retrieving your email. Please try again later, and contact technical support if the problem persists.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d0\u05d7\u05d6\u05d5\u05e8 \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc\u05da. \u05d0\u05e0\u05d0 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1 \u05de\u05d0\u05d5\u05d7\u05e8 \u05d9\u05d5\u05ea\u05e8. \u05d0\u05dd \u05d4\u05d1\u05e2\u05d9\u05d4 \u05e0\u05de\u05e9\u05db\u05ea, \u05e4\u05e0\u05d4 \u05dc\u05ea\u05de\u05d9\u05db\u05d4 \u05d8\u05db\u05e0\u05d9\u05ea. ",
+ "An error occurred when signing you in to %s.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05d4\u05d7\u05d9\u05d1\u05d5\u05e8 \u05e9\u05dc\u05da \u05dc-%s.",
"An error occurred while removing the member from the team. Try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05d4\u05e1\u05e8\u05ea \u05d7\u05d1\u05e8 \u05de\u05d4\u05e6\u05d5\u05d5\u05ea. \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
"An error occurred.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4.",
"An error occurred. Make sure that the student's username or email address is correct and try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4. \u05d0\u05e0\u05d0 \u05d5\u05d3\u05d0 \u05db\u05d9 \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9 \u05e9\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d0\u05d5 \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc\u05d5 \u05e0\u05db\u05d5\u05e0\u05d4 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
@@ -233,6 +243,7 @@
"Are you sure you want to delete this update?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \u05e2\u05d3\u05db\u05d5\u05df \u05d6\u05d4?",
"Are you sure you want to delete {email} from the course team for \u201c{container}\u201d?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05de\u05d7\u05d5\u05e7 {email} \u05de\u05e6\u05d5\u05d5\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05e2\u05d1\u05d5\u05e8 \u201c{container}\u201d? ",
"Are you sure you want to delete {email} from the library \u201c{container}\u201d?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea {email} \u05de\u05e1\u05e4\u05e8\u05d9\u05d9\u05ea \u201c{container}\u201d?",
+ "Are you sure you want to remove this video from the list?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e1\u05d9\u05e8 \u05d0\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d5\u05d9\u05d3\u05d0\u05d5 \u05d6\u05d4 \u05de\u05d4\u05e8\u05e9\u05d9\u05de\u05d4?",
"Are you sure you want to restrict {email} access to \u201c{container}\u201d?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05d4\u05d2\u05d1\u05d9\u05dc \u05d0\u05ea \u05d2\u05d9\u05e9\u05ea {email} \u05dc\u201c{container}\u201d?",
"Are you sure you want to revert to the last published version of the unit? You cannot undo this action.": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05d7\u05d6\u05d5\u05e8 \u05dc\u05d2\u05e8\u05e1\u05d4 \u05d4\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4 \u05e9\u05dc \u05d9\u05d7\u05d9\u05d3\u05d4 \u05d6\u05d5, \u05e9\u05e4\u05d5\u05e8\u05e1\u05de\u05d4 ? \u05d0\u05d9\u05e0\u05da \u05d9\u05db\u05d5\u05dc \u05dc\u05d1\u05d8\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 \u05d6\u05d5. ",
"Are you sure you wish to delete this item. It cannot be reversed!\n\nAlso any content that links/refers to this item will no longer work (e.g. broken images and/or links)": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05de\u05d7\u05d5\u05e7 \u05e4\u05e8\u05d9\u05d8 \u05d6\u05d4. \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d9\u05d4\u05d9\u05d4 \u05dc\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05e4\u05e2\u05d5\u05dc\u05d4!\n\n\u05d1\u05e0\u05d5\u05e1\u05e3, \u05db\u05dc \u05ea\u05d5\u05db\u05df \u05e9\u05de\u05e7\u05e9\u05e8/\u05de\u05ea\u05d9\u05d9\u05d7\u05e1 \u05dc\u05e4\u05e8\u05d9\u05d8 \u05d6\u05d4 \u05dc\u05d0 \u05d9\u05e2\u05d1\u05d5\u05d3 \u05d9\u05d5\u05ea\u05e8 (\u05dc\u05d3\u05d5\u05d2\u05de\u05d4, \u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05d5/\u05d0\u05d5 \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd \u05e9\u05d1\u05d5\u05e8\u05d9\u05dd)",
@@ -301,7 +312,6 @@
"Change Manually": "\u05e9\u05e0\u05d4 \u05d9\u05d3\u05e0\u05d9\u05ea",
"Change My Email Address": "\u05e9\u05e0\u05d4 \u05d0\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc\u05d9",
"Change image": "\u05e9\u05e0\u05d4 \u05ea\u05de\u05d5\u05e0\u05d4",
- "Change the settings for {display_name}": "\u05e9\u05e0\u05d4 \u05d0\u05ea \u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 {display_name}",
"Chapter Asset": "\u05e0\u05db\u05e1 \u05d4\u05e4\u05e8\u05e7",
"Chapter Name": "\u05e9\u05dd \u05d4\u05e4\u05e8\u05e7",
"Chapter information": "\u05de\u05d9\u05d3\u05e2 \u05e2\u05dc \u05d4\u05e4\u05e8\u05e7",
@@ -330,6 +340,7 @@
"Choose a .csv file": "\u05d1\u05d7\u05e8 \u05e7\u05d5\u05d1\u05e5 CSV.",
"Choose a content group to associate": "\u05d1\u05d7\u05e8 \u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df \u05dc\u05e7\u05e9\u05e8",
"Choose mode": "\u05d1\u05d7\u05e8 \u05de\u05e6\u05d1",
+ "Choose new file": "\u05d1\u05d7\u05e8 \u05e7\u05d5\u05d1\u05e5 \u05d7\u05d3\u05e9",
"Choose one": "\u05d1\u05d7\u05e8 \u05d0\u05d7\u05d3",
"Choose your institution from the list below:": "\u05d1\u05d7\u05e8 \u05d0\u05ea \u05d4\u05de\u05d5\u05e1\u05d3 \u05e9\u05dc\u05da \u05de\u05d4\u05e8\u05e9\u05d9\u05de\u05d4 \u05e9\u05dc\u05d4\u05dc\u05df:",
"Circle": "\u05de\u05e2\u05d2\u05dc",
@@ -356,6 +367,7 @@
"Code block": "\u05d1\u05dc\u05d5\u05e7 \u05e7\u05d5\u05d3",
"Cohort Assignment Method": "\u05e9\u05d9\u05d8\u05ea \u05d4\u05e7\u05e6\u05d0\u05d4 \u05dc\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3",
"Cohort Name": "\u05e9\u05dd \u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3",
+ "Cohorts": "\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05dc\u05de\u05d9\u05d3\u05d4",
"Cohorts Disabled": "\u05d1\u05d8\u05dc \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05dc\u05d9\u05de\u05d5\u05d3",
"Cohorts Enabled": "\u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3 \u05de\u05d0\u05d5\u05e4\u05e9\u05e8\u05ea",
"Collapse All": "\u05db\u05d5\u05d5\u05e5 \u05d4\u05db\u05dc",
@@ -369,6 +381,7 @@
"Commentary": "\u05d4\u05e2\u05e8\u05d5\u05ea",
"Common Problem Types": "\u05e1\u05d5\u05d2\u05d9 \u05d1\u05e2\u05d9\u05d5\u05ea \u05e0\u05e4\u05d5\u05e6\u05d5\u05ea",
"Community TA": "\u05e2\u05d5\u05d6\u05e8 \u05d4\u05d5\u05e8\u05d0\u05d4 \u05d1\u05e4\u05d5\u05e8\u05d5\u05dd",
+ "Completed": "\u05d4\u05d5\u05e9\u05dc\u05dd",
"Component": "\u05e8\u05db\u05d9\u05d1",
"Component Location ID": "\u05de\u05d6\u05d4\u05d4 \u05de\u05d9\u05e7\u05d5\u05dd \u05e8\u05db\u05d9\u05d1",
"Configure": "\u05d4\u05d2\u05d3\u05e8",
@@ -445,6 +458,7 @@
"Deactivate": "\u05d1\u05d8\u05dc ",
"Decrease indent": "\u05d4\u05e7\u05d8\u05df \u05d4\u05d6\u05d7\u05d4",
"Default": "\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc",
+ "Default (Local Time Zone)": "\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc (\u05d0\u05d6\u05d5\u05e8\u05d9 \u05d6\u05de\u05df \u05de\u05e7\u05d5\u05de\u05d9\u05d9\u05dd)",
"Default Timed Transcript": "\u05ea\u05de\u05dc\u05d9\u05dc \u05de\u05ea\u05d5\u05d6\u05de\u05df \u05db\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc",
"Delete": "\u05de\u05d7\u05e7",
"Delete \"<%= signatoryName %>\" from the list of signatories?": "\u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \"<%= signatoryName %>\" \u05de\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05ea\u05d9\u05de\u05d5\u05ea?",
@@ -459,12 +473,15 @@
"Delete this %(item_display_name)s?": "\u05de\u05d7\u05e7 \u05d0\u05ea \u05d4%(item_display_name)s?",
"Delete this asset": "\u05de\u05d7\u05e7 \u05e0\u05db\u05e1 \u05d6\u05d4",
"Delete this team?": "\u05dc\u05de\u05d7\u05d5\u05e7 \u05e6\u05d5\u05d5\u05ea \u05d6\u05d4?",
+ "Delete this {xblock_type} (and prerequisite)?": "\u05d4\u05d0\u05dd \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea {xblock_type} (and prerequisite) \u05d6\u05d4? ",
+ "Delete this {xblock_type}?": "\u05d4\u05d0\u05dd \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea {xblock_type} \u05d6\u05d4?",
"Delete \u201c<%= name %>\u201d?": "\u05de\u05d7\u05e7 \u201c<%= name %>\u201d?",
"Deleted Content Group": "\u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df \u05e0\u05de\u05d7\u05e7\u05d4",
"Deleting": "\u05de\u05d5\u05d7\u05e7",
"Deleting a team is permanent and cannot be undone. All members are removed from the team, and team discussions can no longer be accessed.": "\u05de\u05d7\u05d9\u05e7\u05ea \u05e6\u05d5\u05d5\u05ea \u05d4\u05d9\u05d0 \u05e7\u05d1\u05d5\u05e2\u05d4 \u05d5\u05d0\u05d9\u05df \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05dc\u05d1\u05d8\u05dc\u05d4. \u05db\u05dc \u05d4\u05d7\u05d1\u05e8\u05d9\u05dd \u05d4\u05d5\u05e1\u05e8\u05d5 \u05de\u05d4\u05e6\u05d5\u05d5\u05ea, \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d2\u05e9\u05ea \u05d9\u05d5\u05ea\u05e8 \u05dc\u05d3\u05d9\u05d5\u05e0\u05d9 \u05d4\u05e6\u05d5\u05d5\u05ea.",
"Deleting a textbook cannot be undone and once deleted any reference to it in your courseware's navigation will also be removed.": "\u05de\u05d7\u05d9\u05e7\u05ea \u05e1\u05e4\u05e8 \u05dc\u05d9\u05de\u05d5\u05d3 \u05d0\u05d9\u05e0\u05e0\u05d4 \u05d4\u05e4\u05d9\u05db\u05d4 \u05d5\u05d1\u05e8\u05d2\u05e2 \u05e9\u05ea\u05d1\u05d5\u05e6\u05e2 \u05de\u05d7\u05d9\u05e7\u05d4, \u05db\u05dc \u05d4\u05e4\u05e0\u05d9\u05d9\u05d4 \u05de\u05d4\u05dc\u05d5\u05de\u05d3\u05d4 \u05dc\u05e1\u05e4\u05e8 \u05ea\u05d9\u05de\u05d7\u05e7 \u05d2\u05dd \u05db\u05df. ",
"Deleting this %(item_display_name)s is permanent and cannot be undone.": "\u05de\u05d7\u05d9\u05e7\u05ea %(item_display_name)s \u05d4\u05d9\u05d0 \u05e7\u05d1\u05d5\u05e2\u05d4 \u05d5\u05d0\u05d9\u05e0\u05d4 \u05d4\u05e4\u05d9\u05db\u05d4.",
+ "Deleting this {xblock_type} is permanent and cannot be undone.": "\u05de\u05d7\u05d9\u05e7\u05ea {xblock_type} \u05d6\u05d4 \u05d4\u05d9\u05d0 \u05e7\u05d1\u05d5\u05e2\u05d4 \u05d5\u05d0\u05d9\u05e0\u05d4 \u05d4\u05e4\u05d9\u05db\u05d4.",
"Deprecated": "\u05dc\u05d0 \u05de\u05d5\u05de\u05dc\u05e5 \u05dc\u05e9\u05d9\u05de\u05d5\u05e9",
"Description": "\u05ea\u05d9\u05d0\u05d5\u05e8",
"Description of the certificate": "\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05ea\u05e2\u05d5\u05d3\u05d4",
@@ -515,7 +532,6 @@
"Edit Membership": "\u05e2\u05e8\u05d5\u05da \u05d7\u05d1\u05e8\u05d5\u05ea",
"Edit Team": "\u05e2\u05e8\u05d5\u05da \u05e6\u05d5\u05d5\u05ea",
"Edit Your Name": "\u05e2\u05e8\u05d5\u05da \u05d0\u05ea \u05e9\u05de\u05da",
- "Edit the name": "\u05e2\u05e8\u05d5\u05da \u05d0\u05ea \u05d4\u05e9\u05dd",
"Edit this certificate?": "\u05dc\u05e2\u05e8\u05d5\u05da \u05ea\u05e2\u05d5\u05d3\u05d4 \u05d6\u05d5?",
"Edit your post below.": "\u05e2\u05e8\u05d5\u05da \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8 \u05e9\u05dc\u05d4\u05dc\u05df.",
"Editable": "\u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05e8\u05d9\u05db\u05d4",
@@ -543,6 +559,7 @@
"Enrollment Date": "\u05ea\u05d0\u05e8\u05d9\u05da \u05d4\u05e8\u05e9\u05de\u05d4",
"Enrollment Mode": "\u05de\u05e6\u05d1 \u05d4\u05e8\u05e9\u05de\u05d4",
"Enrollment Opens on": "\u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e0\u05e4\u05ea\u05d7 \u05d1",
+ "Enrollment Tracks": "\u05de\u05e1\u05dc\u05d5\u05dc\u05d9 \u05d4\u05e8\u05e9\u05de\u05d4",
"Ensure that you can see your photo and read your name": "\u05d5\u05d3\u05d0 \u05db\u05d9 \u05e0\u05d9\u05ea\u05df \u05dc\u05e8\u05d0\u05d5\u05ea \u05d0\u05ea \u05ea\u05de\u05d5\u05e0\u05ea\u05da \u05d5\u05dc\u05e7\u05e8\u05d5\u05d0 \u05d0\u05ea \u05e9\u05de\u05da.",
"Enter Due Date and Time": "\u05d4\u05d6\u05df \u05ea\u05d0\u05e8\u05d9\u05da \u05e1\u05d9\u05d5\u05dd \u05d5\u05e9\u05e2\u05d4",
"Enter Start Date and Time": "\u05d4\u05d6\u05df \u05ea\u05d0\u05e8\u05d9\u05da \u05d4\u05ea\u05d7\u05dc\u05d4 \u05d5\u05e9\u05e2\u05d4",
@@ -577,6 +594,7 @@
"Error getting student list.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e7\u05d1\u05dc\u05ea \u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd.",
"Error getting student progress url for '<%- student_id %>'. Make sure that the student identifier is spelled correctly.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e7\u05d1\u05dc\u05ea \u05db\u05ea\u05d5\u05d1\u05ea URL \u05e9\u05dc \u05d4\u05ea\u05e7\u05d3\u05de\u05d5\u05ea \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05e2\u05d1\u05d5\u05e8 '<%- student_id %>'. \u05d5\u05d3\u05d0 \u05e9\u05de\u05d6\u05d4\u05d4 \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05de\u05d0\u05d5\u05d9\u05ea \u05db\u05d4\u05dc\u05db\u05d4.",
"Error getting task history for problem '<%- problem_id %>' and student '<%- student_id %>'. Make sure that the problem and student identifiers are complete and correct.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05e7\u05d1\u05dc\u05ea \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d9\u05ea \u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 \u05d4\u05d1\u05e2\u05d9\u05d4 '<%- problem_id %>' \u05d5\u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 '<%- student_id %>'. \u05d5\u05d3\u05d0 \u05e9\u05de\u05d6\u05d4\u05d4 \u05d4\u05d1\u05e2\u05d9\u05d4 \u05d5\u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d4\u05dd \u05de\u05dc\u05d0\u05d9\u05dd \u05d5\u05e0\u05db\u05d5\u05e0\u05d9\u05dd.",
+ "Error importing course": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d9\u05d9\u05d1\u05d5\u05d0 \u05e7\u05d5\u05e8\u05e1.",
"Error listing task history for this student and problem.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e8\u05d9\u05e9\u05d5\u05dd \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05ea \u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d6\u05d4 \u05d5\u05d1\u05e2\u05d9\u05d4 \u05d6\u05d5.",
"Error posting your message.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05e4\u05e8\u05e1\u05d5\u05dd \u05d4\u05d4\u05d5\u05d3\u05e2\u05d4 \u05e9\u05dc\u05da",
"Error removing user": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d4\u05e1\u05e8\u05ea \u05de\u05e9\u05ea\u05de\u05e9",
@@ -645,7 +663,6 @@
"Free text notes": "\u05d4\u05e2\u05e8\u05d5\u05ea \u05d8\u05e7\u05e1\u05d8 \u05d7\u05d5\u05e4\u05e9\u05d9",
"Frequently Asked Questions": "\u05e9\u05d0\u05dc\u05d5\u05ea \u05e0\u05e4\u05d5\u05e6\u05d5\u05ea",
"Full Name": "\u05e9\u05dd \u05de\u05dc\u05d0",
- "Full Profile": "\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05de\u05dc\u05d0",
"Fullscreen": "\u05de\u05e1\u05da \u05de\u05dc\u05d0",
"Fully Supported": "\u05e0\u05ea\u05de\u05da \u05d1\u05de\u05dc\u05d5\u05d0\u05d5",
"Gender": "\u05de\u05d2\u05d3\u05e8",
@@ -807,7 +824,6 @@
"License Display": "\u05ea\u05e6\u05d5\u05d2\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05df",
"License Type": "\u05e1\u05d5\u05d2 \u05e8\u05d9\u05e9\u05d9\u05d5\u05df",
"Limit Access": "\u05d2\u05d9\u05e9\u05d4 \u05de\u05d5\u05d2\u05d1\u05dc\u05ea",
- "Limited Profile": "\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05d7\u05dc\u05e7\u05d9",
"Link Description": "\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8",
"Link Your Account": "\u05e7\u05e9\u05e8 \u05d0\u05ea \u05d7\u05e9\u05d1\u05d5\u05e0\u05da",
"Link types should be unique.": "\u05e2\u05dc \u05e1\u05d5\u05d2\u05d9 \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05d4\u05d9\u05d5\u05ea \u05d9\u05d7\u05d5\u05d3\u05d9\u05d9\u05dd.",
@@ -828,6 +844,7 @@
"Loading content": "\u05d8\u05d5\u05e2\u05df \u05ea\u05d5\u05db\u05df",
"Loading data...": "\u05d8\u05d5\u05e2\u05df \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd...",
"Loading more threads": "\u05d8\u05d5\u05e2\u05df \u05e2\u05d5\u05d3 \u05e9\u05e8\u05e9\u05d5\u05e8\u05d9\u05dd",
+ "Loading posts list": "\u05d8\u05d5\u05e2\u05df \u05e8\u05e9\u05d9\u05de\u05ea \u05e4\u05d5\u05e1\u05d8\u05d9\u05dd",
"Loading your courses": "\u05d8\u05d5\u05e2\u05df \u05d0\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05e9\u05dc\u05da",
"Location in Course": "\u05de\u05d9\u05e7\u05d5\u05dd \u05d1\u05e7\u05d5\u05e8\u05e1",
"Lock this asset": "\u05e0\u05e2\u05dc \u05e0\u05db\u05e1 \u05d6\u05d4",
@@ -879,6 +896,7 @@
"New document": "\u05de\u05e1\u05de\u05da \u05d7\u05d3\u05e9",
"New enrollment mode:": "\u05de\u05e6\u05d1 \u05d4\u05e8\u05e9\u05de\u05d4 \u05d7\u05d3\u05e9:",
"New window": "\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9",
+ "New {component_type}": "\u05d7\u05d3\u05e9 {component_type} ",
"Next": "\u05d4\u05d1\u05d0",
"Next Step: Confirm your identity": "\u05d4\u05e9\u05dc\u05d1 \u05d4\u05d1\u05d0: \u05d0\u05de\u05ea \u05d0\u05ea \u05d6\u05d4\u05d5\u05ea\u05da",
"Next: %(nextStepTitle)s": "\u05d4\u05d1\u05d0: %(nextStepTitle)s",
@@ -891,10 +909,12 @@
"No color": "\u05dc\u05dc\u05d0 \u05e6\u05d1\u05e2",
"No content-specific discussion topics exist.": "\u05dc\u05d0 \u05e7\u05d9\u05d9\u05de\u05d9\u05dd \u05e0\u05d5\u05e9\u05d0\u05d9 \u05d3\u05d9\u05d5\u05df \u05e1\u05e4\u05e6\u05d9\u05e4\u05d9\u05d9\u05dd \u05dc\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3",
"No description available": "\u05d0\u05d9\u05df \u05ea\u05d9\u05d0\u05d5\u05e8 \u05d6\u05de\u05d9\u05df",
+ "No posts matched your query.": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05e4\u05d5\u05e1\u05d8\u05d9\u05dd \u05d4\u05ea\u05d5\u05d0\u05de\u05d9\u05dd \u05d0\u05ea \u05d4\u05e9\u05d0\u05d9\u05dc\u05ea\u05d0 \u05e9\u05dc\u05da.",
"No prerequisite": "\u05dc\u05dc\u05d0 \u05d3\u05e8\u05d9\u05e9\u05d4 \u05de\u05d5\u05e7\u05d3\u05de\u05ea",
"No receipt available": "\u05d0\u05d9\u05df \u05e7\u05d1\u05dc\u05d4 \u05d6\u05de\u05d9\u05e0\u05d4",
"No results": "\u05d0\u05d9\u05df \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea ",
"No results found for \"%(query_string)s\". Please try searching again.": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 \"%(query_string)s\". \u05d0\u05e0\u05d0 \u05e0\u05e1\u05d4 \u05dc\u05d7\u05e4\u05e9 \u05e9\u05d5\u05d1.",
+ "No results found for {original_query}. Showing results for {suggested_query}.": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 {original_query}. \u05de\u05e8\u05d0\u05d4 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 {suggested_query}.",
"No sources": "\u05d0\u05d9\u05df \u05de\u05e7\u05d5\u05e8\u05d5\u05ea",
"No tasks currently running.": "\u05d0\u05d9\u05df \u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05d1\u05d4\u05e8\u05e6\u05d4 \u05db\u05e8\u05d2\u05e2.",
"No validation is performed on policy keys or value pairs. If you are having difficulties, check your formatting.": "\u05dc\u05d0 \u05d1\u05d5\u05e6\u05e2 \u05d0\u05d9\u05de\u05d5\u05ea \u05d1\u05e0\u05d5\u05d2\u05e2 \u05dc\u05e7\u05d5\u05d5\u05d9 \u05de\u05d3\u05d9\u05e0\u05d9\u05d5\u05ea \u05d0\u05d5 \u05e6\u05de\u05d3\u05d9 \u05e2\u05e8\u05db\u05d9\u05dd. \u05d1\u05de\u05d9\u05d3\u05d4 \u05d5\u05d0\u05ea\u05d4 \u05e0\u05ea\u05e7\u05dc \u05d1\u05e7\u05e9\u05d9\u05d9\u05dd, \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05e2\u05d9\u05e6\u05d5\u05d1\u05da.",
@@ -940,6 +960,7 @@
"Order Details": "\u05e4\u05e8\u05d8\u05d9 \u05d4\u05d6\u05de\u05e0\u05d4",
"Order History": "\u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d9\u05ea \u05d4\u05d6\u05de\u05e0\u05d5\u05ea",
"Order No.": "\u05de\u05e1\u05e4\u05e8 \u05d4\u05d6\u05de\u05e0\u05d4",
+ "Order Number": "\u05de\u05e1\u05e4\u05e8 \u05d4\u05d6\u05de\u05e0\u05d4",
"Organization": "\u05d0\u05e8\u05d2\u05d5\u05df",
"Organization ": "\u05d0\u05e8\u05d2\u05d5\u05df ",
"Organization Name": "\u05e9\u05dd \u05d4\u05d0\u05e8\u05d2\u05d5\u05df",
@@ -1041,9 +1062,6 @@
"Professional Certificate for {courseName}": "\u05ea\u05e2\u05d5\u05d3\u05d4 \u05de\u05e7\u05e6\u05d5\u05e2\u05d9\u05ea \u05e2\u05d1\u05d5\u05e8 {courseName}",
"Professional Education": "\u05d4\u05e9\u05db\u05dc\u05d4 \u05de\u05e7\u05e6\u05d5\u05e2\u05d9\u05ea",
"Professional Education Verified Certificate": "\u05ea\u05e2\u05d5\u05d3\u05d4 \u05de\u05d0\u05d5\u05de\u05ea\u05ea \u05de\u05e7\u05e6\u05d5\u05e2\u05d9\u05ea",
- "Profile": "\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc",
- "Profile Image": "\u05ea\u05de\u05d5\u05e0\u05ea \u05e4\u05e8\u05d5\u05e4\u05d9\u05dc",
- "Profile image for {username}": "\u05ea\u05de\u05d5\u05e0\u05ea \u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05e2\u05d1\u05d5\u05e8 {username} ",
"Promote another member to Admin to remove your admin rights": "\u05e7\u05d3\u05dd \u05d7\u05d1\u05e8 \u05d0\u05d7\u05e8 \u05dc\u05de\u05e0\u05d4\u05dc \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d4\u05e1\u05d9\u05e8 \u05d0\u05ea \u05d6\u05db\u05d5\u05d9\u05d5\u05ea\u05d9\u05da \u05d4\u05e0\u05d9\u05d4\u05d5\u05dc\u05d9\u05d5\u05ea",
"Provisional": "\u05d6\u05de\u05e0\u05d9",
"Provisionally Supported": "\u05e0\u05ea\u05de\u05da \u05d1\u05d0\u05d5\u05e4\u05df \u05d6\u05de\u05e0\u05d9",
@@ -1056,6 +1074,7 @@
"Publishing": "\u05de\u05e4\u05e8\u05e1\u05dd",
"Publishing Status": "\u05de\u05e6\u05d1 \u05e4\u05e8\u05e1\u05d5\u05dd",
"Question": "\u05e9\u05d0\u05dc\u05d4",
+ "Questions raise issues that need answers. Discussions share ideas and start conversations. (Required)": "\u05d1\u05e2\u05d6\u05e8\u05ea \u05dc\u05d7\u05e6\u05df '\u05e9\u05d0\u05dc\u05d5\u05ea' \u05ea\u05d5\u05db\u05dc \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05e1\u05d5\u05d2\u05d9\u05d4 \u05de\u05e1\u05d5\u05d9\u05de\u05ea \u05d4\u05de\u05e6\u05e8\u05d9\u05db\u05d4 \u05ea\u05e9\u05d5\u05d1\u05d4. \u05d1\u05e2\u05d6\u05e8\u05ea \u05dc\u05d7\u05e6\u05df '\u05d3\u05d9\u05d5\u05e0\u05d9\u05dd' \u05ea\u05d5\u05db\u05dc \u05dc\u05d7\u05dc\u05d5\u05e7 \u05e8\u05e2\u05d9\u05d5\u05e0\u05d5\u05ea \u05d5\u05dc\u05d4\u05ea\u05d7\u05d9\u05dc \u05d1\u05e9\u05d9\u05d7\u05d5\u05ea \u05e2\u05dc \u05e0\u05d5\u05e9\u05d0\u05d9 \u05d4\u05e7\u05d5\u05e8\u05e1 \u05d4\u05e9\u05d5\u05e0\u05d9\u05dd. (\u05d7\u05d5\u05d1\u05d4)",
"Queued": "\u05de\u05de\u05ea\u05d9\u05df \u05d1\u05ea\u05d5\u05e8",
"Read More": "\u05e7\u05e8\u05d0 \u05e2\u05d5\u05d3",
"Reason": "\u05e1\u05d9\u05d1\u05d4",
@@ -1090,6 +1109,7 @@
"Remove {role} Access": "\u05d4\u05e1\u05e8 \u05d2\u05d9\u05e9\u05ea {role}",
"Remove {video_name} video": "\u05d4\u05e1\u05e8 \u05d0\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d9\u05d3\u05d0\u05d5 {video_name} ",
"Removing": "\u05de\u05e1\u05d9\u05e8",
+ "Removing a video from this list does not affect course content. Any content that uses a previously uploaded video ID continues to display in the course.": "\u05d4\u05e1\u05e8\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d5\u05d9\u05d3\u05d0\u05d5 \u05de\u05e8\u05e9\u05d9\u05de\u05d4 \u05d6\u05d5 \u05d0\u05d9\u05e0\u05d4 \u05de\u05e9\u05e4\u05d9\u05e2\u05d4 \u05e2\u05dc \u05ea\u05d5\u05db\u05df \u05d4\u05e7\u05d5\u05e8\u05e1. \u05db\u05dc \u05ea\u05d5\u05db\u05df \u05d4\u05de\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05e1\u05e4\u05e8 \u05de\u05d6\u05d4\u05d4 \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05e9\u05d4\u05d5\u05e2\u05dc\u05d4 \u05d1\u05e2\u05d1\u05e8 \u05de\u05de\u05e9\u05d9\u05da \u05dc\u05d4\u05e6\u05d9\u05d2 \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"Replace": "\u05d4\u05d7\u05dc\u05e3",
"Replace all": "\u05d4\u05d7\u05dc\u05e3 \u05d4\u05db\u05dc",
"Replace with": "\u05d4\u05d7\u05dc\u05e3 \u05d1",
@@ -1107,6 +1127,7 @@
"Reset Your Password": "\u05d0\u05e4\u05e1 \u05d0\u05ea \u05e1\u05d9\u05e1\u05de\u05ea\u05da",
"Reset attempts for all students on problem '<%- problem_id %>'?": "\u05d0\u05e4\u05e1 \u05e0\u05d9\u05e1\u05d9\u05d5\u05e0\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 \u05db\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd \u05d1\u05d1\u05e2\u05d9\u05d4 '<%- problem_id %>'? ",
"Reset my password": "\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05e9\u05dc\u05d9",
+ "Responses could not be loaded. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05ea\u05d2\u05d5\u05d1\u05d5\u05ea. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"Restore enrollment code": "\u05e9\u05d7\u05d6\u05e8 \u05e7\u05d5\u05d3 \u05d4\u05e8\u05e9\u05de\u05d4",
"Restore last draft": "\u05e9\u05d7\u05d6\u05e8 \u05d8\u05d9\u05d5\u05d8\u05d4 \u05d0\u05d7\u05e8\u05d5\u05e0\u05d4",
"Retake Photo": "\u05e6\u05dc\u05dd \u05e9\u05d5\u05d1 \u05ea\u05de\u05d5\u05e0\u05d4",
@@ -1142,6 +1163,7 @@
"Search teams": "\u05d7\u05d9\u05e4\u05d5\u05e9 \u05e6\u05d5\u05d5\u05ea\u05d9\u05dd",
"Section": "\u05e4\u05e8\u05e7",
"Section Visibility": "\u05ea\u05e6\u05d5\u05d2\u05ea \u05e4\u05e8\u05e7",
+ "Sections": "\u05e4\u05e8\u05e7\u05d9\u05dd",
"See all teams in your course, organized by topic. Join a team to collaborate with other learners who are interested in the same topic as you are.": "\u05e8\u05d0\u05d4 \u05e9\u05db\u05dc \u05d4\u05e6\u05d5\u05d5\u05ea\u05d9\u05dd \u05e9\u05d1\u05e7\u05d5\u05e8\u05e1 \u05e9\u05dc\u05da \u05de\u05d0\u05d5\u05e8\u05d2\u05e0\u05d9\u05dd \u05dc\u05e4\u05d9 \u05e0\u05d5\u05e9\u05d0. \u05d4\u05e6\u05d8\u05e8\u05e3 \u05dc\u05e6\u05d5\u05d5\u05ea \u05db\u05d3\u05d9 \u05dc\u05e9\u05ea\u05e3 \u05e4\u05e2\u05d5\u05dc\u05d4 \u05e2\u05dd \u05ea\u05dc\u05de\u05d9\u05d3\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9\u05dd \u05d4\u05de\u05e2\u05d5\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd \u05d1\u05d0\u05d5\u05ea\u05d5 \u05e0\u05d5\u05e9\u05d0 \u05d1\u05d5 \u05d0\u05ea\u05d4 \u05de\u05ea\u05e2\u05e0\u05d9\u05d9\u05df.",
"Select a Content Group": "\u05d1\u05d7\u05e8 \u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df",
"Select a chapter": "\u05d1\u05d7\u05e8 \u05e4\u05e8\u05e7",
@@ -1196,6 +1218,7 @@
"Showing {currentItemRange} out of {totalItemsCount}, sorted by {sortName} descending": "\u05de\u05e6\u05d9\u05d2 {currentItemRange} \u05de\u05ea\u05d5\u05da {totalItemsCount}, \u05de\u05de\u05d5\u05d9\u05df \u05d1\u05e1\u05d3\u05e8 \u05d9\u05d5\u05e8\u05d3 \u05e9\u05dc {sortName} ",
"Showing {firstIndex} out of {numItems} total": "\u05de\u05e6\u05d9\u05d2 {firstIndex} \u05de\u05ea\u05d5\u05da {numItems} \u05e1\u05da \u05d4\u05db\u05dc",
"Showing {firstIndex}-{lastIndex} out of {numItems} total": "\u05de\u05e6\u05d9\u05d2 {firstIndex}-{lastIndex} \u05de\u05ea\u05d5\u05da {numItems} \u05e1\u05da \u05d4\u05db\u05dc",
+ "Sign In": "\u05d4\u05ea\u05d7\u05d1\u05e8",
"Sign in": "\u05db\u05e0\u05d9\u05e1\u05d4",
"Sign in here using your email address and password, or use one of the providers listed below.": "\u05d4\u05d9\u05db\u05e0\u05e1 \u05db\u05d0\u05df \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d5\u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05e9\u05dc\u05da \u05d0\u05d5 \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05d0\u05d7\u05d3 \u05de\u05d4\u05e1\u05e4\u05e7\u05d9\u05dd \u05d4\u05e8\u05e9\u05d5\u05de\u05d9\u05dd \u05d1\u05d4\u05de\u05e9\u05da.",
"Sign in here using your email address and password.": "\u05d4\u05d9\u05db\u05e0\u05e1 \u05db\u05d0\u05df \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d5\u05d4\u05e1\u05d9\u05e1\u05de\u05d4.",
@@ -1241,6 +1264,9 @@
"Student": "\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8",
"Student Removed from certificate white list successfully.": "\u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d4\u05d5\u05e1\u05e8 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05de\u05d4\u05e8\u05e9\u05d9\u05de\u05d4 \u05d4\u05dc\u05d1\u05e0\u05d4 \u05e9\u05dc \u05d4\u05ea\u05e2\u05d5\u05d3\u05d5\u05ea.",
"Student email or username": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d0\u05d5 \u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9 \u05e9\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8",
+ "Student username/email field is required and can not be empty. Kindly fill in username/email and then press \"Add to Exception List\" button.": "\u05e9\u05d3\u05d4 \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9/\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d4\u05d5\u05d0 \u05e9\u05d3\u05d4 \u05d7\u05d5\u05d1\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05d0\u05d9\u05e8\u05d5 \u05e8\u05d9\u05e7. \u05d0\u05e0\u05d0 \u05de\u05dc\u05d0 \u05d0\u05ea \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9/\u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d5\u05dc\u05d0\u05d7\u05e8 \u05de\u05db\u05df \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05d7\u05e6\u05df \"\u05d4\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d7\u05e8\u05d9\u05d2\u05d9\u05dd\".",
+ "Student username/email field is required and can not be empty. Kindly fill in username/email and then press \"Invalidate Certificate\" button.": "\u05e9\u05d3\u05d4 \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9/\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d4\u05d5\u05d0 \u05e9\u05d3\u05d4 \u05d7\u05d5\u05d1\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05d0\u05d9\u05e8\u05d5 \u05e8\u05d9\u05e7. \u05d0\u05e0\u05d0 \u05de\u05dc\u05d0 \u05d0\u05ea \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9/\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d5\u05dc\u05d0\u05d7\u05e8 \u05de\u05db\u05df \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05d7\u05e6\u05df \"\u05e4\u05e1\u05d9\u05dc\u05ea \u05ea\u05e2\u05d5\u05d3\u05d4\".",
+ "Studio's having trouble saving your work": "\u05e1\u05d8\u05d5\u05d3\u05d9\u05d5 \u05de\u05ea\u05e7\u05e9\u05d4 \u05dc\u05e9\u05de\u05d5\u05e8 \u05d0\u05ea \u05e2\u05d1\u05d5\u05d3\u05ea\u05da",
"Studio:": "\u05e1\u05d8\u05d5\u05d3\u05d9\u05d5:",
"Style": "\u05e1\u05d2\u05e0\u05d5\u05df",
"Subject": "\u05e0\u05d5\u05e9\u05d0",
@@ -1298,8 +1324,8 @@
"Team name cannot have more than 255 characters.": "\u05e9\u05dd \u05d4\u05e6\u05d5\u05d5\u05ea \u05d0\u05d9\u05e0\u05d5 \u05d9\u05db\u05d5\u05dc \u05dc\u05d7\u05e8\u05d5\u05d2 \u05de-255 \u05ea\u05d5\u05d5\u05d9\u05dd.",
"Teams": "\u05e6\u05d5\u05d5\u05ea\u05d9\u05dd",
"Teams Pagination": "\u05e2\u05d9\u05de\u05d5\u05d3 \u05e6\u05d5\u05d5\u05ea\u05d9\u05dd",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\u05e1\u05e4\u05e8 \u05de\u05e2\u05d8 \u05e2\u05dc \u05e2\u05e6\u05de\u05da \u05dc\u05ea\u05dc\u05de\u05d9\u05d3\u05d9\u05dd \u05d4\u05d0\u05d7\u05e8\u05d9\u05dd: \u05d4\u05d9\u05db\u05df \u05d0\u05ea\u05d4 \u05d2\u05e8, \u05de\u05d4\u05dd \u05ea\u05d7\u05d5\u05de\u05d9 \u05d4\u05e2\u05e0\u05d9\u05d9\u05df \u05e9\u05dc\u05da, \u05de\u05d3\u05d5\u05e2 \u05e0\u05e8\u05e9\u05de\u05ea \u05dc\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05d0\u05d5 \u05de\u05d4 \u05d0\u05ea\u05d4 \u05de\u05e7\u05d5\u05d5\u05d4 \u05dc\u05dc\u05de\u05d5\u05d3.",
"Templates": "\u05ea\u05d1\u05e0\u05d9\u05d5\u05ea",
+ "Terms of Service and Honor Code": "\u05ea\u05e0\u05d0\u05d9 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d5\u05e7\u05d5\u05d3 \u05d0\u05ea\u05d9",
"Text": "\u05d8\u05e7\u05e1\u05d8",
"Text color": "\u05e6\u05d1\u05e2 \u05d8\u05e7\u05e1\u05d8",
"Text to display": "\u05d8\u05e7\u05e1\u05d8 \u05dc\u05d4\u05e6\u05d2\u05d4",
@@ -1350,6 +1376,7 @@
"The organization that this signatory belongs to, as it should appear on certificates.": "\u05d7\u05ea\u05d9\u05de\u05ea \u05d4\u05d0\u05e8\u05d2\u05d5\u05df, \u05db\u05e4\u05d9 \u05e9\u05d4\u05d9\u05d0 \u05d0\u05de\u05d5\u05e8\u05d4 \u05dc\u05d4\u05d5\u05e4\u05d9\u05e2 \u05d1\u05ea\u05e2\u05d5\u05d3\u05d4.",
"The page \"{route}\" could not be found.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \"{route}\".",
"The photo of your face matches the photo on your ID.": "\u05d4\u05ea\u05de\u05d5\u05e0\u05d4 \u05e9\u05dc \u05e4\u05e0\u05d9\u05da \u05ea\u05d5\u05d0\u05de\u05ea \u05dc\u05ea\u05de\u05d5\u05e0\u05d4 \u05e9\u05d1\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d4\u05de\u05d6\u05d4\u05d4 \u05e9\u05dc\u05da.",
+ "The post you selected has been deleted.": "\u05d4\u05e4\u05d5\u05e1\u05d8 \u05e9\u05d1\u05d7\u05e8\u05ea \u05e0\u05de\u05d7\u05e7.",
"The published branch version, {published}, was reset to the draft branch version, {draft}.": "\u05d2\u05e8\u05e1\u05ea \u05d4\u05de\u05d3\u05d5\u05e8 \u05e9\u05e4\u05d5\u05e8\u05e1\u05dd, {published}, \u05d0\u05d5\u05e4\u05e1\u05d4 \u05dc\u05d2\u05e8\u05e1\u05ea \u05de\u05d3\u05d5\u05e8 \u05d4\u05d8\u05d9\u05d5\u05d8\u05d4, {draft}.",
"The raw error message is:": "\u05d4\u05d5\u05d3\u05e2\u05ea \u05d4\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d4\u05d9\u05d0:",
"The selected content group does not exist": "\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05e9\u05e0\u05d1\u05d7\u05e8\u05d4 \u05d0\u05d9\u05e0\u05d4 \u05e7\u05d9\u05d9\u05de\u05ea",
@@ -1360,6 +1387,7 @@
"The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.": "\u05de\u05e9\u05e7\u05dc \u05db\u05dc \u05d4\u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05e9\u05dc \u05e1\u05d5\u05d2 \u05d6\u05d4 \u05d4\u05d5\u05d0 \u05db\u05d0\u05d7\u05d5\u05d6 \u05de\u05e1\u05da \u05d4\u05e6\u05d9\u05d5\u05df, \u05dc\u05d3\u05d5\u05d2\u05de\u05d4, 40. \u05d0\u05dc \u05ea\u05db\u05dc\u05d5\u05dc \u05d0\u05ea \u05e1\u05de\u05dc \u05d4\u05d0\u05d7\u05d5\u05d6.",
"The {cohortGroupName} cohort has been created. You can manually add students to this cohort below.": "\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3 {cohortGroupName} \u05e0\u05d5\u05e6\u05e8\u05d4. \u05d0\u05ea\u05d4 \u05d9\u05db\u05d5\u05dc \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd \u05d1\u05e6\u05d5\u05e8\u05d4 \u05d9\u05d3\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3 \u05d6\u05d5. ",
"There are invalid keywords in your email. Check the following keywords and try again.": "\u05d9\u05e9\u05e0\u05df \u05de\u05d9\u05dc\u05d5\u05ea \u05de\u05e4\u05ea\u05d7 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9\u05d5\u05ea \u05d1\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc\u05da. \u05d0\u05e0\u05d0 \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05de\u05d9\u05dc\u05d5\u05ea \u05d4\u05de\u05e4\u05ea\u05d7 \u05d4\u05d1\u05d0\u05d5\u05ea \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
+ "There has been a failure to export to XML at least one component. It is recommended that you go to the edit page and repair the error before attempting another export. Please check that all components on the page are valid and do not display any error messages.": "\u05d9\u05e6\u05d5\u05d0 \u05e9\u05dc \u05e8\u05db\u05d9\u05d1 \u05d0\u05d7\u05d3 \u05dc\u05e4\u05d7\u05d5\u05ea \u05dc-XML, \u05e0\u05db\u05e9\u05dc. \u05de\u05d5\u05de\u05dc\u05e5 \u05dc\u05d2\u05e9\u05ea \u05dc\u05e2\u05de\u05d5\u05d3 \u05d4\u05e2\u05e8\u05d9\u05db\u05d4 \u05d5\u05dc\u05ea\u05e7\u05df \u05d0\u05ea \u05d4\u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05e4\u05e0\u05d9 \u05d1\u05d9\u05e6\u05d5\u05e2 \u05d9\u05e6\u05d5\u05d0 \u05e0\u05d5\u05e1\u05e3. \u05d0\u05e0\u05d0 \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d7\u05d5\u05e7\u05d9\u05d5\u05ea \u05db\u05dc \u05d4\u05e8\u05db\u05d9\u05d1\u05d9\u05dd \u05d1\u05e2\u05de\u05d5\u05d3 \u05d5\u05db\u05d9 \u05d4\u05dd \u05d0\u05d9\u05e0\u05dd \u05de\u05e6\u05d9\u05d2\u05d9\u05dd \u05d4\u05d5\u05d3\u05e2\u05d5\u05ea \u05e9\u05d2\u05d9\u05d0\u05d4. ",
"There has been an error processing your survey.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e2\u05d9\u05d1\u05d5\u05d3 \u05d4\u05e1\u05e7\u05e8 \u05e9\u05dc\u05da.",
"There has been an error while exporting.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05d4\u05d9\u05d9\u05e6\u05d5\u05d0.",
"There has been an error with your export.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d9\u05d9\u05e6\u05d5\u05d0 \u05e9\u05dc\u05da. ",
@@ -1369,9 +1397,15 @@
"There must be one cohort to which students can automatically be assigned.": "\u05d7\u05d9\u05d9\u05d1\u05ea \u05dc\u05d4\u05d9\u05d5\u05ea \u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3 \u05d0\u05d7\u05ea \u05e9\u05d0\u05dc\u05d9\u05d4 \u05e0\u05d9\u05ea\u05df \u05dc\u05e9\u05d9\u05d9\u05da \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9.",
"There was a problem creating the report. Select \"Create Executive Summary\" to try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05d1\u05e2\u05d9\u05d4 \u05d1\u05e2\u05ea \u05d9\u05e6\u05d9\u05e8\u05ea \u05d4\u05d3\u05d5\u05d7. \u05d1\u05d7\u05e8 \"\u05e6\u05d5\u05e8 \u05ea\u05e7\u05e6\u05d9\u05e8 \u05de\u05e0\u05d4\u05dc\u05d9\u05dd\" \u05db\u05d3\u05d9 \u05dc\u05e0\u05e1\u05d5\u05ea \u05e9\u05d5\u05d1.",
"There was an error changing the user's role": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e9\u05d9\u05e0\u05d5\u05d9 \u05ea\u05e4\u05e7\u05d9\u05d3 \u05d4\u05de\u05e9\u05ea\u05de\u05e9.",
+ "There was an error during the upload process.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05ea\u05d4\u05dc\u05d9\u05da \u05d4\u05e2\u05dc\u05d0\u05ea \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd.",
"There was an error obtaining email content history for this course.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e7\u05d1\u05dc\u05ea \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05e9\u05dc \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"There was an error obtaining email task history for this course.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e7\u05d1\u05dc\u05ea \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05ea \u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"There was an error retrieving preview results for this catalog. Please check that your query is correct and try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e2\u05ea \u05d0\u05b4\u05d7\u05d6\u05d5\u05e8 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d4\u05ea\u05e6\u05d5\u05d2\u05d4 \u05d4\u05de\u05d5\u05e7\u05d3\u05de\u05ea \u05e2\u05d1\u05d5\u05e8 \u05e7\u05d8\u05dc\u05d5\u05d2 \u05d6\u05d4. \u05e0\u05d0 \u05d1\u05d3\u05d5\u05e7 \u05e9\u05d4\u05e9\u05d0\u05d9\u05dc\u05ea\u05d0 \u05e0\u05db\u05d5\u05e0\u05d4 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
+ "There was an error while importing the new course to our database.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05d9\u05d1\u05d5\u05d0 \u05d4\u05e7\u05d5\u05e8\u05e1 \u05d4\u05d7\u05d3\u05e9 \u05dc\u05d1\u05e1\u05d9\u05e1 \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc\u05e0\u05d5.",
+ "There was an error while importing the new library to our database.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05d9\u05d1\u05d5\u05d0 \u05d4\u05e1\u05e4\u05e8\u05d9\u05d9\u05d4 \u05d4\u05d7\u05d3\u05e9\u05d4 \u05dc\u05d1\u05e1\u05d9\u05e1 \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc\u05e0\u05d5.",
+ "There was an error while unpacking the file.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d7\u05d9\u05dc\u05d5\u05e5 \u05d4\u05e7\u05d5\u05d1\u05e5.",
+ "There was an error while verifying the file you submitted.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5 \u05e9\u05d4\u05d2\u05e9\u05ea.",
+ "There was an error with the upload": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d4\u05e2\u05dc\u05d0\u05d4",
"There was an error, try searching again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4, \u05e0\u05e1\u05d4 \u05dc\u05d7\u05e4\u05e9 \u05e9\u05d5\u05d1.",
"There were errors reindexing course.": "\u05e7\u05e8\u05d5 \u05e9\u05d2\u05d9\u05d0\u05d5\u05ea \u05d1\u05de\u05d9\u05d5\u05df \u05de\u05d7\u05d3\u05e9 \u05e9\u05dc \u05d4\u05e7\u05d5\u05e8\u05e1.",
"There's already another assignment type with this name.": "\u05d9\u05e9 \u05db\u05d1\u05e8 \u05e1\u05d5\u05d2 \u05de\u05e9\u05d9\u05de\u05d4 \u05d0\u05d7\u05e8 \u05d1\u05e2\u05dc \u05e9\u05dd \u05d6\u05d4.",
@@ -1393,12 +1427,14 @@
"This browser cannot play .mp4, .ogg, or .webm files.": "\u05d3\u05e4\u05d3\u05e4\u05df \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05d9\u05db\u05d5\u05dc \u05dc\u05e0\u05d2\u05df \u05e7\u05d1\u05e6\u05d9 ogg .webm ,.mp4.",
"This catalog's courses:": "\u05d4\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05d1\u05e7\u05d8\u05dc\u05d5\u05d2 \u05d6\u05d4:",
"This certificate has already been activated and is live. Are you sure you want to continue editing?": "\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d6\u05d5 \u05d4\u05d5\u05e4\u05e2\u05dc\u05d4 \u05db\u05d1\u05e8 \u05d5\u05d4\u05d9\u05d0 \u05d1\u05de\u05e6\u05d1 \u05e4\u05e2\u05d9\u05dc. \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05de\u05e9\u05d9\u05da \u05d1\u05e2\u05e8\u05d9\u05db\u05d4?",
+ "This comment could not be deleted. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \u05d4\u05d4\u05e2\u05e8\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"This component has validation issues.": "\u05dc\u05e8\u05db\u05d9\u05d1 \u05d6\u05d4 \u05d1\u05e2\u05d9\u05d5\u05ea \u05d0\u05d9\u05de\u05d5\u05ea.",
"This configuration is currently used in content experiments. If you make changes to the groups, you may need to edit those experiments.": "\u05d4\u05d2\u05d3\u05e8\u05d4 \u05d6\u05d5 \u05e0\u05de\u05e6\u05d0\u05ea \u05db\u05e2\u05ea \u05d1\u05e9\u05d9\u05de\u05d5\u05e9 \u05e0\u05d9\u05e1\u05d5\u05d9 \u05ea\u05d5\u05db\u05df. \u05d0\u05dd \u05ea\u05e9\u05e0\u05d4 \u05d0\u05ea \u05d4\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea, \u05d9\u05ea\u05db\u05df \u05e9\u05ea\u05e6\u05d8\u05e8\u05da \u05dc\u05d1\u05e6\u05e2 \u05e2\u05e8\u05d9\u05db\u05d4 \u05d1\u05e0\u05d9\u05e1\u05d5\u05d9\u05d9\u05dd \u05d0\u05dc\u05d5.",
"This content group is used in one or more units.": "\u05e0\u05e2\u05e9\u05d4 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df \u05d6\u05d5 \u05d1\u05d9\u05d7\u05d9\u05d3\u05d4 \u05d0\u05d7\u05ea \u05d0\u05d5 \u05d9\u05d5\u05ea\u05e8. ",
"This course has automatic cohorting enabled for verified track learners, but cohorts are disabled. You must enable cohorts for the feature to work.": "\u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4 \u05d9\u05e9 \u05de\u05d7\u05d6\u05d5\u05e8 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9 \u05e9\u05de\u05d5\u05e4\u05e2\u05dc \u05e2\u05d1\u05d5\u05e8 \u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d1\u05de\u05e1\u05dc\u05d5\u05dc \u05de\u05d0\u05d5\u05de\u05ea, \u05d0\u05da \u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05d4\u05dc\u05de\u05d9\u05d3\u05d4 \u05de\u05d5\u05e9\u05d1\u05ea\u05d9\u05dd. \u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05e4\u05e2\u05d9\u05dc \u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05dc\u05de\u05d9\u05d3\u05d4 \u05db\u05d3\u05d9 \u05e9\u05d4\u05ea\u05db\u05d5\u05e0\u05d4 \u05ea\u05e2\u05d1\u05d5\u05d3.",
"This course has automatic cohorting enabled for verified track learners, but the required cohort does not exist. You must create a manually-assigned cohort named '{verifiedCohortName}' for the feature to work.": "\u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4 \u05d9\u05e9 \u05de\u05d7\u05d6\u05d5\u05e8 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9 \u05e9\u05de\u05d5\u05e4\u05e2\u05dc \u05e2\u05d1\u05d5\u05e8 \u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d1\u05de\u05e1\u05dc\u05d5\u05dc \u05de\u05d0\u05d5\u05de\u05ea, \u05d0\u05da \u05de\u05d7\u05d6\u05d5\u05e8 \u05d4\u05dc\u05de\u05d9\u05d3\u05d4 \u05d4\u05d3\u05e8\u05d5\u05e9 \u05d0\u05d9\u05e0\u05d5 \u05e7\u05d9\u05d9\u05dd. \u05e2\u05dc\u05d9\u05da \u05dc\u05d9\u05e6\u05d5\u05e8 \u05de\u05d7\u05d6\u05d5\u05e8 \u05dc\u05de\u05d9\u05d3\u05d4 \u05e9\u05de\u05d5\u05e7\u05e6\u05d4 \u05d1\u05d0\u05d5\u05e4\u05df \u05d9\u05d3\u05e0\u05d9 \u05d4\u05de\u05db\u05d5\u05e0\u05d4 '{verifiedCohortName}' \u05db\u05d3\u05d9 \u05e9\u05d4\u05ea\u05db\u05d5\u05e0\u05d4 \u05ea\u05e2\u05d1\u05d5\u05d3.",
"This course uses automatic cohorting for verified track learners. You cannot disable cohorts, and you cannot rename the manual cohort named '{verifiedCohortName}'. To change the configuration for verified track cohorts, contact your edX partner manager.": "\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4 \u05de\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05d9\u05dd \u05e2\u05d1\u05d5\u05e8 \u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d1\u05de\u05e1\u05dc\u05d5\u05dc \u05de\u05d0\u05d5\u05de\u05ea. \u05d0\u05d9\u05e0\u05da \u05d9\u05db\u05d5\u05dc \u05dc\u05d4\u05e9\u05d1\u05d9\u05ea \u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d5\u05d0\u05d9\u05e0\u05da \u05d9\u05db\u05d5\u05dc \u05dc\u05e9\u05e0\u05d5\u05ea \u05d0\u05ea \u05d4\u05e9\u05dd \u05e9\u05dc \u05de\u05d7\u05d6\u05d5\u05e8 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d9\u05d3\u05e0\u05d9 \u05d4\u05de\u05db\u05d5\u05e0\u05d4 '{verifiedCohortName}'. \u05db\u05d3\u05d9 \u05dc\u05e9\u05e0\u05d5\u05ea \u05d0\u05ea \u05d4\u05d4\u05d2\u05d3\u05e8\u05d4 \u05dc\u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05dc\u05de\u05d9\u05d3\u05d4 \u05e2\u05dd \u05de\u05e2\u05e7\u05d1 \u05de\u05d0\u05d5\u05de\u05ea, \u05e6\u05d5\u05e8 \u05e7\u05e9\u05e8 \u05e2\u05dd \u05d4\u05de\u05e0\u05d4\u05dc \u05d4\u05e9\u05d5\u05ea\u05e3 \u05e9\u05dc\u05da \u05d1-edX.",
+ "This discussion could not be loaded. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05d0\u05ea \u05d4\u05d3\u05d9\u05d5\u05df. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"This image is for decorative purposes only and does not require a description.": "\u05ea\u05de\u05d5\u05e0\u05d4 \u05d6\u05d5 \u05e0\u05d5\u05e2\u05d3\u05d4 \u05dc\u05de\u05d8\u05e8\u05d5\u05ea \u05d3\u05e7\u05d5\u05e8\u05d8\u05d9\u05d1\u05d9\u05d5\u05ea \u05d1\u05dc\u05d1\u05d3 \u05d5\u05d0\u05d9\u05df \u05e6\u05d5\u05e8\u05da \u05d1\u05ea\u05d9\u05d0\u05d5\u05e8\u05d4.",
"This is the Description of the Group Configuration": "\u05d6\u05d4\u05d5 \u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05e7\u05d1\u05d5\u05e6\u05d4",
"This is the Name of the Group Configuration": "\u05d6\u05d4\u05d5 \u05e9\u05dd \u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05e7\u05d1\u05d5\u05e6\u05d4",
@@ -1407,14 +1443,26 @@
"This learner will be removed from the team, allowing another learner to take the available spot.": "\u05ea\u05dc\u05de\u05d9\u05d3 \u05d6\u05d4 \u05d9\u05d5\u05e1\u05e8 \u05de\u05d4\u05e6\u05d5\u05d5\u05ea, \u05db\u05da \u05e9\u05d9\u05ea\u05d0\u05e4\u05e9\u05e8 \u05dc\u05ea\u05dc\u05de\u05d9\u05d3 \u05d0\u05d7\u05e8 \u05dc\u05d4\u05e6\u05d8\u05e8\u05e3 \u05dc\u05de\u05e7\u05d5\u05dd \u05e9\u05d4\u05ea\u05e4\u05e0\u05d4.",
"This link will open in a modal window": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05d6\u05d4 \u05d9\u05e4\u05ea\u05d7 \u05d1\u05d7\u05dc\u05d5\u05e0\u05d9\u05ea \u05e9\u05d9\u05d7\u05d4",
"This link will open in a new browser window/tab": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05d6\u05d4 \u05d9\u05d9\u05e4\u05ea\u05d7 \u05d1\u05d7\u05dc\u05d5\u05df/\u05dc\u05e9\u05d5\u05e0\u05d9\u05ea \u05d3\u05e4\u05d3\u05e4\u05df \u05d7\u05d3\u05e9/\u05d4",
+ "This may be happening because of an error with our server or your internet connection. Try refreshing the page or making sure you are online.": "\u05d9\u05d9\u05ea\u05db\u05df \u05d5\u05d3\u05d1\u05e8 \u05d6\u05d4 \u05de\u05ea\u05e8\u05d7\u05e9 \u05d1\u05e9\u05dc \u05d8\u05e2\u05d5\u05ea \u05d1\u05e9\u05e8\u05ea \u05e9\u05dc\u05e0\u05d5 \u05d0\u05d5 \u05d1\u05d7\u05d9\u05d1\u05d5\u05e8 \u05d4\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8. \u05e0\u05e1\u05d4 \u05dc\u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d0\u05d5 \u05d5\u05d3\u05d0 \u05e9\u05d0\u05ea\u05d4 \u05de\u05e7\u05d5\u05d5\u05df.",
"This page contains information about orders that you have placed with {platform_name}.": "\u05e2\u05de\u05d5\u05d3 \u05d6\u05d4 \u05de\u05db\u05d9\u05dc \u05de\u05d9\u05d3\u05e2 \u05e2\u05dc \u05d4\u05d6\u05de\u05e0\u05d5\u05ea \u05e9\u05d1\u05d9\u05e6\u05e2\u05ea \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea {platform_name}.",
+ "This post could not be closed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e1\u05d2\u05d5\u05e8 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be flagged for abuse. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d3\u05d5\u05d5\u05d7 \u05e2\u05dc \u05d4\u05e4\u05d5\u05e1\u05d8 \u05db\u05d1\u05dc\u05ea\u05d9 \u05d4\u05d5\u05dc\u05dd. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be pinned. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e6\u05de\u05d9\u05d3 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be reopened. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e4\u05ea\u05d5\u05d7 \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be unflagged for abuse. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05d3\u05d9\u05d5\u05d5\u05d7 \u05e2\u05dc \u05d4\u05e4\u05d5\u05e1\u05d8 \u05db\u05d1\u05dc\u05ea\u05d9 \u05d4\u05d5\u05dc\u05dd. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be unpinned. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05e6\u05de\u05d3\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"This post is visible only to %(group_name)s.": "\u05e4\u05d5\u05e1\u05d8 \u05d6\u05d4 \u05d2\u05dc\u05d5\u05d9 \u05e8\u05e7 \u05dc-%(group_name)s.",
"This post is visible to everyone.": "\u05e4\u05d5\u05e1\u05d8 \u05d6\u05d4 \u05d2\u05dc\u05d5\u05d9 \u05dc\u05db\u05d5\u05dc\u05dd.",
"This problem has been reset.": "\u05d4\u05d1\u05e2\u05d9\u05d4 \u05dc\u05d0 \u05d0\u05d5\u05ea\u05d7\u05dc\u05d4.",
+ "This response could not be marked as an answer. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e1\u05de\u05df \u05d0\u05ea \u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05d4\u05d6\u05d5 \u05d1\u05ea\u05d5\u05e8 \u05ea\u05e9\u05d5\u05d1\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This response could not be marked as endorsed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e1\u05de\u05df \u05d0\u05ea \u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05d4\u05d6\u05d5 \u05d1\u05ea\u05d5\u05e8 \u05de\u05d5\u05de\u05dc\u05e6\u05ea. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This response could not be unendorsed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05e1\u05d9\u05de\u05d5\u05df \u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05d4\u05d6\u05d5 \u05d1\u05ea\u05d5\u05e8 \u05de\u05d5\u05de\u05dc\u05e6\u05ea. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This response could not be unmarked as an answer. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05e1\u05d9\u05de\u05d5\u05df \u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05d4\u05d6\u05d5 \u05d1\u05ea\u05d5\u05e8 \u05ea\u05e9\u05d5\u05d1\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.": "\u05e9\u05dd \u05e7\u05e6\u05e8 \u05d6\u05d4 \u05dc\u05e1\u05d5\u05d2 \u05d4\u05de\u05e9\u05d9\u05de\u05d4 (\u05dc\u05d3\u05d5\u05d2\u05de\u05d4, \u05e9\"\u05d1 \u05d0\u05d5 \u05de\u05d1\u05d7\u05df \u05d0\u05de\u05e6\u05e2) \u05de\u05d5\u05e4\u05d9\u05e2 \u05dc\u05d9\u05d3 \u05d4\u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05e9\u05d1\u05e2\u05de\u05d5\u05d3 \u05d4\u05d4\u05ea\u05e7\u05d3\u05de\u05d5\u05ea \u05e9\u05dc \u05d4\u05dc\u05d5\u05de\u05d3.",
"This team does not have any members.": "\u05d0\u05d9\u05df \u05d7\u05d1\u05e8\u05d9\u05dd \u05d1\u05e6\u05d5\u05d5\u05ea \u05d6\u05d4.",
"This team is full.": "\u05e6\u05d5\u05d5\u05ea \u05d6\u05d4 \u05de\u05dc\u05d0.",
"This thread is closed.": "\u05e9\u05e8\u05e9\u05d5\u05e8 \u05d6\u05d4 \u05e1\u05d2\u05d5\u05e8",
+ "This vote could not be processed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05d1\u05d3 \u05d0\u05ea \u05d4\u05d1\u05e7\u05e9\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"Time Allotted (HH:MM):": "\u05d6\u05de\u05df \u05e9\u05d4\u05d5\u05e7\u05e6\u05d1 (\u05e9\u05e9:\u05d3\u05d3):",
"Time Sent": "\u05d6\u05de\u05df \u05d4\u05e9\u05dc\u05d9\u05d7\u05d4:",
"Time Sent:": "\u05d6\u05de\u05df \u05d4\u05e9\u05dc\u05d9\u05d7\u05d4:",
@@ -1466,6 +1514,7 @@
"Ungraded": "\u05dc\u05dc\u05d0 \u05e6\u05d9\u05d5\u05df",
"Unit": "\u05d9\u05d7\u05d9\u05d3\u05d4",
"Unit Visibility": "\u05e0\u05e8\u05d0\u05d5\u05ea \u05d9\u05d7\u05d9\u05d3\u05d4",
+ "Units": "\u05d9\u05d7\u05d9\u05d3\u05d5\u05ea",
"Unknown": "\u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2",
"Unknown Error Occurred.": "\u05d4\u05ea\u05e8\u05d7\u05e9\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4.",
"Unlink This Account": "\u05d4\u05e1\u05e8 \u05d0\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8 \u05e9\u05dc \u05d7\u05e9\u05d1\u05d5\u05df \u05d6\u05d4",
@@ -1503,7 +1552,9 @@
"Upload an image": "\u05d4\u05e2\u05dc\u05d4 \u05ea\u05de\u05d5\u05e0\u05d4",
"Upload an image or capture one with your web or phone camera.": "\u05d4\u05e2\u05dc\u05d4 \u05ea\u05de\u05d5\u05e0\u05d4 \u05d0\u05d5 \u05e6\u05dc\u05dd \u05d1\u05e2\u05d6\u05e8\u05ea \u05de\u05e6\u05dc\u05de\u05ea \u05d4\u05e8\u05e9\u05ea \u05d0\u05d5 \u05de\u05e6\u05dc\u05de\u05ea \u05d4\u05e0\u05d9\u05d9\u05d3 \u05e9\u05d1\u05e8\u05e9\u05d5\u05ea\u05da. ",
"Upload completed": "\u05d4\u05e2\u05dc\u05d0\u05d4 \u05d4\u05d5\u05e9\u05dc\u05de\u05d4",
+ "Upload completed for video {fileName}": "\u05d4\u05d4\u05e2\u05dc\u05d0\u05d4 \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d9\u05d3\u05d0\u05d5 {fileName} \u05d4\u05d5\u05e9\u05dc\u05de\u05d4",
"Upload failed": "\u05d4\u05e2\u05dc\u05d0\u05d4 \u05e0\u05db\u05e9\u05dc\u05d4",
+ "Upload failed for video {fileName}": "\u05d4\u05d4\u05e2\u05dc\u05d0\u05d4 \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d9\u05d3\u05d0\u05d5 {fileName} \u05dc\u05d0 \u05d4\u05e6\u05dc\u05d9\u05d7\u05d4",
"Upload instructor image.": "\u05d4\u05e2\u05dc\u05d4 \u05ea\u05de\u05d5\u05e0\u05ea \u05de\u05d3\u05e8\u05d9\u05da.",
"Upload is in progress. To avoid errors, stay on this page until the process is complete.": "\u05d4\u05e2\u05dc\u05d0\u05d4 \u05de\u05ea\u05d1\u05e6\u05e2\u05ea. \u05db\u05d3\u05d9 \u05dc\u05d4\u05d9\u05de\u05e0\u05e2 \u05de\u05e9\u05d2\u05d9\u05d0\u05d5\u05ea, \u05d4\u05d9\u05e9\u05d0\u05e8 \u05d1\u05e2\u05de\u05d5\u05d3 \u05d6\u05d4 \u05e2\u05d3 \u05e9\u05d4\u05ea\u05d4\u05dc\u05d9\u05da \u05d9\u05d5\u05e9\u05dc\u05dd.",
"Upload signature image.": "\u05d4\u05e2\u05dc\u05d4 \u05ea\u05de\u05d5\u05e0\u05ea \u05d7\u05ea\u05d9\u05de\u05d4.",
@@ -1528,10 +1579,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05e6\u05dc\u05de\u05ea \u05d4\u05e8\u05e9\u05ea \u05e9\u05dc\u05da \u05dc\u05e6\u05dc\u05dd \u05d0\u05ea \u05ea\u05de\u05d5\u05e0\u05ea \u05d4\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d4\u05de\u05d6\u05d4\u05d4 \u05e9\u05dc\u05da. \u05d0\u05e0\u05d5 \u05e0\u05ea\u05d0\u05d9\u05dd \u05d0\u05ea \u05d4\u05ea\u05de\u05d5\u05e0\u05d4 \u05d4\u05d6\u05d5 \u05dc\u05ea\u05de\u05d5\u05e0\u05ea \u05e4\u05e0\u05d9\u05da \u05d5\u05dc\u05e9\u05dd \u05d7\u05e9\u05d1\u05d5\u05e0\u05da. ",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05e6\u05dc\u05de\u05ea \u05d4\u05e8\u05e9\u05ea \u05e9\u05dc\u05da \u05dc\u05e6\u05dc\u05dd \u05d0\u05ea \u05e4\u05e0\u05d9\u05da. \u05d0\u05e0\u05d7\u05e0\u05d5 \u05e0\u05e9\u05d5\u05d5\u05d4 \u05d0\u05ea \u05d4\u05ea\u05de\u05d5\u05e0\u05d4 \u05dc\u05ea\u05de\u05d5\u05e0\u05ea\u05da \u05d1\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d4\u05de\u05d6\u05d4\u05d4.",
"Used": "\u05e0\u05e2\u05e9\u05d4 \u05e9\u05d9\u05de\u05d5\u05e9",
- "Used in {count} unit": [
- "\u05e0\u05e2\u05e9\u05d4 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05d9\u05d7\u05d9\u05d3\u05d4 {count}",
- "\u05e0\u05e2\u05e9\u05d4 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d1-{count} \u05d9\u05d7\u05d9\u05d3\u05d5\u05ea"
- ],
"User": "\u05de\u05e9\u05ea\u05de\u05e9",
"User Email": "\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc \u05de\u05e9\u05ea\u05de\u05e9",
"Username": "\u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9",
@@ -1575,6 +1622,7 @@
"\u05de\u05e6\u05d9\u05d2 \u05e7\u05d5\u05e8\u05e1 %s",
"\u05de\u05e6\u05d9\u05d2 %s \u05e7\u05d5\u05e8\u05e1\u05d9\u05dd"
],
+ "Visibility": "\u05ea\u05e6\u05d5\u05d2\u05d4",
"Visible to": "\u05d2\u05dc\u05d5\u05d9 \u05e2\u05d1\u05d5\u05e8:",
"Visible to Staff Only": "\u05d2\u05dc\u05d5\u05d9 \u05dc\u05e6\u05d5\u05d5\u05ea \u05d1\u05dc\u05d1\u05d3",
"Visual aids": "\u05e2\u05d6\u05e8\u05d9\u05dd \u05d5\u05d9\u05d6\u05d5\u05d0\u05dc\u05d9\u05dd",
@@ -1614,6 +1662,7 @@
"Would you like to sign in using your %(providerName)s credentials?": "\u05d4\u05d0\u05dd \u05ea\u05e8\u05e6\u05d4 \u05dc\u05d4\u05d9\u05db\u05e0\u05e1 \u05dc\u05d7\u05e9\u05d1\u05d5\u05df \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05e8\u05e9\u05d0\u05d5\u05ea %(providerName)s \u05e9\u05dc\u05da?",
"Year of Birth": "\u05e9\u05e0\u05ea \u05dc\u05d9\u05d3\u05d4",
"Yes, allow edits to the active Certificate": "\u05db\u05df, \u05d0\u05e4\u05e9\u05e8 \u05e2\u05e8\u05d9\u05db\u05d5\u05ea \u05d1\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d4\u05e4\u05e2\u05d9\u05dc\u05d4",
+ "Yes, delete this {xblock_type}": "\u05db\u05df, \u05de\u05d7\u05e7 \u05d0\u05ea {xblock_type} \u05d6\u05d4",
"Yes, replace the edX transcript with the YouTube transcript": "\u05db\u05df, \u05d4\u05d7\u05dc\u05e3 \u05d0\u05ea \u05ea\u05de\u05dc\u05d9\u05dc edX \u05d1\u05ea\u05de\u05dc\u05d9\u05dc \u05d9\u05d5\u05d8\u05d9\u05d5\u05d1",
"You already belong to another team.": "\u05d0\u05ea\u05d4 \u05db\u05d1\u05e8 \u05e9\u05d9\u05d9\u05da \u05dc\u05e6\u05d5\u05d5\u05ea \u05d0\u05d7\u05e8.",
"You are a member of this team.": "\u05d0\u05ea\u05d4 \u05d7\u05d1\u05e8 \u05d1\u05e6\u05d5\u05d5\u05ea \u05d6\u05d4.",
@@ -1633,6 +1682,8 @@
"You cannot view the course as a student or beta tester before the course release date.": "\u05d0\u05d9\u05e0\u05da \u05d9\u05db\u05d5\u05dc \u05dc\u05e6\u05e4\u05d5\u05ea \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4 \u05db\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d0\u05d5 \u05de\u05e9\u05ea\u05de\u05e9 \u05d1\u05d2\u05e8\u05e1\u05ea \u05d4\u05d1\u05d8\u05d0 \u05dc\u05e4\u05e0\u05d9 \u05ea\u05d0\u05e8\u05d9\u05da \u05d4\u05d4\u05e9\u05e7\u05d4 \u05e9\u05dc \u05d4\u05e7\u05d5\u05e8\u05e1.",
"You changed a video URL, but did not change the timed transcript file. Do you want to use the current timed transcript or upload a new .srt transcript file?": "\u05e9\u05d9\u05e0\u05d9\u05ea \u05d0\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5 \u05d0\u05da \u05dc\u05d0 \u05e9\u05d9\u05e0\u05d9\u05ea \u05d0\u05ea \u05e7\u05d5\u05d1\u05e5 \u05d4\u05ea\u05de\u05dc\u05d9\u05dc \u05d4\u05de\u05ea\u05d5\u05d6\u05de\u05df. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e7\u05d5\u05d1\u05e5 \u05d4\u05ea\u05de\u05dc\u05d9\u05dc \u05d4\u05e0\u05d5\u05db\u05d7\u05d9 \u05d0\u05d5 \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05e7\u05d5\u05d1\u05e5 \u05ea\u05de\u05dc\u05d9\u05dc SRT \u05d7\u05d3\u05e9?",
"You commented...": "\u05d4\u05d2\u05d1\u05ea...",
+ "You could not be subscribed to this post. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e8\u05e9\u05d5\u05dd \u05d0\u05d5\u05ea\u05da \u05dc\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "You could not be unsubscribed from this post. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e9\u05dc\u05da \u05dc\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"You currently have no cohorts configured": "\u05dc\u05d0 \u05de\u05d5\u05d2\u05d3\u05e8\u05d5\u05ea \u05db\u05e2\u05ea \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05dc\u05d9\u05de\u05d5\u05d3",
"You did not select a content group": "\u05dc\u05d0 \u05d1\u05d7\u05e8\u05ea \u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df",
"You did not select any files to submit.": "\u05dc\u05d0 \u05d1\u05d7\u05e8\u05ea \u05d0\u05e3 \u05e7\u05d5\u05d1\u05e5 \u05dc\u05d4\u05d2\u05e9\u05d4.",
@@ -1641,22 +1692,22 @@
"You don't seem to have a webcam connected.": "\u05e0\u05e8\u05d0\u05d4 \u05db\u05d9 \u05dc\u05d0 \u05de\u05d7\u05d5\u05d1\u05e8\u05ea \u05de\u05e6\u05dc\u05de\u05ea \u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8.",
"You have already reported this annotation.": "\u05db\u05d1\u05e8 \u05d3\u05d9\u05d5\u05d5\u05d7\u05ea \u05e2\u05dc \u05d4\u05d4\u05e2\u05e8\u05d4 \u05d4\u05d6\u05d5.",
"You have already verified your ID!": "\u05d0\u05d9\u05de\u05ea\u05ea \u05db\u05d1\u05e8 \u05d0\u05ea \u05d6\u05d4\u05d5\u05ea\u05da!",
+ "You have been logged out of your edX account. Click Okay to log in again now. Click Cancel to stay on this page (you must log in again to save your work).": "\u05d9\u05e6\u05d0\u05ea \u05de\u05d7\u05e9\u05d1\u05d5\u05df edX \u05e9\u05dc\u05da. \u05dc\u05d7\u05e5 \u05e2\u05dc '\u05d0\u05d9\u05e9\u05d5\u05e8' \u05db\u05d3\u05d9 \u05dc\u05d4\u05d9\u05db\u05e0\u05e1 \u05e9\u05d5\u05d1 \u05db\u05e2\u05ea. \u05dc\u05d7\u05e5 \u05e2\u05dc '\u05d1\u05d9\u05d8\u05d5\u05dc' \u05db\u05d3\u05d9 \u05dc\u05d4\u05d9\u05e9\u05d0\u05e8 \u05d1\u05e2\u05de\u05d5\u05d3 (\u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05d9\u05db\u05e0\u05e1 \u05e9\u05d5\u05d1 \u05db\u05d3\u05d9 \u05dc\u05e9\u05de\u05d5\u05e8 \u05d0\u05ea \u05de\u05d4 \u05e9\u05e2\u05e9\u05d9\u05ea).",
"You have done a dry run of force publishing the course. Nothing has changed. Had you run it, the following course versions would have been change.": "\u05d1\u05d9\u05e6\u05e2\u05ea \u05d4\u05e4\u05e2\u05dc\u05d4 \u05de\u05d0\u05d5\u05dc\u05e6\u05ea \u05e9\u05dc \u05e4\u05e8\u05e1\u05d5\u05dd \u05d4\u05e7\u05d5\u05e8\u05e1. \u05d3\u05d1\u05e8 \u05dc\u05d0 \u05d4\u05e9\u05ea\u05e0\u05d4. \u05d0\u05dd \u05d4\u05d9\u05d9\u05ea \u05de\u05e4\u05e2\u05d9\u05dc \u05d0\u05d5\u05ea\u05d5, \u05d2\u05e8\u05e1\u05d0\u05d5\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05d4\u05d1\u05d0\u05d5\u05ea \u05d4\u05d9\u05d5 \u05de\u05e9\u05ea\u05e0\u05d5\u05ea.",
"You have no handouts defined": "\u05dc\u05d0 \u05d4\u05d5\u05d2\u05d3\u05e8\u05d5 \u05d3\u05e4\u05d9 \u05de\u05d9\u05d3\u05e2",
"You have not created any certificates yet.": "\u05dc\u05d0 \u05d9\u05e6\u05e8\u05ea \u05d0\u05e3 \u05ea\u05e2\u05d5\u05d3\u05d4 \u05e2\u05d3\u05d9\u05d9\u05df.",
"You have not created any content groups yet.": " \u05dc\u05d0 \u05d9\u05e6\u05e8\u05ea \u05e2\u05d3\u05d9\u05d9\u05df \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05ea\u05d5\u05db\u05df \u05db\u05dc\u05e9\u05d4\u05df.",
"You have not created any group configurations yet.": "\u05dc\u05d0 \u05d9\u05e6\u05e8\u05ea \u05e2\u05d3\u05d9\u05d9\u05df \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e7\u05d1\u05d5\u05e6\u05d4.",
+ "You have successfully signed into %(currentProvider)s, but your %(currentProvider)s account does not have a linked %(platformName)s account. To link your accounts, sign in now using your %(platformName)s password.": "\u05e0\u05e8\u05e9\u05de\u05ea \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05dc-%(currentProvider)s, \u05d0\u05da \u05dc\u05d7\u05e9\u05d1\u05d5\u05df %(currentProvider)s\u05d0\u05d9\u05df \u05d7\u05e9\u05d1\u05d5\u05df %(platformName)s \u05de\u05e7\u05d5\u05e9\u05e8. \u05db\u05d3\u05d9 \u05dc\u05e7\u05e9\u05e8 \u05d0\u05ea \u05d7\u05e9\u05d1\u05d5\u05e0\u05d5\u05ea\u05d9\u05d9\u05da, \u05d4\u05d9\u05db\u05e0\u05e1 \u05db\u05e2\u05ea \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05e1\u05d9\u05e1\u05de\u05ea %(platformName)s.",
"You have unsaved changes are you sure you want to navigate away?": "\u05d9\u05e9\u05e0\u05dd \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05dc\u05d0 \u05e0\u05e9\u05de\u05e8\u05d5, \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05e2\u05d6\u05d5\u05d1?",
"You have unsaved changes. Do you really want to leave this page?": "\u05d9\u05e9\u05e0\u05dd \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05dc\u05d0 \u05e0\u05e9\u05de\u05e8\u05d5. \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e2\u05d6\u05d5\u05d1 \u05e2\u05de\u05d5\u05d3 \u05d6\u05d4?",
"You haven't added any assets to this course yet.": "\u05e2\u05d3\u05d9\u05d9\u05df \u05dc\u05d0 \u05d4\u05d5\u05e1\u05e4\u05ea \u05e0\u05db\u05e1\u05d9\u05dd \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"You haven't added any content to this course yet.": " \u05dc\u05d0 \u05d4\u05d5\u05e1\u05e4\u05ea \u05e2\u05d3\u05d9\u05d9\u05df \u05ea\u05d5\u05db\u05df \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"You haven't added any textbooks to this course yet.": "\u05dc\u05d0 \u05d4\u05d5\u05e1\u05e4\u05ea \u05e2\u05d3\u05d9\u05d9\u05df \u05e1\u05e4\u05e8\u05d9 \u05dc\u05d9\u05de\u05d5\u05d3 \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "\u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05d9\u05d5\u05ea \u05de\u05e2\u05dc \u05d2\u05d9\u05dc 13 \u05db\u05d3\u05d9 \u05dc\u05e9\u05ea\u05e3 \u05d0\u05ea \u05de\u05d9\u05d3\u05e2 \u05d4\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05d4\u05de\u05dc\u05d0 \u05e9\u05dc\u05da. \u05d0\u05dd \u05d0\u05ea\u05d4 \u05de\u05e2\u05dc \u05d2\u05d9\u05dc 13, \u05d5\u05d3\u05d0 \u05e9\u05e6\u05d9\u05d9\u05e0\u05ea \u05d0\u05ea \u05e9\u05e0\u05ea \u05d4\u05dc\u05d9\u05d3\u05d4 \u05e9\u05dc\u05da \u05d1{account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "\u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05d6\u05d9\u05df \u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05ea\u05e7\u05d9\u05e0\u05d4 \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d7\u05d1\u05e8 \u05e6\u05d5\u05d5\u05ea \u05d7\u05d3\u05e9.",
"You must sign out and sign back in before your language changes take effect.": "\u05e2\u05dc\u05d9\u05da \u05dc\u05e6\u05d0\u05ea \u05de\u05d4\u05d7\u05e9\u05d1\u05d5\u05df \u05d5\u05dc\u05d4\u05db\u05e0\u05e1 \u05d7\u05d6\u05e8\u05d4 \u05e2\u05dc \u05de\u05e0\u05ea \u05e9\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9 \u05d4\u05e9\u05e4\u05d4 \u05d9\u05d9\u05db\u05e0\u05e1\u05d5 \u05dc\u05ea\u05d5\u05e7\u05e3.",
"You must specify a name": "\u05e2\u05dc\u05d9\u05da \u05dc\u05ea\u05ea \u05e9\u05dd",
"You must specify a name for the cohort": "\u05e2\u05dc\u05d9\u05da \u05dc\u05e6\u05d9\u05d9\u05df \u05e9\u05dd \u05e9\u05dc \u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\u05e2\u05dc\u05d9\u05da \u05dc\u05e6\u05d9\u05d9\u05df \u05d0\u05ea \u05e9\u05e0\u05ea \u05d4\u05dc\u05d9\u05d3\u05d4 \u05e9\u05dc\u05da \u05dc\u05e4\u05e0\u05d9 \u05e9\u05ea\u05d5\u05db\u05dc \u05dc\u05d7\u05dc\u05d5\u05e7 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05d4\u05de\u05dc\u05d0 \u05e9\u05dc\u05da. \u05d1\u05db\u05d3\u05d9 \u05dc\u05e6\u05d9\u05d9\u05df \u05d0\u05ea \u05e9\u05e0\u05ea \u05d4\u05dc\u05d9\u05d3\u05d4 \u05e9\u05dc\u05da \u05e2\u05d1\u05d5\u05e8 \u05dc{account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "\u05d0\u05ea\u05d4 \u05d6\u05e7\u05d5\u05e7 \u05dc\u05de\u05d7\u05e9\u05d1 \u05d1\u05e2\u05dc \u05de\u05e6\u05dc\u05de\u05ea \u05e8\u05e9\u05ea. \u05d1\u05e7\u05d1\u05dc\u05ea \u05d4\u05e0\u05d7\u05d9\u05d9\u05ea \u05d3\u05e4\u05d3\u05e4\u05df, \u05d5\u05d3\u05d0 \u05db\u05d9 \u05d0\u05ea\u05d4 \u05de\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05e9\u05d4 \u05dc\u05de\u05e6\u05dc\u05de\u05d4.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "\u05d0\u05ea\u05d4 \u05d6\u05e7\u05d5\u05e7 \u05dc\u05e8\u05d9\u05e9\u05d9\u05d5\u05df \u05e0\u05d4\u05d9\u05d2\u05d4, \u05d3\u05e8\u05db\u05d5\u05df \u05d0\u05d5 \u05ea\u05e2\u05d5\u05d3\u05ea \u05de\u05d6\u05d4\u05d4 \u05d0\u05d7\u05e8\u05ea \u05e9\u05de\u05d5\u05e4\u05d9\u05e2\u05d9\u05dd \u05d1\u05d4 \u05e9\u05de\u05da \u05d5\u05ea\u05de\u05d5\u05e0\u05ea\u05da.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "\u05d0\u05ea\u05d4 \u05d6\u05e7\u05d5\u05e7 \u05dc\u05ea\u05e2\u05d5\u05d3\u05d4 \u05de\u05d6\u05d4\u05d4 \u05e2\u05dd \u05e9\u05de\u05da \u05d5\u05e2\u05dd \u05ea\u05de\u05d5\u05e0\u05d4. \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e8\u05d9\u05e9\u05d9\u05d5\u05df \u05e0\u05d4\u05d9\u05d2\u05d4, \u05d3\u05e8\u05db\u05d5\u05df \u05d0\u05d5 \u05ea\u05e2\u05d5\u05d3\u05d4 \u05de\u05d6\u05d4\u05d4 \u05d0\u05d7\u05e8\u05ea \u05e9\u05d4\u05d5\u05e0\u05e4\u05e7\u05d4 \u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05de\u05de\u05e9\u05dc\u05d4. ",
@@ -1677,6 +1728,7 @@
"Your changes have been saved.": "\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e0\u05e9\u05de\u05e8\u05d5",
"Your changes will not take effect until you save your progress.": "\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05d1\u05d9\u05e6\u05e2\u05ea \u05dc\u05d0 \u05d9\u05db\u05e0\u05e1\u05d5 \u05dc\u05e4\u05d5\u05e2\u05dc \u05e2\u05d3 \u05e9\u05ea\u05e9\u05de\u05d5\u05e8 \u05d0\u05ea \u05e2\u05d1\u05d5\u05d3\u05ea\u05da.",
"Your changes will not take effect until you save your progress. Take care with key and value formatting, as validation is not implemented.": "\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05d1\u05d9\u05e6\u05e2\u05ea \u05dc\u05d0 \u05d9\u05db\u05e0\u05e1\u05d5 \u05dc\u05ea\u05d5\u05e7\u05e3 \u05e2\u05d3 \u05e9\u05ea\u05e9\u05de\u05d5\u05e8 \u05d0\u05ea \u05d4\u05d4\u05ea\u05e7\u05d3\u05de\u05d5\u05ea\u05da. \u05e9\u05d9\u05dd \u05dc\u05d1 \u05dc\u05e2\u05d9\u05e6\u05d5\u05d1 \u05d4\u05e7\u05d5 \u05d5\u05d4\u05e2\u05e8\u05da, \u05de\u05d0\u05d7\u05e8 \u05e9\u05d4\u05d0\u05d9\u05de\u05d5\u05ea \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05d8\u05de\u05e2.",
+ "Your course could not be exported to XML. There is not enough information to identify the failed component. Inspect your course to identify any problematic components and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05d9\u05e6\u05d0 \u05d0\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05dc-XML. \u05d0\u05d9\u05df \u05de\u05d9\u05d3\u05e2 \u05d1\u05de\u05d9\u05d3\u05d4 \u05de\u05e1\u05e4\u05e7\u05ea \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d6\u05d4\u05d5\u05ea \u05d0\u05ea \u05d4\u05e8\u05db\u05d9\u05d1 \u05d4\u05db\u05d5\u05e9\u05dc. \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05e9\u05dc\u05da \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d6\u05d4\u05d5\u05ea \u05e8\u05db\u05d9\u05d1\u05d9\u05dd \u05d1\u05e2\u05d9\u05d9\u05ea\u05d9\u05dd \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1. ",
"Your donation could not be submitted.": "\u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05e9\u05dc\u05da \u05dc\u05d0 \u05d9\u05db\u05dc\u05d4 \u05dc\u05d4\u05ea\u05e7\u05d1\u05dc.",
"Your email message was successfully queued for sending. In courses with a large number of learners, email messages to learners might take up to an hour to be sent.": "\u05d4\u05d5\u05d3\u05e2\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e0\u05db\u05e0\u05e1\u05d4 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05dc\u05d4\u05de\u05ea\u05e0\u05d4 \u05dc\u05de\u05e9\u05dc\u05d5\u05d7. \u05d1\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05e2\u05dd \u05de\u05e1\u05e4\u05e8 \u05d2\u05d3\u05d5\u05dc \u05e9\u05dc \u05dc\u05d5\u05de\u05d3\u05d9\u05dd, \u05d9\u05d9\u05ea\u05db\u05df \u05e9\u05d9\u05d9\u05e7\u05d7 \u05e2\u05d3 \u05e9\u05e2\u05d4 \u05e2\u05d3 \u05e9\u05d4\u05d5\u05d3\u05e2\u05d5\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05dc\u05db\u05dc \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d9\u05d9\u05e9\u05dc\u05d7\u05d5.",
"Your entire face fits inside the frame.": "\u05e4\u05e0\u05d9\u05da \u05de\u05ea\u05d0\u05d9\u05de\u05d9\u05dd \u05dc\u05d2\u05d1\u05d5\u05dc\u05d5\u05ea \u05d4\u05de\u05e1\u05d2\u05e8\u05ea.",
@@ -1685,13 +1737,19 @@
"Your file could not be uploaded": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05d0\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5 \u05e9\u05dc\u05da",
"Your file has been deleted.": "\u05d4\u05e7\u05d5\u05d1\u05e5 \u05e9\u05dc\u05da \u05e0\u05de\u05d7\u05e7",
"Your file {filename} is too large (max size: {maxSize}MB).": "\u05d4\u05e7\u05d5\u05d1\u05e5 {filename} \u05d2\u05d3\u05d5\u05dc \u05de\u05d3\u05d9 (\u05d2\u05d5\u05d3\u05dc \u05de\u05e8\u05d1\u05d9: {maxSize}MB).",
+ "Your import has failed.": "\u05d4\u05d9\u05d1\u05d5\u05d0 \u05e0\u05db\u05e9\u05dc.",
+ "Your import is in progress; navigating away will abort it.": "\u05d4\u05d9\u05d1\u05d5\u05d0 \u05e9\u05dc\u05da \u05e0\u05de\u05e6\u05d0 \u05d1\u05ea\u05d4\u05dc\u05d9\u05da; \u05e0\u05d9\u05d5\u05d5\u05d8 \u05d4\u05d7\u05d5\u05e6\u05d4 \u05d9\u05d1\u05d8\u05dc \u05d6\u05d0\u05ea.",
+ "Your library could not be exported to XML. There is not enough information to identify the failed component. Inspect your library to identify any problematic components and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05d9\u05e6\u05d0 \u05d0\u05ea \u05e1\u05e4\u05e8\u05d9\u05d9\u05ea\u05da \u05dc\u05e7\u05d5\u05d1\u05e5 XML. \u05d0\u05d9\u05df \u05de\u05d9\u05d3\u05e2 \u05d1\u05de\u05d9\u05d3\u05d4 \u05de\u05e1\u05e4\u05e7\u05ea \u05dc\u05d6\u05d9\u05d4\u05d5\u05d9 \u05d4\u05e8\u05db\u05d9\u05d1 \u05d4\u05db\u05d5\u05e9\u05dc. \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05e1\u05e4\u05e8\u05d9\u05d9\u05ea\u05da, \u05d6\u05d4\u05d4 \u05e8\u05db\u05d9\u05d1\u05d9\u05dd \u05d1\u05e2\u05d9\u05ea\u05d9\u05d9\u05dd \u05d5\u05dc\u05d0\u05d7\u05e8 \u05de\u05db\u05df \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1. ",
"Your message cannot be blank.": "\u05d4\u05d5\u05d3\u05e2\u05ea\u05da \u05d0\u05d9\u05e0\u05d4 \u05d9\u05db\u05d5\u05dc\u05d4 \u05dc\u05d4\u05d9\u05d5\u05ea \u05e8\u05d9\u05e7\u05d4.",
"Your message must have a subject.": "\u05d4\u05d5\u05d3\u05e2\u05ea\u05da \u05d7\u05d9\u05d9\u05d1\u05ea \u05dc\u05d4\u05db\u05d9\u05dc \u05e0\u05d5\u05e9\u05d0.",
"Your message must have at least one target.": "\u05d4\u05d4\u05d5\u05d3\u05e2\u05d4 \u05e9\u05dc\u05da \u05d7\u05d9\u05d9\u05d1\u05ea \u05dc\u05d4\u05db\u05d9\u05dc \u05d9\u05e2\u05d3 \u05d0\u05d7\u05d3 \u05dc\u05e4\u05d7\u05d5\u05ea.",
"Your policy changes have been saved.": "\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9 \u05de\u05d3\u05d9\u05e0\u05d9\u05d5\u05ea\u05da \u05e0\u05e9\u05de\u05e8\u05d5.",
"Your post will be discarded.": "\u05d4\u05e4\u05d5\u05e1\u05d8 \u05e9\u05dc\u05da \u05d9\u05d1\u05d5\u05d8\u05dc.",
+ "Your question or idea (required)": "\u05e9\u05d0\u05dc\u05ea\u05da \u05d0\u05d5 \u05e8\u05e2\u05d9\u05d5\u05e0\u05da (\u05d7\u05d5\u05d1\u05d4)",
+ "Your request could not be completed due to a server problem. Reload the page and try again. If the issue persists, click the Help tab to report the problem.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05dc\u05d9\u05dd \u05d0\u05ea \u05d1\u05e7\u05e9\u05ea\u05da \u05d1\u05d2\u05dc\u05dc \u05d1\u05e2\u05d9\u05d4 \u05d1\u05e9\u05e8\u05ea. \u05d8\u05e2\u05df \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05d3\u05e3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1. \u05d0\u05dd \u05d4\u05d1\u05e2\u05d9\u05d4 \u05e0\u05de\u05e9\u05db\u05ea, \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05e9\u05d5\u05e0\u05d9\u05ea '\u05e2\u05d6\u05e8\u05d4' \u05db\u05d3\u05d9 \u05dc\u05d3\u05d5\u05d5\u05d7 \u05e2\u05dc \u05d4\u05d1\u05e2\u05d9\u05d4.",
"Your request could not be completed. Reload the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05dc\u05d9\u05dd \u05d0\u05ea \u05d1\u05e7\u05e9\u05ea\u05da. \u05d8\u05e2\u05df \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05d3\u05e3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
"Your request could not be completed. Reload the page and try again. If the issue persists, click the Help tab to report the problem.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05dc\u05d9\u05dd \u05d0\u05ea \u05d1\u05e7\u05e9\u05ea\u05da. \u05d8\u05e2\u05df \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05d3\u05e3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1. \u05d0\u05dd \u05d4\u05d1\u05e2\u05d9\u05d4 \u05e0\u05de\u05e9\u05db\u05ea, \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05e9\u05d5\u05e0\u05d9\u05ea '\u05e2\u05d6\u05e8\u05d4' \u05db\u05d3\u05d9 \u05dc\u05d3\u05d5\u05d5\u05d7 \u05e2\u05dc \u05d4\u05d1\u05e2\u05d9\u05d4.",
+ "Your request could not be processed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05d1\u05d3 \u05d0\u05ea \u05d1\u05e7\u05e9\u05ea\u05da. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"Your team could not be created.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05e6\u05d5\u05e8 \u05d0\u05ea \u05d4\u05e6\u05d5\u05d5\u05ea \u05e9\u05dc\u05da.",
"Your team could not be updated.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05d3\u05db\u05df \u05d0\u05ea \u05d4\u05e6\u05d5\u05d5\u05ea \u05e9\u05dc\u05da.",
"Your upload of '{file}' failed.": "\u05d4\u05e2\u05dc\u05ea \u05e7\u05d5\u05d1\u05e5 '{file}' \u05e0\u05db\u05e9\u05dc\u05d4.",
@@ -1732,6 +1790,7 @@
"dropped on target": "\u05e9\u05d5\u05d7\u05e8\u05e8 \u05e2\u05dc \u05d4\u05de\u05d8\u05e8\u05d4",
"e.g. 'Sky with clouds'. The description is helpful for users who cannot see the image.": "\u05dc\u05d3\u05d5\u05d2\u05de\u05d4 '\u05e9\u05de\u05d9\u05d9\u05dd \u05e2\u05dd \u05e2\u05e0\u05e0\u05d9\u05dd'. \u05d4\u05ea\u05d9\u05d0\u05d5\u05e8 \u05de\u05d5\u05e2\u05d9\u05dc \u05dc\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05e9\u05d0\u05d9\u05e0\u05dd \u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05dc\u05e8\u05d0\u05d5\u05ea \u05d0\u05ea \u05d4\u05ea\u05de\u05d5\u05e0\u05d4.",
"e.g. 'google'": "\u05dc\u05d3\u05d5\u05d2\u05de\u05d4: 'google'",
+ "e.g. 'http://google.com'": "\u05dc\u05de\u05e9\u05dc 'http://google.com'",
"e.g. johndoe@example.com, JaneDoe, joeydoe@example.com": "\u05dc\u05d3\u05d5\u05d2\u05de\u05d4 johndoe@example.com, JaneDoe, joeydoe@example.com",
"emphasized text": "\u05d8\u05e7\u05e1\u05d8 \u05de\u05d5\u05d3\u05d2\u05e9",
"endorsed %(time_ago)s": "\u05d0\u05d5\u05e9\u05e8 %(time_ago)s",
@@ -1746,6 +1805,7 @@
"less than a minute": "\u05e4\u05d7\u05d5\u05ea \u05de\u05d3\u05e7\u05d4",
"marked as answer %(time_ago)s": "\u05e1\u05d5\u05de\u05df \u05db\u05ea\u05e9\u05d5\u05d1\u05d4 %(time_ago)s",
"marked as answer %(time_ago)s by %(user)s": "\u05e1\u05d5\u05de\u05df \u05db\u05ea\u05e9\u05d5\u05d1\u05d4 \u05e2\u05dc \u05d9\u05d3\u05d9 %(time_ago)s \u05e2\u05dc \u05d9\u05d3\u05d9%(user)s",
+ "minutes": "\u05d3\u05e7\u05d5\u05ea",
"name": "\u05e9\u05dd",
"off": "\u05db\u05d1\u05d5\u05d9",
"on": "\u05e4\u05d5\u05e2\u05dc",
@@ -1787,6 +1847,8 @@
"{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.": "{browse_span_start}\u05e2\u05d9\u05d9\u05df \u05d1\u05e6\u05d5\u05d5\u05ea\u05d9\u05dd \u05d1\u05e0\u05d5\u05e9\u05d0\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9\u05dd {span_end}\u05d0\u05d5 {search_span_start}\u05d7\u05e4\u05e9 \u05e6\u05d5\u05d5\u05ea\u05d9\u05dd{span_end} \u05d1\u05e0\u05d5\u05e9\u05d0 \u05d6\u05d4. \u05d0\u05dd \u05e2\u05d3\u05d9\u05d9\u05df \u05dc\u05d0 \u05d4\u05e6\u05dc\u05d7\u05ea \u05dc\u05de\u05e6\u05d5\u05d0 \u05e6\u05d5\u05d5\u05ea \u05dc\u05d4\u05e6\u05d8\u05e8\u05e3 \u05d0\u05dc\u05d9\u05d5, {create_span_start}\u05e6\u05d5\u05e8 \u05e6\u05d5\u05d5\u05ea \u05d7\u05d3\u05e9 \u05d1\u05e0\u05d5\u05e9\u05d0 \u05d6\u05d4{span_end}.",
"{display_name} Settings": "\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea {display_name}",
"{email} is already on the {container} team. Recheck the email address if you want to add a new member.": "{email} \u05db\u05d1\u05e8 \u05e0\u05de\u05e6\u05d0 \u05d1\u05e6\u05d5\u05d5\u05ea {container}. \u05d1\u05d3\u05d5\u05e7 \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\"\u05dc \u05d1\u05de\u05d9\u05d3\u05d4 \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d7\u05d1\u05e8 \u05e6\u05d5\u05d5\u05ea \u05d7\u05d3\u05e9.",
+ "{filename} exceeds maximum size of {maxFileSizeInGB} GB.": "\u05d4\u05e7\u05d5\u05d1\u05e5 {filename} \u05d7\u05d5\u05e8\u05d2 \u05de\u05d4\u05d2\u05d5\u05d3\u05dc \u05d4\u05de\u05e8\u05d1\u05d9 \u05e9\u05dc {maxFileSizeInGB} GB.",
+ "{filename} is not in a supported file format. Supported file formats are {supportedFileFormats}.": "\u05d4\u05e4\u05d5\u05e8\u05de\u05d8 \u05e9\u05dc {filename} \u05d0\u05d9\u05e0\u05d5 \u05e0\u05ea\u05de\u05da. \u05e1\u05d5\u05d2\u05d9 \u05d4\u05e7\u05d1\u05e6\u05d9\u05dd \u05e9\u05e0\u05ea\u05de\u05db\u05d9\u05dd \u05d4\u05dd {supportedFileFormats}.",
"{hours}:{minutes} (current UTC time)": "{hours}:{minutes} (\u05d6\u05de\u05df \u05d0\u05d5\u05e0\u05d9\u05d1\u05e8\u05e1\u05dc\u05d9 \u05de\u05ea\u05d5\u05d0\u05dd (UTC) \u05e0\u05d5\u05db\u05d7\u05d9)",
"{label}: {status}": "{label}: {status}",
"{numResponses} other response": [
@@ -1802,7 +1864,7 @@
"{numVotes} \u05e7\u05d5\u05dc\u05d5\u05ea"
],
"{organization}\\'s logo": "\u05d4\u05e1\u05de\u05dc \u05e9\u05dc {organization}",
- "{platform_name} learners can see my:": "{platform_name} \u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05dc\u05e8\u05d0\u05d5\u05ea \u05d0\u05ea:",
+ "{paragraphStart}You entered {boldStart}{email}{boldEnd}. If this email address is associated with your {platform_name} account, we will send a message with password reset instructions to this email address.{paragraphEnd}{paragraphStart}If you do not receive a password reset message, verify that you entered the correct email address, or check your spam folder.{paragraphEnd}{paragraphStart}If you need further assistance, {anchorStart}contact technical support{anchorEnd}.{paragraphEnd}": "{paragraphStart}\u05d4\u05d6\u05e0\u05ea {boldStart}{email}{boldEnd}. \u05d0\u05dd \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\"\u05dc \u05d4\u05d6\u05d5 \u05e7\u05e9\u05d5\u05e8\u05d4 \u05dc\u05d7\u05e9\u05d1\u05d5\u05df {platform_name} \u05e9\u05dc\u05da, \u05e0\u05e9\u05dc\u05d7 \u05d4\u05d5\u05d3\u05e2\u05d4 \u05e2\u05dd \u05d4\u05e0\u05d7\u05d9\u05d5\u05ea \u05dc\u05d0\u05d9\u05e4\u05d5\u05e1 \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05dc\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\"\u05dc \u05d4\u05d6\u05d5.{paragraphEnd}{paragraphStart}\u05d0\u05dd \u05dc\u05d0 \u05ea\u05e7\u05d1\u05dc \u05d4\u05d5\u05d3\u05e2\u05d4 \u05dc\u05d0\u05d9\u05e4\u05d5\u05e1 \u05e1\u05d9\u05e1\u05de\u05d4, \u05d1\u05d3\u05d5\u05e7 \u05e9\u05d4\u05d6\u05e0\u05ea \u05d0\u05ea \u05d4\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e0\u05db\u05d5\u05e0\u05d4 \u05d0\u05d5 \u05d1\u05d3\u05d5\u05e7 \u05d1\u05ea\u05d9\u05e7\u05d9\u05d9\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d4\u05d6\u05d1\u05dc \u05d0\u05e6\u05dc\u05da.{paragraphEnd}{paragraphStart}\u05d0\u05dd \u05d9\u05e9 \u05dc\u05da \u05e6\u05d5\u05e8\u05da \u05d1\u05e2\u05d6\u05e8\u05d4 \u05e0\u05d5\u05e1\u05e4\u05ea, {anchorStart}\u05e4\u05e0\u05d4 \u05dc\u05ea\u05de\u05d9\u05db\u05d4 \u05d4\u05d8\u05db\u05e0\u05d9\u05ea{anchorEnd}.{paragraphEnd}",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}\u05d0\u05d6\u05d4\u05e8\u05d4:{screen_reader_end} \u05dc\u05d0 \u05e7\u05d9\u05d9\u05de\u05d5\u05ea \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05ea\u05d5\u05db\u05df.",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}\u05d0\u05d6\u05d4\u05e8\u05d4:{screen_reader_end} \u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05e9\u05e0\u05d1\u05d7\u05e8\u05d4 \u05d1\u05e2\u05d1\u05e8, \u05e0\u05de\u05d7\u05e7\u05d4. \u05d1\u05d7\u05e8 \u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df \u05d0\u05d7\u05e8\u05ea.",
"{start_strong}{total}{end_strong} words submitted in total.": "{start_strong}{total}{end_strong} \u05e1\u05da \u05db\u05dc \u05d4\u05de\u05d9\u05dc\u05d9\u05dd \u05e9\u05e0\u05e9\u05dc\u05d7\u05d5.",
diff --git a/cms/static/js/i18n/ko-kr/djangojs.js b/cms/static/js/i18n/ko-kr/djangojs.js
index 11d7850cf8..c1dff0e1d8 100644
--- a/cms/static/js/i18n/ko-kr/djangojs.js
+++ b/cms/static/js/i18n/ko-kr/djangojs.js
@@ -55,13 +55,9 @@
],
"%s ago": "%s \uc804",
"%s from now": "\uc9c0\uae08\uc73c\ub85c \ubd80\ud130 %s \uc774\ud6c4",
- "About me": "\uc790\uae30\uc18c\uac1c",
"Account Settings": "\uacc4\uc815 \uc124\uc815",
- "Account Settings page.": "\uacc4\uc815 \uc124\uc815 \ud398\uc774\uc9c0",
"Add Cohort": "\ud559\uc2b5\uc9d1\ub2e8 \ucd94\uac00\ud558\uae30",
- "Add Country": "\uad6d\uac00 \ucd94\uac00",
"Add a New Cohort": "\uc2e0\uaddc \ud559\uc2b5 \uc9d1\ub2e8 \ucd94\uac00",
- "Add language": "\uc5b8\uc5b4 \ucd94\uac00",
"Add to Dictionary": "\ubaa8\uc74c\uc5d0 \ucd94\uac00\ud558\uae30",
"Adding the selected course to your cart": "\uc7a5\ubc14\uad6c\ub2c8\uc5d0 \uc120\ud0dd\ub41c \uac15\uc88c\ub97c \ucd94\uac00\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.",
"Advanced": "\uace0\uae09",
@@ -244,7 +240,6 @@
"Format": "\ud615\uc2dd",
"Formats": "\ud615\uc2dd",
"Full Name": "\uc2e4\uba85",
- "Full Profile": "\uc804\uccb4 \ud504\ub85c\ud544",
"Fullscreen": "\uc804\uccb4 \ud654\uba74",
"Gender": "\uc131 ",
"General": "\uc77c\ubc18",
@@ -313,7 +308,6 @@
"Left": "\uc67c\ucabd \uc815\ub82c",
"Left to right": "\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",
"Less": "\uc801\uac8c",
- "Limited Profile": "\uc81c\ud55c\uc801 \ud504\ub85c\ud544",
"Linking": "\uc5f0\uacb0\ud558\uae30",
"Links are generated on demand and expire within 5 minutes due to the sensitive nature of student information.": "\uc694\uccad\uc5d0 \uc758\ud574 \uc0dd\uc131\ub41c \ub9c1\ud06c\ub294 \ud559\uc2b5\uc790 \uc815\ubcf4 \ubcf4\ud638\ub97c \uc704\ud574 5\ubd84 \ub0b4\uc5d0 \uc18c\uba78\ub429\ub2c8\ub2e4.",
"List item": "\ubb38\ub2e8\ubc88\ud638",
@@ -402,8 +396,6 @@
"Print": "\ud504\ub9b0\ud2b8",
"Professional Education": "\uc804\ubb38 \uad50\uc721 \uacfc\uc815",
"Professional Education Verified Certificate": "\uc804\ubb38 \uacfc\uc815 \uc774\uc218\uc99d",
- "Profile Image": "\ud504\ub85c\ud544 \uc774\ubbf8\uc9c0",
- "Profile image for {username}": "{username}\uc758 \ud504\ub85c\ud544 \uc774\ubbf8\uc9c0",
"Public": "\uacf5\uac1c",
"Reason field should not be left blank.": "\uc774\uc720\ub97c \uc785\ub825\ud558\ub294 \ud544\ub4dc\ub294 \ube44\uc6cc\ub458 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
"Recent Activity": "\ucd5c\uadfc \ud65c\ub3d9",
@@ -505,7 +497,6 @@
"Task Type": "\uc791\uc5c5 \uc720\ud615",
"Task inputs": "\uc791\uc5c5 \uc785\ub825",
"Teams": "\ud300",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\ub2e4\ub978 \ud559\uc2b5\uc790\ub4e4\uc5d0\uac8c \uac04\ub2e8\ud558\uac8c \ub098\ub97c \uc18c\uac1c\ud569\ub2c8\ub2e4. \uad00\uc2ec\uc0ac, \uc218\uac15 \uc774\uc720 \ub610\ub294 \ud559\uc2b5 \ubaa9\ud45c \uac19\uc740 \uac83\uc744 \uc4f0\uba74 \ub429\ub2c8\ub2e4. ",
"Templates": "\ud15c\ud50c\ub9bf",
"Text": "Text",
"Text color": "\uae00\uc790\uc0c9",
@@ -606,11 +597,9 @@
"You don't seem to have a webcam connected.": "\uc6f9\ucea0\uc774 \uc5f0\uacb0\ub418\uc9c0 \uc54a\uc740 \uac83 \uac19\uc2b5\ub2c8\ub2e4.",
"You have already reported this annotation.": "\uc774 \uc8fc\uc11d\uc740 \uc774\ubbf8 \uc2e0\uace0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.",
"You have unsaved changes are you sure you want to navigate away?": "\uc800\uc7a5\ub418\uc9c0 \uc54a\uc740 \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uacc4\uc18d \ud0d0\uc0c9\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "\uc804\uccb4 \ud504\ub85c\ud544\uc744 \uacf5\uc720\ud558\ub824\uba74 13\uc138 \uc774\uc0c1\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. 13\uc138 \uc774\uc0c1\uc774\ub77c\uba74, {account_settings_page_link}\uc5d0\uc11c \ucd9c\uc0dd\uc5f0\ub3c4\ub97c \uc785\ub825\ud558\uc138\uc694.",
"You must sign out and sign back in before your language changes take effect.": "\uc5b8\uc5b4\uac00 \ubc14\ub00c\uc5b4\uc84c\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 \ub85c\uadf8\uc544\uc6c3 \ud558\uace0 \ub2e4\uc2dc \ub85c\uadf8\uc778 \ud558\uc138\uc694.",
"You must specify a name": "\uc774\ub984\uc744 \uba85\uc2dc\ud574\uc57c \ud569\ub2c8\ub2e4.",
"You must specify a name for the cohort": "\ud559\uc2b5 \uc9d1\ub2e8\uc758 \uc774\ub984\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\uadc0\ud558\uc758 \uc804\uccb4 \ud504\ub85c\ud544\uc744 \uacf5\uc720\ud558\uae30 \uc804\uc5d0 \ucd9c\uc0dd\uc5f0\ub3c4\ub97c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. \ucd9c\uc0dd\uc5f0\ub3c4\ub97c \uc9c0\uc815\ud558\ub824\uba74 {account_settings_page_link}\ub85c \uac00\uba74 \ub429\ub2c8\ub2e4. ",
"You've made some changes": "\uc218\uc815 \uc644\ub8cc",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.": "\ube0c\ub77c\uc6b0\uc800\uac00 \ud074\ub9bd\ubcf4\ub4dc \uc9c1\uc811 \uc561\uc138\uc2a4\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 \ub2e8\ucd95\ud0a4 Ctrl+X/C/V \ub97c \uc774\uc6a9\ud558\uc138\uc694.",
"Your changes have been saved.": "\ubcc0\uacbd\uc0ac\ud56d\uc774 \uc800\uc7a5\ub418\uc5c8\uc2b5\ub2c8\ub2e4.",
@@ -647,7 +636,6 @@
"name": "\uc774\ub984",
"strong text": "\uac15\ud558\uac8c",
"team count": "\ud300 \uc778\uc6d0 \uc218",
- "{platform_name} learners can see my:": "{platform_name} \ud559\uc2b5\uc790\uac00 \ub098\uc5d0 \ub300\ud574 \ubcfc \uc218 \uc788\ub294 \uac83\uc740 :",
"\u2026": "\u2026"
};
diff --git a/cms/static/js/i18n/pt-br/djangojs.js b/cms/static/js/i18n/pt-br/djangojs.js
index dc72fad620..1b12fd9b2f 100644
--- a/cms/static/js/i18n/pt-br/djangojs.js
+++ b/cms/static/js/i18n/pt-br/djangojs.js
@@ -97,10 +97,8 @@
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"Abbreviation": "Abrevia\u00e7\u00e3o",
"About You": "Sobre Voc\u00ea",
- "About me": "Sobre mim",
"Account Not Activated": "Conta n\u00e3o ativada",
"Account Settings": "Configura\u00e7\u00f5es da Conta",
- "Account Settings page.": "P\u00e1gina de Configura\u00e7\u00f5es da conta.",
"Action": "A\u00e7\u00e3o",
"Actions": "A\u00e7\u00f5es",
"Activate": "Ativar",
@@ -110,7 +108,6 @@
"Add Additional Signatory": "Adicionar signat\u00e1rio adicional",
"Add Cohort": "Adicionar Grupo",
"Add Component:": "Adicionar componente:",
- "Add Country": "Adicionar pa\u00eds",
"Add New Component": "Adicionar Novo Componente",
"Add URLs for additional versions": "Adicionar URLs para vers\u00f5es adicionais",
"Add a Chapter": "Adicionar um Cap\u00edtulo",
@@ -118,7 +115,6 @@
"Add a Response": "Adicionar resposta",
"Add a comment": "Adicionar coment\u00e1rio",
"Add another group": "Adicionar outro grupo",
- "Add language": "Adicionar idioma",
"Add notes about this learner": "Adicionar coment\u00e1rios sobre esse aluno",
"Add to Dictionary": "Adicionar ao Dicion\u00e1rio",
"Add to Exception List": "Adicionar a Lista de Exce\u00e7\u00e3o",
@@ -439,7 +435,6 @@
"Edit Membership": "Editar assinatura.",
"Edit Team": "Editar equipe",
"Edit Your Name": "Edite o seu nome",
- "Edit the name": "Editar nome",
"Edit this certificate?": "Gostaria de editar este certificado?",
"Editable": "Edit\u00e1vel",
"Editing comment": "Editando coment\u00e1rios",
@@ -541,7 +536,6 @@
"Formats": "Formatos",
"Frequently Asked Questions": "Perguntas frequentes",
"Full Name": "Nome completo",
- "Full Profile": "Perfil completo",
"Fullscreen": "Tela cheia",
"Gender": "Sexo",
"General": "Geral",
@@ -681,7 +675,6 @@
"Library User": "Usu\u00e1rio da Biblioteca",
"License Display": "Exibi\u00e7\u00e3o de Licen\u00e7a",
"License Type": "Tipo de licen\u00e7a",
- "Limited Profile": "Perfil limitado",
"Link types should be unique.": "Tipos de link devem ser exclusivos.",
"Linking": "Vinculando",
"Links are generated on demand and expire within 5 minutes due to the sensitive nature of student information.": "Os links s\u00e3o gerados a pedido e expiram em 5 minutos devido \u00e0 natureza delicada das informa\u00e7\u00f5es do aluno.",
@@ -869,8 +862,6 @@
"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 Education": "Educa\u00e7\u00e3o Profissional",
"Professional Education Verified Certificate": "Certificado verificado de profissional de educa\u00e7\u00e3o",
- "Profile Image": "Imagem do perfil",
- "Profile image for {username}": "Imagem do perfil de {username}",
"Promote another member to Admin to remove your admin rights": "Promova outro membro a Administrador para remover seus direitos de administrador",
"Public": "P\u00fablico",
"Publish": "Publicar",
@@ -1072,7 +1063,6 @@
"Team member profiles": "Perfis dos Membros da Equipe",
"Team name cannot have more than 255 characters.": "O nome da equipe n\u00e3o pode exceder 255 caracteres.",
"Teams": "Equipes",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "Conte um pouco sobre voc\u00ea para outros estudantes do edX: onde voc\u00ea mora, quais s\u00e3o seus interesses, porqu\u00ea voc\u00ea est\u00e1 fazendo um curso no edX ou o que voc\u00ea espera aprender.",
"Templates": "Modelos",
"Text": "Texto",
"Text color": "Cor do texto",
@@ -1347,12 +1337,10 @@
"You haven't added any assets to this course yet.": "Voc\u00ea n\u00e3o adicionou nenhum ativo a este curso ainda",
"You haven't added any content to this course yet.": "Voc\u00ea ainda n\u00e3o adicionou nenhum conte\u00fado a este curso.",
"You haven't added any textbooks to this course yet.": "Voc\u00ea ainda n\u00e3o adicionou nenhum livro-texto a este curso.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "Voc\u00ea deve ter mais de 13 anos para compartilhar seu perfil completo. Se voc\u00ea tem mais de 13 anos, tenha certeza que voc\u00ea especificou o ano do seu nascimento na {account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "Voc\u00ea deve escrever um endere\u00e7o de e-mail v\u00e1lido para adicionar um novo membro do grupo",
"You must sign out and sign back in before your language changes take effect.": "Voc\u00ea deve sair e entrar antes que as mudan\u00e7as de idioma tenham efeito.",
"You must specify a name": "Voc\u00ea deve especificar um nome ",
"You must specify a name for the cohort": "Voc\u00ea deve especificar um nome para o grupo",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "Voc\u00ea deve especificar seu ano de nascimento antes de compartilhar seu perfil completo. Para especificar seu ano de anivers\u00e1rio, v\u00e1 para {account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "Voc\u00ea precisa de um computador com uma c\u00e2mera. Ao abrir o aviso, certifique-se de permitir o acesso a sua c\u00e2mera.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "Voc\u00ea precisa de uma carteira de habilita\u00e7\u00e3o, passaporte ou outra identifica\u00e7\u00e3o emitida pelo governo que possua o seu nome e foto.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "Voc\u00ea precisa de um documento com o seu nome e foto. Uma carteira de motorista, passaporte ou outro documento emitido pelo governo s\u00e3o aceit\u00e1veis.",
@@ -1459,7 +1447,6 @@
"with %(section_or_subsection)s": "com %(section_or_subsection)s",
"{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.": "{browse_span_start}D\u00ea uma olhada nas equipes de outros t\u00f3picos{span_end} ou {search_span_start}busque equipes{span_end} neste t\u00f3pico. Caso voc\u00ea ainda n\u00e3o tenha encontrado nenhuma, {create_span_start}crie uma nova equipe neste t\u00f3pico{span_end}.",
"{email} is already on the {container} team. Recheck the email address if you want to add a new member.": "{email} j\u00e1 est\u00e1 no grupo {container}. Verifique novamente o endere\u00e7o de email se voc\u00ea quiser adicionar um novo membro.",
- "{platform_name} learners can see my:": "Estudantes do {platform_name} podem visualizar meu:",
"\u2026": "\u2026"
};
diff --git a/cms/static/js/i18n/rtl/djangojs.js b/cms/static/js/i18n/rtl/djangojs.js
index 32c362ff95..70203b24ee 100644
--- a/cms/static/js/i18n/rtl/djangojs.js
+++ b/cms/static/js/i18n/rtl/djangojs.js
@@ -1451,6 +1451,7 @@
"Thanks for returning to verify your ID in: {courseName}": "\u0641\u0627\u0634\u0631\u0646\u0633 \u0628\u062e\u0642 \u0642\u062b\u0641\u0639\u0642\u0631\u0647\u0631\u0644 \u0641\u062e \u062f\u062b\u0642\u0647\u0628\u063a \u063a\u062e\u0639\u0642 \u0647\u064a \u0647\u0631: {courseName}",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0641\u0627\u062b \u0639\u0642\u0645 \u063a\u062e\u0639 \u062b\u0631\u0641\u062b\u0642\u062b\u064a \u0633\u062b\u062b\u0648\u0633 \u0641\u062e \u0632\u062b \u0634\u0631 \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633. \u064a\u062e \u063a\u062e\u0639 \u0635\u0634\u0631\u0641 \u0641\u062e \u0634\u064a\u064a \u0641\u0627\u062b \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u064a \u0648\u0634\u0647\u0645\u0641\u062e: \u062d\u0642\u062b\u0628\u0647\u0637?",
"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u0641\u0627\u062b \u0639\u0642\u0645 \u063a\u062e\u0639 \u062b\u0631\u0641\u062b\u0642\u062b\u064a \u0633\u062b\u062b\u0648\u0633 \u0641\u062e \u0632\u062b \u0634\u0631 \u062b\u0637\u0641\u062b\u0642\u0631\u0634\u0645 \u0645\u0647\u0631\u0646. \u064a\u062e \u063a\u062e\u0639 \u0635\u0634\u0631\u0641 \u0641\u062e \u0634\u064a\u064a \u0641\u0627\u062b \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u064a \u0627\u0641\u0641\u062d:// \u062d\u0642\u062b\u0628\u0647\u0637?",
+ "The certificate available date must be later than the enrollment start date.": "\u0641\u0627\u062b \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b \u0634\u062f\u0634\u0647\u0645\u0634\u0632\u0645\u062b \u064a\u0634\u0641\u062b \u0648\u0639\u0633\u0641 \u0632\u062b \u0645\u0634\u0641\u062b\u0642 \u0641\u0627\u0634\u0631 \u0641\u0627\u062b \u062b\u0631\u0642\u062e\u0645\u0645\u0648\u062b\u0631\u0641 \u0633\u0641\u0634\u0642\u0641 \u064a\u0634\u0641\u062b.",
"The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "\u0641\u0627\u062b \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 \u0645\u062b\u0634\u0642\u0631\u062b\u0642 \u0627\u0634\u0633 \u0632\u062b\u062b\u0631 \u0642\u062b-\u062f\u0634\u0645\u0647\u064a\u0634\u0641\u062b\u064a \u0634\u0631\u064a \u0641\u0627\u062b \u0633\u063a\u0633\u0641\u062b\u0648 \u0647\u0633 \u0642\u062b-\u0642\u0639\u0631\u0631\u0647\u0631\u0644 \u0641\u0627\u062b \u0644\u0642\u0634\u064a\u062b \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 \u0645\u062b\u0634\u0642\u0631\u062b\u0642.",
"The cohort cannot be added": "\u0641\u0627\u062b \u0630\u062e\u0627\u062e\u0642\u0641 \u0630\u0634\u0631\u0631\u062e\u0641 \u0632\u062b \u0634\u064a\u064a\u062b\u064a",
"The cohort cannot be saved": "\u0641\u0627\u062b \u0630\u062e\u0627\u062e\u0642\u0641 \u0630\u0634\u0631\u0631\u062e\u0641 \u0632\u062b \u0633\u0634\u062f\u062b\u064a",
@@ -1586,6 +1587,7 @@
"This team does not have any members.": "\u0641\u0627\u0647\u0633 \u0641\u062b\u0634\u0648 \u064a\u062e\u062b\u0633 \u0631\u062e\u0641 \u0627\u0634\u062f\u062b \u0634\u0631\u063a \u0648\u062b\u0648\u0632\u062b\u0642\u0633.",
"This team is full.": "\u0641\u0627\u0647\u0633 \u0641\u062b\u0634\u0648 \u0647\u0633 \u0628\u0639\u0645\u0645.",
"This thread is closed.": "\u0641\u0627\u0647\u0633 \u0641\u0627\u0642\u062b\u0634\u064a \u0647\u0633 \u0630\u0645\u062e\u0633\u062b\u064a.",
+ "This unit has validation issues.": "\u0641\u0627\u0647\u0633 \u0639\u0631\u0647\u0641 \u0627\u0634\u0633 \u062f\u0634\u0645\u0647\u064a\u0634\u0641\u0647\u062e\u0631 \u0647\u0633\u0633\u0639\u062b\u0633.",
"This vote could not be processed. Refresh the page and try again.": "\u0641\u0627\u0647\u0633 \u062f\u062e\u0641\u062b \u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0632\u062b \u062d\u0642\u062e\u0630\u062b\u0633\u0633\u062b\u064a. \u0642\u062b\u0628\u0642\u062b\u0633\u0627 \u0641\u0627\u062b \u062d\u0634\u0644\u062b \u0634\u0631\u064a \u0641\u0642\u063a \u0634\u0644\u0634\u0647\u0631.",
"This {parentCategory} has no {childCategory}": "\u0641\u0627\u0647\u0633 {parentCategory} \u0627\u0634\u0633 \u0631\u062e {childCategory}",
"Thumbnail": "\u0641\u0627\u0639\u0648\u0632\u0631\u0634\u0647\u0645",
diff --git a/cms/static/js/i18n/ru/djangojs.js b/cms/static/js/i18n/ru/djangojs.js
index 7510f75b44..b5705051ef 100644
--- a/cms/static/js/i18n/ru/djangojs.js
+++ b/cms/static/js/i18n/ru/djangojs.js
@@ -131,15 +131,10 @@
"A valid email address is required": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042d\u042e\u042f",
"Abbreviation": "\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0430",
- "About Me": "\u041e\u0431\u043e \u043c\u043d\u0435",
"About You": "\u041e \u0432\u0430\u0441",
- "About me": "\u041e \u0441\u0435\u0431\u0435",
- "Accomplishments": "\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f",
- "Accomplishments Pagination": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0439",
"Account Information": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438",
"Account Not Activated": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430",
"Account Settings": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438",
- "Account Settings page.": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.",
"Action": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
"Action required: Enter a valid date.": "\u0422\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435: \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u0434\u0430\u0442\u0443",
"Actions": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f",
@@ -151,7 +146,6 @@
"Add Additional Signatory": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0432\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442",
"Add Cohort": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443",
"Add Component:": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442:",
- "Add Country": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0443",
"Add New Component": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442",
"Add URLs for additional versions": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438",
"Add a Chapter": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u043b\u0430\u0432\u0443",
@@ -161,7 +155,6 @@
"Add a learning outcome here": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u0434\u0435\u0441\u044c",
"Add a response:": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442:",
"Add another group": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443",
- "Add language": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044f\u0437\u044b\u043a",
"Add notes about this learner": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435",
"Add to Dictionary": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c",
"Add to Exception List": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439",
@@ -307,7 +300,6 @@
"Change Manually": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e",
"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}": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f {display_name}",
"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",
@@ -522,7 +514,6 @@
"Edit Membership": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432",
"Edit Team": "\u0412\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443",
"Edit Your Name": "\u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f",
- "Edit the name": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
"Edit this certificate?": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442?",
"Editable": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u043e",
"Editing comment": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f",
@@ -639,7 +630,6 @@
"Free text notes": "\u0417\u0430\u043c\u0435\u0442\u043a\u0438",
"Frequently Asked Questions": "\u0427\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b",
"Full Name": "\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f",
- "Full Profile": "\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c",
"Fullscreen": "\u0412\u043e \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d",
"Fully Supported": "\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f",
"Gender": "\u041f\u043e\u043b",
@@ -799,7 +789,6 @@
"License Display": "\u041f\u043e\u043a\u0430\u0437 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438",
"License Type": "\u0422\u0438\u043f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438",
"Limit Access": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f",
- "Limited Profile": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c",
"Link Description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438",
"Link Your Account": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0441\u0432\u043e\u044e \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c",
"Link types should be unique.": "\u0421\u0441\u044b\u043b\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439.",
@@ -1029,9 +1018,6 @@
"Professional Certificate for {courseName}": "\u0421\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 {courseName}",
"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": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c",
- "Profile Image": "\u0424\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f",
- "Profile image for {username}": "\u0424\u043e\u0442\u043e {username}",
"Promote another member to Admin to remove your admin rights": "\u041f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u043f\u0440\u0430\u0432\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430",
"Provisional": "\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f",
"Provisionally Supported": "\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f",
@@ -1271,7 +1257,6 @@
"Team name cannot have more than 255 characters.": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.",
"Teams": "\u041a\u043e\u043c\u0430\u043d\u0434\u044b",
"Teams Pagination": "\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e \u0441\u0435\u0431\u0435: \u0433\u0434\u0435 \u0432\u044b \u0436\u0438\u0432\u0451\u0442\u0435, \u0447\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0435\u0441\u044c, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0432\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u0435 \u043a\u0443\u0440\u0441\u044b \u0438 \u0447\u0435\u043c\u0443 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f.",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u044b",
"Text": "\u0422\u0435\u043a\u0441\u0442",
"Text color": "\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430",
@@ -1498,12 +1483,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "\u041f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \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. \u041c\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u0441\u043d\u0438\u043c\u043e\u043a \u0441\u043e \u0441\u043d\u0438\u043c\u043a\u043e\u043c \u0432\u0430\u0448\u0435\u0433\u043e \u043b\u0438\u0446\u0430 \u0438 \u0438\u043c\u0435\u043d\u0435\u043c \u0432 \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "\u041f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0441\u043d\u0438\u043c\u043e\u043a \u0441\u0432\u043e\u0435\u0433\u043e \u043b\u0438\u0446\u0430. \u041c\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u0441\u043d\u0438\u043c\u043e\u043a \u0441 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u0432 \u0432\u0430\u0448\u0435\u043c \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0438 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438.",
"Used": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e",
- "Used in {count} unit": [
- "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 {count} \u0431\u043b\u043e\u043a\u0435",
- "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 {count} \u0431\u043b\u043e\u043a\u0430\u0445",
- "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 {count} \u0431\u043b\u043e\u043a\u0430\u0445",
- "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 {count} \u0431\u043b\u043e\u043a\u0430\u0445"
- ],
"User": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c",
"User Email": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f",
"Username": "\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f",
@@ -1617,12 +1596,10 @@
"You haven't added any assets to this course yet.": "\u0412\u044b \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043a \u044d\u0442\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443.",
"You haven't added any content to this course yet.": "\u0412\u044b \u0435\u0449\u0451 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043a\u0443\u0440\u0441\u0430.",
"You haven't added any textbooks to this course yet.": "\u0412\u044b \u0435\u0449\u0451 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430 \u043a \u044d\u0442\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "\u0414\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 13 \u043b\u0435\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0442\u0430\u0440\u0448\u0435 13 \u043b\u0435\u0442, \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0433\u043e\u0434 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 {account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "\u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u0447\u043b\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441",
"You must sign out and sign back in before your language changes take effect.": "\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430 \u0432\u0441\u0442\u0443\u043f\u0438\u043b\u043e \u0432 \u0441\u0438\u043b\u0443, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0439\u0442\u0438 \u0438 \u0441\u043d\u043e\u0432\u0430 \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443.",
"You must specify a name": "\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f",
"You must specify a name for the cohort": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\u0414\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0433\u043e\u0434 \u0432\u0430\u0448\u0435\u0433\u043e \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 {account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "\u0412\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u043e\u0439. \u041a\u043e\u0433\u0434\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u043e\u0442\u043e, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b\u0438 \u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u0430\u043c\u0435\u0440\u0435.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "\u0412\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430, \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0432\u0430\u0448\u0435 \u0438\u043c\u044f \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "\u0412\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0441 \u0432\u0430\u0448\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439. \u041f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0432\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.",
@@ -1766,7 +1743,6 @@
"{numVotes} \u0433\u043e\u043b\u043e\u0441\u043e\u0432"
],
"{organization}\\'s logo": "\u043b\u043e\u0433\u043e\u0442\u0438\u043f {organization}",
- "{platform_name} learners can see my:": "\u0421\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0438 {platform_name} \u0432\u0438\u0434\u044f\u0442 \u043c\u043e\u0439:",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435:{screen_reader_end} \u043d\u0435\u0442 \u0433\u0440\u0443\u043f\u043f \u043f\u043e \u0438\u0437\u0443\u0447\u0430\u0435\u043c\u043e\u043c\u0443 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0443.",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435:{screen_reader_end} \u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e \u0438\u0437\u0443\u0447\u0430\u0435\u043c\u043e\u043c\u0443 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0443 \u0443\u0434\u0430\u043b\u0435\u043d\u0430. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443.",
"{totalItems} total": "{totalItems} \u0438\u0442\u043e\u0433",
diff --git a/cms/static/js/i18n/zh-cn/djangojs.js b/cms/static/js/i18n/zh-cn/djangojs.js
index 587528e2b3..5eaa9b66ff 100644
--- a/cms/static/js/i18n/zh-cn/djangojs.js
+++ b/cms/static/js/i18n/zh-cn/djangojs.js
@@ -83,26 +83,19 @@
"A name that identifies your team (maximum 255 characters).": "\u56e2\u961f\u540d\u79f0 (\u4e0d\u957f\u4e8e255\u4e2a\u5b57\u7b26)",
"A short description of the team to help other learners understand the goals or direction of the team (maximum 300 characters).": "\u7b80\u77ed\u7684\u56e2\u961f\u63cf\u8ff0\uff0c\u4ee5\u5e2e\u52a9\u5176\u4ed6\u5b66\u4e60\u8005\u4e86\u89e3\u6b64\u56e2\u961f\u7684\u76ee\u6807\u4e0e\u65b9\u5411 (\u6700\u5927\u4e3a300\u4e2a\u5b57\u7b26\u957f\u5ea6)",
"A valid email address is required": "\u9700\u8981\u4e00\u4e2a\u6709\u6548\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740",
- "About Me": "\u4e2a\u4eba\u8d44\u6599",
"About You": "\u5173\u4e8e\u60a8",
- "About me": "\u4e2a\u4eba\u7b80\u4ecb",
- "Accomplishments": "\u6210\u7ee9",
- "Accomplishments Pagination": "\u6210\u7ee9\u5206\u9875",
"Account Information": "\u5e10\u6237\u4fe1\u606f",
"Account Not Activated": "\u8d26\u6237\u672a\u6fc0\u6d3b",
"Account Settings": "\u8d26\u6237\u8bbe\u7f6e",
- "Account Settings page.": "\u8d26\u6237\u8bbe\u7f6e\u9875\u9762\u3002",
"Action": "\u64cd\u4f5c",
"Actions": "\u64cd\u4f5c",
"Activate Your Account": "\u6fc0\u6d3b\u4f60\u7684\u8d26\u6237",
"Activating a link in this group will skip to the corresponding point in the video.": "\u6fc0\u6d3b\u672c\u7ec4\u4e2d\u7684\u94fe\u63a5\u5c06\u8df3\u8f6c\u81f3\u89c6\u9891\u4e2d\u76f8\u5e94\u7684\u5730\u65b9\u3002",
"Add Cohort": "\u6dfb\u52a0\u7fa4\u7ec4",
- "Add Country": "\u6dfb\u52a0\u56fd\u5bb6",
"Add a New Cohort": "\u6dfb\u52a0\u65b0\u7fa4\u7ec4",
"Add a Response": "\u6dfb\u52a0\u56de\u590d",
"Add a comment": "\u6dfb\u52a0\u8bc4\u8bba",
"Add a response:": "\u6dfb\u52a0\u4e00\u6761\u56de\u590d\uff1a",
- "Add language": "\u6dfb\u52a0\u8bed\u8a00",
"Add notes about this learner": "\u6dfb\u52a0\u5173\u4e8e\u6b64\u5b66\u5458\u7684\u5907\u6ce8",
"Add to Dictionary": "\u52a0\u5165\u5230\u5b57\u5178",
"Add to Exception List": "\u6dfb\u52a0\u5230\u7279\u6b8a\u5904\u7406\u5217\u8868",
@@ -469,7 +462,6 @@
"Formats": "\u683c\u5f0f",
"Frequently Asked Questions": "\u5e38\u89c1\u95ee\u9898",
"Full Name": "\u5168\u540d",
- "Full Profile": "\u5168\u90e8\u8d44\u6599",
"Fullscreen": "\u5168\u5c4f",
"Gender": "\u6027\u522b",
"General": "\u4e00\u822c",
@@ -592,7 +584,6 @@
"Legal name": "\u6cd5\u5b9a\u59d3\u540d",
"Less": "\u6536\u8d77",
"Library User": "\u77e5\u8bc6\u5e93\u7528\u6237",
- "Limited Profile": "\u90e8\u5206\u8d44\u6599",
"Link Description": "\u94fe\u63a5\u7684\u63cf\u8ff0",
"Link Your Account": "\u5173\u8054\u60a8\u7684\u8d26\u6237",
"Link types should be unique.": "\u94fe\u63a5\u7c7b\u578b\u5e94\u5f53\u552f\u4e00\u3002",
@@ -760,9 +751,6 @@
"Professional Certificate for {courseName}": "{courseName} \u7684\u4e13\u4e1a\u8bc1\u4e66",
"Professional Education": "\u4e13\u4e1a\u6559\u80b2",
"Professional Education Verified Certificate": "\u4e13\u4e1a\u6559\u80b2\u8ba4\u8bc1\u8bc1\u4e66",
- "Profile": "\u7528\u6237\u8d44\u6599",
- "Profile Image": "\u8d44\u6599\u7167\u7247",
- "Profile image for {username}": "{username} \u7684\u5934\u50cf",
"Public": "\u516c\u5f00",
"Publish": "\u53d1\u5e03",
"Publishing": "\u6b63\u5728\u53d1\u5e03",
@@ -948,7 +936,6 @@
"Team name cannot have more than 255 characters.": "\u56e2\u961f\u540d\u79f0\u4e0d\u80fd\u8d85\u8fc7 255 \u4e2a\u5b57\u7b26",
"Teams": "\u56e2\u961f",
"Teams Pagination": "\u56e2\u961f\u5206\u9875",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\u5411\u5176\u4ed6\u7528\u6237\u7b80\u5355\u4ecb\u7ecd\u4e0b\u4f60\u81ea\u5df1\uff1a\u5982\u5c45\u4f4f\u5730\u3001\u5174\u8da3\u7231\u597d\u3001\u4e3a\u4ec0\u4e48\u9009\u62e9\u8fd9\u4e9b\u8bfe\u7a0b\uff0c\u53ca\u4f60\u5e0c\u671b\u5b66\u4e60\u54ea\u65b9\u9762\u7684\u77e5\u8bc6",
"Templates": "\u6a21\u677f",
"Text": "\u6587\u672c",
"Text color": "\u6587\u672c\u989c\u8272",
@@ -1190,12 +1177,10 @@
"You have not created any group configurations yet.": "\u60a8\u8fd8\u6ca1\u6709\u521b\u5efa\u4efb\u4f55\u7ec4\u914d\u7f6e\u3002",
"You have unsaved changes are you sure you want to navigate away?": "\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\u5417\uff1f",
"You have unsaved changes. Do you really want to leave this page?": "\u60a8\u5c1a\u6709\u672a\u4fdd\u5b58\u7684\u4fee\u6539\uff0c\u786e\u5b9a\u8981\u79bb\u6b64\u9875\u9762\u5417\uff1f",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "13\u5c81\u4ee5\u4e0a\u7684\u7528\u6237\u624d\u80fd\u5206\u4eab\u5b8c\u6574\u8d44\u6599\u3002\u5982\u679c\u60a8\u572813\u5c81\u4ee5\u4e0a\uff0c\u8bf7\u786e\u8ba4\u5df2\u5728 {account_settings_page_link} \u9875\u9762\u4e2d\u586b\u5199\u4e86\u51fa\u751f\u5e74\u4efd\u3002",
"You must enter a valid email address in order to add a new team member": "\u60a8\u5fc5\u987b\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u4ee5\u4fbf\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684\u56e2\u961f\u6210\u5458",
"You must sign out and sign back in before your language changes take effect.": "\u8bed\u8a00\u8bbe\u7f6e\u5c06\u5728\u60a8\u91cd\u65b0\u767b\u5f55\u540e\u751f\u6548",
"You must specify a name": "\u60a8\u5fc5\u987b\u6307\u5b9a\u4e00\u4e2a\u540d\u79f0",
"You must specify a name for the cohort": "\u60a8\u5fc5\u987b\u4e3a\u8be5\u7fa4\u7ec4\u547d\u540d\u3002",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\u60a8\u5fc5\u987b\u586b\u5199\u51fa\u751f\u5e74\u4efd\u624d\u80fd\u5206\u4eab\u5b8c\u6574\u8d44\u6599\u3002\u70b9\u51fb {account_settings_page_link} \u586b\u5199",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "\u60a8\u9700\u8981\u4e00\u4e2a\u5177\u6709\u6444\u50cf\u5934\u7684\u7535\u8111\u3002\u5f53\u60a8\u6536\u5230\u6d4f\u89c8\u5668\u5f39\u7a97\u65f6\uff0c\u786e\u4fdd\u5b83\u6709\u6743\u9650\u4f7f\u7528\u6444\u50cf\u5934\u3002",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "\u60a8\u9700\u8981\u9a7e\u7167\u3001\u62a4\u7167\u6216\u8005\u5176\u4ed6\u7531\u653f\u5e9c\u7b7e\u53d1\u7684\u5e26\u6709\u60a8\u59d3\u540d\u548c\u7167\u7247\u7684\u8eab\u4efd\u8bc1\u4ef6\u3002",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "\u60a8\u9700\u8981\u4e00\u4efd\u5e26\u6709\u60a8\u59d3\u540d\u548c\u7167\u7247\u7684\u8eab\u4efd\u8bc1\u4ef6\uff0c\u6211\u4eec\u53ef\u4ee5\u63a5\u53d7\u9a7e\u7167\u3001\u62a4\u7167\u4ee5\u53ca\u5176\u4ed6\u7531\u653f\u5e9c\u7b7e\u53d1\u7684\u8eab\u4efd\u8bc1\u4ef6\u3002",
@@ -1291,7 +1276,6 @@
"{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.": "{browse_span_start} \u7528\u5176\u4ed6\u6807\u9898\u6d4f\u89c8\u56e2\u961f {span_end} \u6216 {search_span_start} \u641c\u7d22\u56e2\u961f{span_end} \u65bc\u6b64\u6807\u9898\u3002 \u5982\u679c\u4f60\u4ecd\u7136\u65e0\u6cd5\u627e\u5230\u56e2\u961f\u6765\u52a0\u5165\uff0c {create_span_start} \u5728\u6b64\u6807\u9898\u65b0\u521b\u4e00\u4e2a\u56e2\u961f{span_end}\u3002",
"{email} is already on the {container} team. Recheck the email address if you want to add a new member.": "{email}\u5df2\u5728{container}\u56e2\u961f\u4e2d\u3002\u5982\u679c\u60a8\u60f3\u6dfb\u52a0\u65b0\u6210\u5458\uff0c\u8bf7\u518d\u6b21\u68c0\u67e5\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002",
"{organization}\\'s logo": "{organization}\\'s \u7684\u6807\u8bc6",
- "{platform_name} learners can see my:": "\u5bf9{platform_name}\u7528\u6237\u53ef\u89c1\uff1a",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}\u8b66\u544a\uff1a{screen_reader_end}\u4e0d\u5b58\u5728\u5185\u5bb9\u7ec4\u3002",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}\u8b66\u544a\uff1a{screen_reader_end}\u4e4b\u524d\u9009\u62e9\u7684\u5185\u5bb9\u7ec4\u5df2\u88ab\u5220\u9664\u3002\u8bf7\u9009\u62e9\u53e6\u4e00\u4e2a\u5185\u5bb9\u7ec4\u3002",
"\u2026": "\u2026"
diff --git a/cms/static/js/index.js b/cms/static/js/index.js
index ae88a24dcc..70def59cad 100644
--- a/cms/static/js/index.js
+++ b/cms/static/js/index.js
@@ -161,6 +161,7 @@ define(['domReady', 'jquery', 'underscore', 'js/utils/cancel_on_escape', 'js/vie
return function(e) {
e.preventDefault();
$('.courses-tab').toggleClass('active', tab === 'courses');
+ $('.archived-courses-tab').toggleClass('active', tab === 'archived-courses');
$('.libraries-tab').toggleClass('active', tab === 'libraries');
// Also toggle this course-related notice shown below the course tab, if it is present:
@@ -179,6 +180,7 @@ define(['domReady', 'jquery', 'underscore', 'js/utils/cancel_on_escape', 'js/vie
$('.action-reload').bind('click', ViewUtils.reload);
$('#course-index-tabs .courses-tab').bind('click', showTab('courses'));
+ $('#course-index-tabs .archived-courses-tab').bind('click', showTab('archived-courses'));
$('#course-index-tabs .libraries-tab').bind('click', showTab('libraries'));
};
diff --git a/cms/static/js/models/settings/course_details.js b/cms/static/js/models/settings/course_details.js
index 683200d7d6..6e1cb6e296 100644
--- a/cms/static/js/models/settings/course_details.js
+++ b/cms/static/js/models/settings/course_details.js
@@ -8,6 +8,7 @@ define(['backbone', 'underscore', 'gettext', 'js/models/validation_helpers', 'js
language: '',
start_date: null, // maps to 'start'
end_date: null, // maps to 'end'
+ certificate_available_date: null,
enrollment_start: null,
enrollment_end: null,
syllabus: null,
@@ -38,7 +39,7 @@ define(['backbone', 'underscore', 'gettext', 'js/models/validation_helpers', 'js
// A bit funny in that the video key validation is asynchronous; so, it won't stop the validation.
var errors = {};
newattrs = DateUtils.convertDateStringsToObjects(
- newattrs, ['start_date', 'end_date', 'enrollment_start', 'enrollment_end']
+ newattrs, ['start_date', 'end_date', 'certificate_available_date', 'enrollment_start', 'enrollment_end']
);
if (newattrs.start_date === null) {
diff --git a/cms/static/js/spec/views/settings/main_spec.js b/cms/static/js/spec/views/settings/main_spec.js
index 4fbebcc84d..e33e845465 100644
--- a/cms/static/js/spec/views/settings/main_spec.js
+++ b/cms/static/js/spec/views/settings/main_spec.js
@@ -21,6 +21,7 @@ define([
end_date: '2014-11-05T20:00:00Z',
enrollment_start: '2014-10-00T00:00:00Z',
enrollment_end: '2014-11-05T00:00:00Z',
+ certificate_available_date: '2014-11-05T20:00:00Z',
org: '',
course_id: '',
run: '',
diff --git a/cms/static/js/views/settings/main.js b/cms/static/js/views/settings/main.js
index 8125c0a936..0b9204a8e1 100644
--- a/cms/static/js/views/settings/main.js
+++ b/cms/static/js/views/settings/main.js
@@ -79,6 +79,7 @@ define(['js/views/validation', 'codemirror', 'underscore', 'jquery', 'jquery.ui'
DateUtils.setupDatePicker('start_date', this);
DateUtils.setupDatePicker('end_date', this);
+ DateUtils.setupDatePicker('certificate_available_date', this);
DateUtils.setupDatePicker('enrollment_start', this);
DateUtils.setupDatePicker('enrollment_end', this);
@@ -154,29 +155,30 @@ define(['js/views/validation', 'codemirror', 'underscore', 'jquery', 'jquery.ui'
return this;
},
fieldToSelectorMap: {
- 'language': 'course-language',
- 'start_date': 'course-start',
- 'end_date': 'course-end',
- 'enrollment_start': 'enrollment-start',
- 'enrollment_end': 'enrollment-end',
- 'overview': 'course-overview',
- 'title': 'course-title',
- 'subtitle': 'course-subtitle',
- 'duration': 'course-duration',
- 'description': 'course-description',
- 'short_description': 'course-short-description',
- 'intro_video': 'course-introduction-video',
- 'effort': 'course-effort',
- 'course_image_asset_path': 'course-image-url',
- 'banner_image_asset_path': 'banner-image-url',
- 'video_thumbnail_image_asset_path': 'video-thumbnail-image-url',
- 'pre_requisite_courses': 'pre-requisite-course',
- 'entrance_exam_enabled': 'entrance-exam-enabled',
- 'entrance_exam_minimum_score_pct': 'entrance-exam-minimum-score-pct',
- 'course_settings_learning_fields': 'course-settings-learning-fields',
- 'add_course_learning_info': 'add-course-learning-info',
- 'add_course_instructor_info': 'add-course-instructor-info',
- 'course_learning_info': 'course-learning-info'
+ language: 'course-language',
+ start_date: 'course-start',
+ end_date: 'course-end',
+ enrollment_start: 'enrollment-start',
+ enrollment_end: 'enrollment-end',
+ certificate_available_date: 'certificate-available',
+ overview: 'course-overview',
+ title: 'course-title',
+ subtitle: 'course-subtitle',
+ duration: 'course-duration',
+ description: 'course-description',
+ short_description: 'course-short-description',
+ intro_video: 'course-introduction-video',
+ effort: 'course-effort',
+ course_image_asset_path: 'course-image-url',
+ banner_image_asset_path: 'banner-image-url',
+ video_thumbnail_image_asset_path: 'video-thumbnail-image-url',
+ pre_requisite_courses: 'pre-requisite-course',
+ entrance_exam_enabled: 'entrance-exam-enabled',
+ entrance_exam_minimum_score_pct: 'entrance-exam-minimum-score-pct',
+ course_settings_learning_fields: 'course-settings-learning-fields',
+ add_course_learning_info: 'add-course-learning-info',
+ add_course_instructor_info: 'add-course-instructor-info',
+ course_learning_info: 'course-learning-info'
},
addLearningFields: function() {
diff --git a/cms/static/sass/views/_dashboard.scss b/cms/static/sass/views/_dashboard.scss
index c5c9372fe1..af144c0d75 100644
--- a/cms/static/sass/views/_dashboard.scss
+++ b/cms/static/sass/views/_dashboard.scss
@@ -318,7 +318,7 @@
}
// ELEM: course listings
- .courses-tab, .libraries-tab {
+ .courses-tab, .archived-courses-tab, .libraries-tab {
display: none;
&.active {
@@ -326,7 +326,7 @@
}
}
- .courses, .libraries {
+ .courses, .libraries, .archived-courses {
.title {
@extend %t-title6;
margin-bottom: $baseline;
@@ -342,7 +342,7 @@
padding-bottom: ($baseline/2);
color: $gray-l2;
}
- }
+ }
.list-courses {
border-radius: 3px;
diff --git a/cms/templates/index.html b/cms/templates/index.html
index 9a226aced3..e19078b656 100644
--- a/cms/templates/index.html
+++ b/cms/templates/index.html
@@ -308,10 +308,15 @@ from openedx.core.djangolib.markup import HTML, Text
%endif
- % if libraries_enabled:
+ % if libraries_enabled or archived_courses:
diff --git a/cms/templates/settings.html b/cms/templates/settings.html
index 2a5c51b887..420b6975f8 100644
--- a/cms/templates/settings.html
+++ b/cms/templates/settings.html
@@ -9,6 +9,7 @@
import urllib
from django.utils.translation import ugettext as _
from contentstore import utils
+ from openedx.core.djangoapps.certificates.config import waffle
from openedx.core.djangolib.js_utils import (
dump_js_escaped_json, js_escaped_string
)
@@ -213,6 +214,18 @@ CMS.URL.UPLOAD_ASSET = '${upload_asset_url | n, js_escaped_string}'
+ % if waffle.waffle().is_enabled(waffle.INSTRUCTOR_PACED_ONLY):
+
+
+
+
+
+ ${_("By default, 48 hours after course end date")}
+
+
+
+ % endif
+
diff --git a/cms/urls.py b/cms/urls.py
index 03184d8f21..b804a13620 100644
--- a/cms/urls.py
+++ b/cms/urls.py
@@ -1,17 +1,19 @@
from django.conf import settings
from django.conf.urls import include, patterns, url
from django.conf.urls.static import static
-# There is a course creators admin table.
+from django.contrib.admin import autodiscover as django_autodiscover
from ratelimitbackend import admin
from cms.djangoapps.contentstore.views.organization import OrganizationListView
-admin.autodiscover()
+
+django_autodiscover()
# Pattern to match a course key or a library key
COURSELIKE_KEY_PATTERN = r'(?P({}|{}))'.format(
r'[^/]+/[^/]+/[^/]+', r'[^/:]+:[^/+]+\+[^/+]+(\+[^/]+)?'
)
+
# Pattern to match a library key only
LIBRARY_KEY_PATTERN = r'(?Plibrary-v1:[^/+]+\+[^/+]+)'
diff --git a/common/djangoapps/course_modes/models.py b/common/djangoapps/course_modes/models.py
index 55c62c177e..ab39532e5c 100644
--- a/common/djangoapps/course_modes/models.py
+++ b/common/djangoapps/course_modes/models.py
@@ -12,6 +12,7 @@ from django.db import models
from django.db.models import Q
from django.dispatch import receiver
from django.utils.translation import ugettext_lazy as _
+from django.utils.encoding import force_text
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField
from request_cache.middleware import RequestCache, ns_request_cached
@@ -133,6 +134,8 @@ class CourseMode(models.Model):
)
DEFAULT_MODE_SLUG = settings.COURSE_MODE_DEFAULTS['slug']
+ ALL_MODES = [AUDIT, CREDIT_MODE, HONOR, NO_ID_PROFESSIONAL_MODE, PROFESSIONAL, VERIFIED, ]
+
# Modes utilized for audit/free enrollments
AUDIT_MODES = [AUDIT, HONOR]
@@ -488,6 +491,16 @@ class CourseMode(models.Model):
"""
return slug in [cls.PROFESSIONAL, cls.NO_ID_PROFESSIONAL_MODE]
+ @classmethod
+ def is_mode_upgradeable(cls, mode_slug):
+ """
+ Returns True if the given mode can be upgraded to another.
+
+ Note: Although, in practice, learners "upgrade" from verified to credit,
+ that particular upgrade path is excluded by this method.
+ """
+ return mode_slug in cls.AUDIT_MODES
+
@classmethod
def is_verified_mode(cls, course_mode_tuple):
"""Check whether the given modes is_verified or not.
@@ -693,6 +706,59 @@ def invalidate_course_mode_cache(sender, **kwargs): # pylint: disable=unused-a
RequestCache.clear_request_cache(name=CourseMode.CACHE_NAMESPACE)
+def get_cosmetic_verified_display_price(course):
+ """
+ Returns the minimum verified cert course price as a string preceded by correct currency, or 'Free'.
+ """
+ return get_course_prices(course, verified_only=True)[1]
+
+
+def get_cosmetic_display_price(course):
+ """
+ Returns the course price as a string preceded by correct currency, or 'Free'.
+ """
+ return get_course_prices(course)[1]
+
+
+def get_course_prices(course, verified_only=False):
+ """
+ Return registration_price and cosmetic_display_prices.
+ registration_price is the minimum price for the course across all course modes.
+ cosmetic_display_prices is the course price as a string preceded by correct currency, or 'Free'.
+ """
+ # Find the
+ if verified_only:
+ registration_price = CourseMode.min_course_price_for_verified_for_currency(
+ course.id,
+ settings.PAID_COURSE_REGISTRATION_CURRENCY[0]
+ )
+ else:
+ registration_price = CourseMode.min_course_price_for_currency(
+ course.id,
+ settings.PAID_COURSE_REGISTRATION_CURRENCY[0]
+ )
+
+ currency_symbol = settings.PAID_COURSE_REGISTRATION_CURRENCY[1]
+
+ if registration_price > 0:
+ price = registration_price
+ # Handle course overview objects which have no cosmetic_display_price
+ elif hasattr(course, 'cosmetic_display_price'):
+ price = course.cosmetic_display_price
+ else:
+ price = None
+
+ if price:
+ # Translators: This will look like '$50', where {currency_symbol} is a symbol such as '$' and {price} is a
+ # numerical amount in that currency. Adjust this display as needed for your language.
+ cosmetic_display_price = _("{currency_symbol}{price}").format(currency_symbol=currency_symbol, price=price)
+ else:
+ # Translators: This refers to the cost of the course. In this case, the course costs nothing so it is free.
+ cosmetic_display_price = _('Free')
+
+ return registration_price, force_text(cosmetic_display_price)
+
+
class CourseModesArchive(models.Model):
"""
Store the past values of course_mode that a course had in the past. We decided on having
diff --git a/common/djangoapps/course_modes/tests/factories.py b/common/djangoapps/course_modes/tests/factories.py
index 3f3d876997..f170059adb 100644
--- a/common/djangoapps/course_modes/tests/factories.py
+++ b/common/djangoapps/course_modes/tests/factories.py
@@ -5,7 +5,7 @@ import random
from factory import lazy_attribute
from factory.django import DjangoModelFactory
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from course_modes.models import CourseMode
@@ -16,7 +16,7 @@ class CourseModeFactory(DjangoModelFactory):
class Meta(object):
model = CourseMode
- course_id = SlashSeparatedCourseKey('MITx', '999', 'Robot_Super_Course')
+ course_id = CourseLocator('MITx', '999', 'Robot_Super_Course')
mode_slug = 'audit'
currency = 'usd'
expiration_datetime = None
diff --git a/common/djangoapps/course_modes/tests/test_models.py b/common/djangoapps/course_modes/tests/test_models.py
index fc5bb8987f..90dab57cae 100644
--- a/common/djangoapps/course_modes/tests/test_models.py
+++ b/common/djangoapps/course_modes/tests/test_models.py
@@ -11,13 +11,17 @@ from datetime import datetime, timedelta
import ddt
import pytz
from django.core.exceptions import ValidationError
-from django.test import TestCase
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from django.test import TestCase, override_settings
+from mock import patch
from opaque_keys.edx.locator import CourseLocator
from course_modes.helpers import enrollment_mode_display
-from course_modes.models import CourseMode, Mode, invalidate_course_mode_cache
+from course_modes.models import CourseMode, Mode, invalidate_course_mode_cache, get_cosmetic_display_price
from course_modes.tests.factories import CourseModeFactory
+from xmodule.modulestore.tests.factories import CourseFactory
+from xmodule.modulestore.tests.django_utils import (
+ ModuleStoreTestCase,
+)
@ddt.ddt
@@ -28,7 +32,7 @@ class CourseModeModelTest(TestCase):
def setUp(self):
super(CourseModeModelTest, self).setUp()
- self.course_key = SlashSeparatedCourseKey('Test', 'TestCourse', 'TestCourseRun')
+ self.course_key = CourseLocator('Test', 'TestCourse', 'TestCourseRun')
CourseMode.objects.all().delete()
def tearDown(self):
@@ -151,7 +155,7 @@ class CourseModeModelTest(TestCase):
modes = CourseMode.modes_for_course(self.course_key)
self.assertEqual([expired_mode_value, mode1], modes)
- modes = CourseMode.modes_for_course(SlashSeparatedCourseKey('TestOrg', 'TestCourse', 'TestRun'))
+ modes = CourseMode.modes_for_course(CourseLocator('TestOrg', 'TestCourse', 'TestRun'))
self.assertEqual([CourseMode.DEFAULT_MODE], modes)
def test_verified_mode_for_course(self):
@@ -474,3 +478,26 @@ class CourseModeModelTest(TestCase):
self.assertTrue(is_error_expected, "Did not expect a ValidationError to be thrown.")
else:
self.assertFalse(is_error_expected, "Expected a ValidationError to be thrown.")
+
+
+class TestDisplayPrices(ModuleStoreTestCase):
+ @override_settings(PAID_COURSE_REGISTRATION_CURRENCY=["USD", "$"])
+ def test_get_cosmetic_display_price(self):
+ """
+ Check that get_cosmetic_display_price() returns the correct price given its inputs.
+ """
+ course = CourseFactory.create()
+ registration_price = 99
+ course.cosmetic_display_price = 10
+ with patch('course_modes.models.CourseMode.min_course_price_for_currency', return_value=registration_price):
+ # Since registration_price is set, it overrides the cosmetic_display_price and should be returned
+ self.assertEqual(get_cosmetic_display_price(course), "$99")
+
+ registration_price = 0
+ with patch('course_modes.models.CourseMode.min_course_price_for_currency', return_value=registration_price):
+ # Since registration_price is not set, cosmetic_display_price should be returned
+ self.assertEqual(get_cosmetic_display_price(course), "$10")
+
+ course.cosmetic_display_price = 0
+ # Since both prices are not set, there is no price, thus "Free"
+ self.assertEqual(get_cosmetic_display_price(course), "Free")
diff --git a/common/djangoapps/course_modes/views.py b/common/djangoapps/course_modes/views.py
index f034b060fc..86f7db25ca 100644
--- a/common/djangoapps/course_modes/views.py
+++ b/common/djangoapps/course_modes/views.py
@@ -23,6 +23,7 @@ from course_modes.models import CourseMode
from courseware.access import has_access
from edxmako.shortcuts import render_to_response
from lms.djangoapps.commerce.utils import EcommerceService
+from lms.djangoapps.experiments.utils import get_experiment_user_metadata_context
from openedx.core.djangoapps.embargo import api as embargo_api
from openedx.features.enterprise_support import api as enterprise_api
from student.models import CourseEnrollment
@@ -151,6 +152,13 @@ class ChooseModeView(View):
"responsive": True,
"nav_hidden": True,
}
+ context.update(
+ get_experiment_user_metadata_context(
+ request,
+ course,
+ request.user,
+ )
+ )
title_content = _("Congratulations! You are now enrolled in {course_name}").format(
course_name=course.display_name_with_default_escaped
diff --git a/common/djangoapps/static_replace/test/test_static_replace.py b/common/djangoapps/static_replace/test/test_static_replace.py
index 0e8443c815..7c259fed36 100644
--- a/common/djangoapps/static_replace/test/test_static_replace.py
+++ b/common/djangoapps/static_replace/test/test_static_replace.py
@@ -10,7 +10,7 @@ from django.test import override_settings
from django.utils.http import urlencode, urlquote
from mock import Mock, patch
from nose.tools import assert_equals, assert_false, assert_true # pylint: disable=no-name-in-module
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from PIL import Image
from static_replace import (
@@ -32,7 +32,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, check_mongo_calls
from xmodule.modulestore.xml import XMLModuleStore
DATA_DIRECTORY = 'data_dir'
-COURSE_KEY = SlashSeparatedCourseKey('org', 'course', 'run')
+COURSE_KEY = CourseKey.from_string('org/course/run')
STATIC_SOURCE = '"/static/file.png"'
diff --git a/common/djangoapps/student/admin.py b/common/djangoapps/student/admin.py
index abc62219f5..561121c8e2 100644
--- a/common/djangoapps/student/admin.py
+++ b/common/djangoapps/student/admin.py
@@ -1,13 +1,13 @@
""" Django admin pages for student app """
from config_models.admin import ConfigurationModelAdmin
from django import forms
+from django.contrib import admin
from django.contrib.admin.sites import NotRegistered
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.utils.translation import ugettext_lazy as _
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey
-from ratelimitbackend import admin
from student.models import (
CourseAccessRole,
diff --git a/common/djangoapps/student/forms.py b/common/djangoapps/student/forms.py
index 0bc46f80cb..92d17ffa74 100644
--- a/common/djangoapps/student/forms.py
+++ b/common/djangoapps/student/forms.py
@@ -23,18 +23,6 @@ from student.models import CourseEnrollmentAllowed
from util.password_policy_validators import validate_password_strength
-USERNAME_TOO_SHORT_MSG = _("Username must be minimum of two characters long")
-USERNAME_TOO_LONG_MSG = _("Username cannot be more than %(limit_value)s characters long")
-
-# Translators: This message is shown when the Unicode usernames are NOT allowed
-USERNAME_INVALID_CHARS_ASCII = _("Usernames can only contain Roman letters, western numerals (0-9), "
- "underscores (_), and hyphens (-).")
-
-# Translators: This message is shown only when the Unicode usernames are allowed
-USERNAME_INVALID_CHARS_UNICODE = _("Usernames can only contain letters, numerals, underscore (_), numbers "
- "and @/./+/-/_ characters.")
-
-
class PasswordResetFormNoActive(PasswordResetForm):
error_messages = {
'unknown': _("That e-mail address doesn't have an associated "
@@ -61,7 +49,6 @@ class PasswordResetFormNoActive(PasswordResetForm):
def save(
self,
- domain_override=None,
subject_template_name='emails/password_reset_subject.txt',
email_template_name='registration/password_reset_email.html',
use_https=False,
@@ -77,13 +64,10 @@ class PasswordResetFormNoActive(PasswordResetForm):
# django.contrib.auth.forms.PasswordResetForm directly, which has this import in this place.
from django.core.mail import send_mail
for user in self.users_cache:
- if not domain_override:
- site_name = configuration_helpers.get_value(
- 'SITE_NAME',
- settings.SITE_NAME
- )
- else:
- site_name = domain_override
+ site_name = configuration_helpers.get_value(
+ 'SITE_NAME',
+ settings.SITE_NAME
+ )
context = {
'email': user.email,
'site_name': site_name,
@@ -127,12 +111,12 @@ def validate_username(username):
username_re = slug_re
flags = None
- message = USERNAME_INVALID_CHARS_ASCII
+ message = accounts_settings.USERNAME_INVALID_CHARS_ASCII
if settings.FEATURES.get("ENABLE_UNICODE_USERNAME"):
username_re = r"^{regex}$".format(regex=settings.USERNAME_REGEX_PARTIAL)
flags = re.UNICODE
- message = USERNAME_INVALID_CHARS_UNICODE
+ message = accounts_settings.USERNAME_INVALID_CHARS_UNICODE
validator = RegexValidator(
regex=username_re,
@@ -156,9 +140,9 @@ class UsernameField(forms.CharField):
min_length=accounts_settings.USERNAME_MIN_LENGTH,
max_length=accounts_settings.USERNAME_MAX_LENGTH,
error_messages={
- "required": USERNAME_TOO_SHORT_MSG,
- "min_length": USERNAME_TOO_SHORT_MSG,
- "max_length": USERNAME_TOO_LONG_MSG,
+ "required": accounts_settings.USERNAME_BAD_LENGTH_MSG,
+ "min_length": accounts_settings.USERNAME_BAD_LENGTH_MSG,
+ "max_length": accounts_settings.USERNAME_BAD_LENGTH_MSG,
}
)
diff --git a/common/djangoapps/student/models.py b/common/djangoapps/student/models.py
index 96d325d1a7..f6b4452ec8 100644
--- a/common/djangoapps/student/models.py
+++ b/common/djangoapps/student/models.py
@@ -13,7 +13,6 @@ file and check it in at the same time as your model changes. To do that,
import hashlib
import json
import logging
-from slumber.exceptions import HttpClientError
import uuid
from collections import OrderedDict, defaultdict, namedtuple
from datetime import datetime, timedelta
@@ -37,11 +36,14 @@ from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext_noop
from django_countries.fields import CountryField
+from edx_rest_api_client.exceptions import SlumberBaseException
+from eventtracking import tracker
from model_utils.models import TimeStampedModel
from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from pytz import UTC
from simple_history.models import HistoricalRecords
+from slumber.exceptions import HttpClientError, HttpServerError
import dogstats_wrapper as dog_stats_api
import lms.lib.comment_client as cc
@@ -49,7 +51,6 @@ import request_cache
from certificates.models import GeneratedCertificate
from course_modes.models import CourseMode
from enrollment.api import _default_course_mode
-from eventtracking import tracker
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField, NoneToEmptyManager
@@ -60,6 +61,7 @@ from util.query import use_read_replica_if_available
UNENROLL_DONE = Signal(providing_args=["course_enrollment", "skip_refund"])
ENROLL_STATUS_CHANGE = Signal(providing_args=["event", "user", "course_id", "mode", "cost", "currency"])
+REFUND_ORDER = Signal(providing_args=["course_enrollment"])
log = logging.getLogger(__name__)
AUDIT_LOG = logging.getLogger("audit")
SessionStore = import_module(settings.SESSION_ENGINE).SessionStore # pylint: disable=invalid-name
@@ -1623,11 +1625,23 @@ class CourseEnrollment(models.Model):
order_number = attribute.value
try:
order = ecommerce_api_client(self.user).orders(order_number).get()
+
except HttpClientError:
log.warning(
u"Encountered HttpClientError while getting order details from ecommerce. "
u"Order={number} and user {user}".format(number=order_number, user=self.user.id))
+ return None
+ except HttpServerError:
+ log.warning(
+ u"Encountered HttpServerError while getting order details from ecommerce. "
+ u"Order={number} and user {user}".format(number=order_number, user=self.user.id))
+ return None
+
+ except SlumberBaseException:
+ log.warning(
+ u"Encountered an error while getting order details from ecommerce. "
+ u"Order={number} and user {user}".format(number=order_number, user=self.user.id))
return None
refund_window_start_date = max(
@@ -1664,6 +1678,55 @@ class CourseEnrollment(models.Model):
self._course_overview = None
return self._course_overview
+ @property
+ def upgrade_deadline(self):
+ """
+ Returns the upgrade deadline for this enrollment, if it is upgradeable.
+
+ If the seat cannot be upgraded, None is returned.
+
+ Note:
+ When loading this model, use `select_related` to retrieve the associated schedule object.
+
+ Returns:
+ datetime|None
+ """
+ log.debug('Schedules: Determining upgrade deadline for CourseEnrollment %d...', self.id)
+ if not CourseMode.is_mode_upgradeable(self.mode):
+ log.debug(
+ 'Schedules: %s mode of %s is not upgradeable. Returning None for upgrade deadline.',
+ self.mode, self.course_id
+ )
+ return None
+
+ try:
+ if self.schedule:
+ log.debug(
+ 'Schedules: Pulling upgrade deadline for CourseEnrollment %d from Schedule %d.',
+ self.id, self.schedule.id
+ )
+ return self.schedule.upgrade_deadline
+ except ObjectDoesNotExist:
+ # NOTE: Schedule has a one-to-one mapping with CourseEnrollment. If no schedule is associated
+ # with this enrollment, Django will raise an exception rather than return None.
+ log.debug('Schedules: No schedule exists for CourseEnrollment %d.', self.id)
+ pass
+
+ try:
+ verified_mode = CourseMode.verified_mode_for_course(self.course_id)
+
+ if verified_mode:
+ log.debug('Schedules: Defaulting to verified mode expiration date-time for %s.', self.course_id)
+ return verified_mode.expiration_datetime
+ else:
+ log.debug('Schedules: No verified mode located for %s.', self.course_id)
+ except CourseMode.DoesNotExist:
+ log.debug('Schedules: %s has no verified mode.', self.course_id)
+ pass
+
+ log.debug('Schedules: Returning default of `None`')
+ return None
+
def is_verified_enrollment(self):
"""
Check the course enrollment mode is verified or not
diff --git a/common/djangoapps/student/tests/factories.py b/common/djangoapps/student/tests/factories.py
index e5c39de629..44bf74b9d2 100644
--- a/common/djangoapps/student/tests/factories.py
+++ b/common/djangoapps/student/tests/factories.py
@@ -8,7 +8,7 @@ from django.contrib.auth.models import AnonymousUser, Group, Permission
from django.contrib.contenttypes.models import ContentType
from factory import lazy_attribute
from factory.django import DjangoModelFactory
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from pytz import UTC
from course_modes.models import CourseMode
@@ -144,7 +144,7 @@ class CourseEnrollmentFactory(DjangoModelFactory):
model = CourseEnrollment
user = factory.SubFactory(UserFactory)
- course_id = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ course_id = CourseKey.from_string('edX/toy/2012_Fall')
class CourseAccessRoleFactory(DjangoModelFactory):
@@ -152,7 +152,7 @@ class CourseAccessRoleFactory(DjangoModelFactory):
model = CourseAccessRole
user = factory.SubFactory(UserFactory)
- course_id = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ course_id = CourseKey.from_string('edX/toy/2012_Fall')
role = 'TestRole'
@@ -161,7 +161,7 @@ class CourseEnrollmentAllowedFactory(DjangoModelFactory):
model = CourseEnrollmentAllowed
email = 'test@edx.org'
- course_id = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ course_id = CourseKey.from_string('edX/toy/2012_Fall')
class PendingEmailChangeFactory(DjangoModelFactory):
diff --git a/common/djangoapps/student/tests/test_authz.py b/common/djangoapps/student/tests/test_authz.py
index 51b9282120..2395d58e07 100644
--- a/common/djangoapps/student/tests/test_authz.py
+++ b/common/djangoapps/student/tests/test_authz.py
@@ -6,7 +6,7 @@ from ccx_keys.locator import CCXLocator
from django.contrib.auth.models import AnonymousUser, User
from django.core.exceptions import PermissionDenied
from django.test import TestCase
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from student.auth import add_users, has_studio_read_access, has_studio_write_access, remove_users, user_has_role
from student.roles import CourseCreatorRole, CourseInstructorRole, CourseStaffRole
@@ -182,7 +182,7 @@ class CourseGroupTest(TestCase):
self.global_admin = AdminFactory()
self.creator = User.objects.create_user('testcreator', 'testcreator+courses@edx.org', 'foo')
self.staff = User.objects.create_user('teststaff', 'teststaff+courses@edx.org', 'foo')
- self.course_key = SlashSeparatedCourseKey('mitX', '101', 'test')
+ self.course_key = CourseLocator('mitX', '101', 'test')
def test_add_user_to_course_group(self):
"""
diff --git a/common/djangoapps/student/tests/test_bulk_email_settings.py b/common/djangoapps/student/tests/test_bulk_email_settings.py
index ede3d3f4bc..7add268a20 100644
--- a/common/djangoapps/student/tests/test_bulk_email_settings.py
+++ b/common/djangoapps/student/tests/test_bulk_email_settings.py
@@ -8,7 +8,7 @@ import unittest
from django.conf import settings
from django.core.urlresolvers import reverse
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
# This import is for an lms djangoapp.
# Its testcases are only run under lms.
@@ -101,7 +101,7 @@ class TestStudentDashboardEmailViewXMLBacked(SharedModuleStoreTestCase):
student = UserFactory.create()
CourseEnrollmentFactory.create(
user=student,
- course_id=SlashSeparatedCourseKey.from_deprecated_string(self.course_name)
+ course_id=CourseKey.from_string(self.course_name)
)
self.client.login(username=student.username, password="test")
diff --git a/common/djangoapps/student/tests/test_create_account.py b/common/djangoapps/student/tests/test_create_account.py
index 7eb9b55772..da11e8e1a6 100644
--- a/common/djangoapps/student/tests/test_create_account.py
+++ b/common/djangoapps/student/tests/test_create_account.py
@@ -22,8 +22,10 @@ from notification_prefs import NOTIFICATION_PREF_KEY
from openedx.core.djangoapps.external_auth.models import ExternalAuthMap
from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin
+from openedx.core.djangoapps.user_api.accounts import (
+ USERNAME_BAD_LENGTH_MSG, USERNAME_INVALID_CHARS_ASCII, USERNAME_INVALID_CHARS_UNICODE
+)
from openedx.core.djangoapps.user_api.preferences.api import get_user_preference
-from student.forms import USERNAME_INVALID_CHARS_ASCII, USERNAME_INVALID_CHARS_UNICODE
from student.models import UserAttribute
from student.views import REGISTRATION_AFFILIATE_ID, REGISTRATION_UTM_CREATED_AT, REGISTRATION_UTM_PARAMETERS
@@ -476,16 +478,16 @@ class TestCreateAccountValidation(TestCase):
# Missing
del params["username"]
- assert_username_error("Username must be minimum of two characters long")
+ assert_username_error(USERNAME_BAD_LENGTH_MSG)
# Empty, too short
for username in ["", "a"]:
params["username"] = username
- assert_username_error("Username must be minimum of two characters long")
+ assert_username_error(USERNAME_BAD_LENGTH_MSG)
# Too long
params["username"] = "this_username_has_31_characters"
- assert_username_error("Username cannot be more than 30 characters long")
+ assert_username_error(USERNAME_BAD_LENGTH_MSG)
# Invalid
params["username"] = "invalid username"
diff --git a/common/djangoapps/student/tests/test_long_username_email.py b/common/djangoapps/student/tests/test_long_username_email.py
index b1e15adbbf..f949440ba2 100644
--- a/common/djangoapps/student/tests/test_long_username_email.py
+++ b/common/djangoapps/student/tests/test_long_username_email.py
@@ -5,6 +5,8 @@ import json
from django.core.urlresolvers import reverse
from django.test import TestCase
+from openedx.core.djangoapps.user_api.accounts import USERNAME_BAD_LENGTH_MSG
+
class TestLongUsernameEmail(TestCase):
@@ -34,7 +36,7 @@ class TestLongUsernameEmail(TestCase):
obj = json.loads(response.content)
self.assertEqual(
obj['value'],
- "Username cannot be more than 30 characters long",
+ USERNAME_BAD_LENGTH_MSG,
)
def test_long_email(self):
diff --git a/common/djangoapps/student/tests/test_models.py b/common/djangoapps/student/tests/test_models.py
index 4f1f3421cc..ad8d68d071 100644
--- a/common/djangoapps/student/tests/test_models.py
+++ b/common/djangoapps/student/tests/test_models.py
@@ -1,17 +1,27 @@
# pylint: disable=missing-docstring
+import datetime
import hashlib
+import ddt
+import factory
+import pytz
from django.contrib.auth.models import AnonymousUser
from django.core.cache import cache
+from django.db.models import signals
from django.db.models.functions import Lower
+from course_modes.models import CourseMode
+from openedx.core.djangoapps.schedules.models import Schedule
+from openedx.core.djangoapps.schedules.tests.factories import ScheduleFactory
+from openedx.core.djangolib.testing.utils import skip_unless_lms
from student.models import CourseEnrollment
-from student.tests.factories import CourseEnrollmentFactory, UserFactory
+from student.tests.factories import CourseEnrollmentFactory, UserFactory, CourseModeFactory
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
from xmodule.modulestore.tests.factories import CourseFactory
+@ddt.ddt
class CourseEnrollmentTests(SharedModuleStoreTestCase):
@classmethod
def setUpClass(cls):
@@ -20,8 +30,8 @@ class CourseEnrollmentTests(SharedModuleStoreTestCase):
def setUp(self):
super(CourseEnrollmentTests, self).setUp()
- self.user = UserFactory.create()
- self.user_2 = UserFactory.create()
+ self.user = UserFactory()
+ self.user_2 = UserFactory()
def test_enrollment_status_hash_cache_key(self):
username = 'test-user'
@@ -103,3 +113,29 @@ class CourseEnrollmentTests(SharedModuleStoreTestCase):
CourseEnrollment.objects.users_enrolled_in(self.course.id, include_inactive=True)
)
self.assertListEqual([self.user, self.user_2], all_enrolled_users)
+
+ @skip_unless_lms
+ # NOTE: We mute the post_save signal to prevent Schedules from being created for new enrollments
+ @factory.django.mute_signals(signals.post_save)
+ def test_upgrade_deadline(self):
+ """ The property should use either the CourseMode or related Schedule to determine the deadline. """
+ course_mode = CourseModeFactory(
+ course_id=self.course.id,
+ mode_slug=CourseMode.VERIFIED,
+ # This must be in the future to ensure it is returned by downstream code.
+ expiration_datetime=datetime.datetime.now(pytz.UTC) + datetime.timedelta(days=1)
+ )
+ enrollment = CourseEnrollmentFactory(course_id=self.course.id, mode=CourseMode.AUDIT)
+ self.assertEqual(Schedule.objects.all().count(), 0)
+ self.assertEqual(enrollment.upgrade_deadline, course_mode.expiration_datetime)
+
+ # The schedule's upgrade deadline should be used if a schedule exists
+ schedule = ScheduleFactory(enrollment=enrollment)
+ self.assertEqual(enrollment.upgrade_deadline, schedule.upgrade_deadline)
+
+ @skip_unless_lms
+ @ddt.data(*(set(CourseMode.ALL_MODES) - set(CourseMode.AUDIT_MODES)))
+ def test_upgrade_deadline_for_non_upgradeable_enrollment(self, mode):
+ """ The property should return None if an upgrade cannot be upgraded. """
+ enrollment = CourseEnrollmentFactory(course_id=self.course.id, mode=mode)
+ self.assertIsNone(enrollment.upgrade_deadline)
diff --git a/common/djangoapps/student/tests/test_refunds.py b/common/djangoapps/student/tests/test_refunds.py
index cb4be3a13f..11849cbd0a 100644
--- a/common/djangoapps/student/tests/test_refunds.py
+++ b/common/djangoapps/student/tests/test_refunds.py
@@ -2,7 +2,6 @@
Tests for enrollment refund capabilities.
"""
import logging
-from slumber.exceptions import HttpClientError
import unittest
from datetime import datetime, timedelta
@@ -15,7 +14,9 @@ from django.conf import settings
from django.core.urlresolvers import reverse
from django.test.client import Client
from django.test.utils import override_settings
+from edx_rest_api_client.exceptions import SlumberBaseException
from mock import patch
+from slumber.exceptions import HttpClientError, HttpServerError
# These imports refer to lms djangoapps.
# Their testcases are only run under lms.
@@ -214,15 +215,16 @@ class RefundableTest(SharedModuleStoreTestCase):
resp = self.client.post(reverse('student.views.dashboard', args=[]))
self.assertEqual(resp.status_code, 200)
+ @ddt.data(HttpServerError, HttpClientError, SlumberBaseException)
@override_settings(ECOMMERCE_API_URL=TEST_API_URL)
- def test_refund_cutoff_date_with_client_error(self):
+ def test_refund_cutoff_date_with_api_error(self, exception):
""" Verify that dashboard will not throw internal server error if HttpClientError
- raised while getting order detail for ecommerce.
- """
+ raised while getting order detail for ecommerce.
+ """
# importing this after overriding value of ECOMMERCE_API_URL
from commerce.tests.mocks import mock_order_endpoint
self.client.login(username=self.user.username, password=self.USER_PASSWORD)
- with mock_order_endpoint(order_number=self.ORDER_NUMBER, exception=HttpClientError):
+ with mock_order_endpoint(order_number=self.ORDER_NUMBER, exception=exception, reset_on_exit=False):
response = self.client.post(reverse('student.views.dashboard', args=[]))
self.assertEqual(response.status_code, 200)
diff --git a/common/djangoapps/student/tests/test_reset_password.py b/common/djangoapps/student/tests/test_reset_password.py
index 9b4fbbfcd6..61b2488db3 100644
--- a/common/djangoapps/student/tests/test_reset_password.py
+++ b/common/djangoapps/student/tests/test_reset_password.py
@@ -13,6 +13,7 @@ from django.contrib.auth.tokens import default_token_generator
from django.core.cache import cache
from django.core.urlresolvers import reverse
from django.test.client import RequestFactory
+from django.test.utils import override_settings
from django.utils.http import int_to_base36
from edx_oauth2_provider.tests.factories import AccessTokenFactory, ClientFactory, RefreshTokenFactory
from mock import Mock, patch
@@ -174,40 +175,33 @@ class ResetPasswordTests(EventTestMixin, CacheIsolationTestCase):
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', "Test only valid in LMS")
@patch('django.core.mail.send_mail')
- @ddt.data(('Crazy Awesome Site', 'Crazy Awesome Site'), (None, 'edX'))
+ @ddt.data(('Crazy Awesome Site', 'Crazy Awesome Site'), ('edX', 'edX'))
@ddt.unpack
- def test_reset_password_email_domain(self, domain_override, platform_name, send_email):
+ def test_reset_password_email_site(self, site_name, platform_name, send_email):
"""
Tests that the right url domain and platform name is included in
the reset password email
"""
with patch("django.conf.settings.PLATFORM_NAME", platform_name):
- req = self.request_factory.post(
- '/password_reset/', {'email': self.user.email}
- )
- req.is_secure = Mock(return_value=True)
- req.get_host = Mock(return_value=domain_override)
- req.user = self.user
- password_reset(req)
- _, msg, _, _ = send_email.call_args[0]
+ with patch("django.conf.settings.SITE_NAME", site_name):
+ req = self.request_factory.post(
+ '/password_reset/', {'email': self.user.email}
+ )
+ req.user = self.user
+ password_reset(req)
+ _, msg, _, _ = send_email.call_args[0]
- reset_intro_msg = "you requested a password reset for your user account at {}".format(platform_name)
- self.assertIn(reset_intro_msg, msg)
+ reset_msg = "you requested a password reset for your user account at {}"
+ reset_msg = reset_msg.format(site_name)
- reset_link = "https://{}/"
- if domain_override:
- reset_link = reset_link.format(domain_override)
- else:
- reset_link = reset_link.format(settings.SITE_NAME)
+ self.assertIn(reset_msg, msg)
- self.assertIn(reset_link, msg)
+ sign_off = "The {} Team".format(platform_name)
+ self.assertIn(sign_off, msg)
- sign_off = "The {} Team".format(platform_name)
- self.assertIn(sign_off, msg)
-
- self.assert_event_emitted(
- SETTING_CHANGE_INITIATED, user_id=self.user.id, setting=u'password', old=None, new=None
- )
+ self.assert_event_emitted(
+ SETTING_CHANGE_INITIATED, user_id=self.user.id, setting=u'password', old=None, new=None
+ )
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', "Test only valid in LMS")
@patch("openedx.core.djangoapps.site_configuration.helpers.get_value", fake_get_value)
@@ -287,6 +281,35 @@ class ResetPasswordTests(EventTestMixin, CacheIsolationTestCase):
self.assertEqual(resp.status_code, 200)
self.assertFalse(User.objects.get(pk=self.user.pk).is_active)
+ @override_settings(PASSWORD_MIN_LENGTH=2)
+ @override_settings(PASSWORD_MAX_LENGTH=10)
+ @ddt.data(
+ {
+ 'password': '1',
+ 'error_message': 'Password: Invalid Length (must be 2 characters or more)',
+ },
+ {
+ 'password': '01234567891',
+ 'error_message': 'Password: Invalid Length (must be 10 characters or fewer)'
+ }
+ )
+ def test_password_reset_with_invalid_length(self, password_dict):
+ """Tests that if we provide password characters less then PASSWORD_MIN_LENGTH,
+ or more than PASSWORD_MAX_LENGTH, password reset will fail with error message.
+ """
+
+ url = reverse(
+ 'password_reset_confirm',
+ kwargs={'uidb36': self.uidb36, 'token': self.token}
+ )
+ request_params = {'new_password1': password_dict['password'], 'new_password2': password_dict['password']}
+ confirm_request = self.request_factory.post(url, data=request_params)
+
+ # Make a password reset request with minimum/maximum passwords characters.
+ response = password_reset_confirm_wrapper(confirm_request, self.uidb36, self.token)
+
+ self.assertEqual(response.context_data['err_msg'], password_dict['error_message'])
+
@patch('student.views.password_reset_confirm')
@patch("openedx.core.djangoapps.site_configuration.helpers.get_value", fake_get_value)
def test_reset_password_good_token_configuration_override(self, reset_confirm):
diff --git a/common/djangoapps/student/tests/test_roles.py b/common/djangoapps/student/tests/test_roles.py
index 20c24dae51..ac1301a5dc 100644
--- a/common/djangoapps/student/tests/test_roles.py
+++ b/common/djangoapps/student/tests/test_roles.py
@@ -3,7 +3,7 @@ Tests of student.roles
"""
import ddt
from django.test import TestCase
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from courseware.tests.factories import InstructorFactory, StaffFactory, UserFactory
from student.roles import (
@@ -26,7 +26,7 @@ class RolesTestCase(TestCase):
def setUp(self):
super(RolesTestCase, self).setUp()
- self.course_key = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ self.course_key = CourseKey.from_string('edX/toy/2012_Fall')
self.course_loc = self.course_key.make_usage_key('course', '2012_Fall')
self.anonymous_user = AnonymousUserFactory()
self.student = UserFactory()
@@ -43,8 +43,8 @@ class RolesTestCase(TestCase):
def test_group_name_case_sensitive(self):
uppercase_course_id = "ORG/COURSE/NAME"
lowercase_course_id = uppercase_course_id.lower()
- uppercase_course_key = SlashSeparatedCourseKey.from_deprecated_string(uppercase_course_id)
- lowercase_course_key = SlashSeparatedCourseKey.from_deprecated_string(lowercase_course_id)
+ uppercase_course_key = CourseKey.from_string(uppercase_course_id)
+ lowercase_course_key = CourseKey.from_string(lowercase_course_id)
role = "role"
@@ -165,8 +165,8 @@ class RolesTestCase(TestCase):
@ddt.ddt
class RoleCacheTestCase(TestCase):
- IN_KEY = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
- NOT_IN_KEY = SlashSeparatedCourseKey('edX', 'toy', '2013_Fall')
+ IN_KEY = CourseKey.from_string('edX/toy/2012_Fall')
+ NOT_IN_KEY = CourseKey.from_string('edX/toy/2013_Fall')
ROLES = (
(CourseStaffRole(IN_KEY), ('staff', IN_KEY, 'edX')),
diff --git a/common/djangoapps/student/tests/test_views.py b/common/djangoapps/student/tests/test_views.py
index 5cd9a8d340..a5cd234665 100644
--- a/common/djangoapps/student/tests/test_views.py
+++ b/common/djangoapps/student/tests/test_views.py
@@ -18,7 +18,7 @@ from pyquery import PyQuery as pq
from student.cookies import get_user_info_cookie_data
from student.helpers import DISABLE_UNENROLL_CERT_STATES
-from student.models import CourseEnrollment, UserProfile
+from student.models import CourseEnrollment, REFUND_ORDER, UserProfile
from student.tests.factories import CourseEnrollmentFactory, UserFactory
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase
@@ -91,16 +91,19 @@ class TestStudentDashboardUnenrollments(SharedModuleStoreTestCase):
self.cert_status = cert_status
with patch('student.views.cert_info', side_effect=self.mock_cert):
- response = self.client.post(
- reverse('change_enrollment'),
- {'enrollment_action': 'unenroll', 'course_id': self.course.id}
- )
+ with patch('commerce.signals.handle_refund_order') as mock_refund_handler:
+ REFUND_ORDER.connect(mock_refund_handler)
+ response = self.client.post(
+ reverse('change_enrollment'),
+ {'enrollment_action': 'unenroll', 'course_id': self.course.id}
+ )
- self.assertEqual(response.status_code, status_code)
- if status_code == 200:
- course_enrollment.assert_called_with(self.user, self.course.id)
- else:
- course_enrollment.assert_not_called()
+ self.assertEqual(response.status_code, status_code)
+ if status_code == 200:
+ course_enrollment.assert_called_with(self.user, self.course.id)
+ self.assertTrue(mock_refund_handler.called)
+ else:
+ course_enrollment.assert_not_called()
def test_no_cert_status(self):
""" Assert that the dashboard loads when cert_status is None."""
diff --git a/common/djangoapps/student/tests/tests.py b/common/djangoapps/student/tests/tests.py
index 0052115d95..f2b7e49549 100644
--- a/common/djangoapps/student/tests/tests.py
+++ b/common/djangoapps/student/tests/tests.py
@@ -2,14 +2,12 @@
"""
Miscellaneous tests for the student app.
"""
-import json
import logging
import unittest
from datetime import datetime, timedelta
from urllib import quote
import ddt
-import httpretty
import pytz
from config_models.models import cache
from django.conf import settings
@@ -21,7 +19,6 @@ from markupsafe import escape
from mock import Mock, patch
from nose.plugins.attrib import attr
from opaque_keys.edx.locations import CourseLocator, SlashSeparatedCourseKey
-from provider.constants import CONFIDENTIAL
from pyquery import PyQuery as pq
import shoppingcart # pylint: disable=import-error
@@ -753,6 +750,8 @@ class EnrollInCourseTest(EnrollmentEventTestMixin, CacheIsolationTestCase):
def test_enrollment(self):
user = User.objects.create_user("joe", "joe@joe.com", "password")
course_id = SlashSeparatedCourseKey("edX", "Test101", "2013")
+ # Cannot be converted to CourseLocator or CourseKey.from_string because both do not support
+ # course keys without a run. The test specifically tests functionality when run is not specified.
course_id_partial = SlashSeparatedCourseKey("edX", "Test101", None)
# Test basic enrollment
@@ -799,7 +798,7 @@ class EnrollInCourseTest(EnrollmentEventTestMixin, CacheIsolationTestCase):
def test_enrollment_non_existent_user(self):
# Testing enrollment of newly unsaved user (i.e. no database entry)
user = User(username="rusty", email="rusty@fake.edx.org")
- course_id = SlashSeparatedCourseKey("edX", "Test101", "2013")
+ course_id = CourseLocator("edX", "Test101", "2013")
self.assertFalse(CourseEnrollment.is_enrolled(user, course_id))
@@ -816,7 +815,7 @@ class EnrollInCourseTest(EnrollmentEventTestMixin, CacheIsolationTestCase):
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
def test_enrollment_by_email(self):
user = User.objects.create(username="jack", email="jack@fake.edx.org")
- course_id = SlashSeparatedCourseKey("edX", "Test101", "2013")
+ course_id = CourseLocator("edX", "Test101", "2013")
CourseEnrollment.enroll_by_email("jack@fake.edx.org", course_id)
self.assertTrue(CourseEnrollment.is_enrolled(user, course_id))
@@ -854,8 +853,8 @@ class EnrollInCourseTest(EnrollmentEventTestMixin, CacheIsolationTestCase):
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
def test_enrollment_multiple_classes(self):
user = User(username="rusty", email="rusty@fake.edx.org")
- course_id1 = SlashSeparatedCourseKey("edX", "Test101", "2013")
- course_id2 = SlashSeparatedCourseKey("MITx", "6.003z", "2012")
+ course_id1 = CourseLocator("edX", "Test101", "2013")
+ course_id2 = CourseLocator("MITx", "6.003z", "2012")
CourseEnrollment.enroll(user, course_id1)
self.assert_enrollment_event_was_emitted(user, course_id1)
@@ -877,7 +876,7 @@ class EnrollInCourseTest(EnrollmentEventTestMixin, CacheIsolationTestCase):
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
def test_activation(self):
user = User.objects.create(username="jack", email="jack@fake.edx.org")
- course_id = SlashSeparatedCourseKey("edX", "Test101", "2013")
+ course_id = CourseLocator("edX", "Test101", "2013")
self.assertFalse(CourseEnrollment.is_enrolled(user, course_id))
# Creating an enrollment doesn't actually enroll a student
@@ -914,7 +913,7 @@ class EnrollInCourseTest(EnrollmentEventTestMixin, CacheIsolationTestCase):
def test_change_enrollment_modes(self):
user = User.objects.create(username="justin", email="jh@fake.edx.org")
- course_id = SlashSeparatedCourseKey("edX", "Test101", "2013")
+ course_id = CourseLocator("edX", "Test101", "2013")
CourseEnrollment.enroll(user, course_id, "audit")
self.assert_enrollment_event_was_emitted(user, course_id)
diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py
index 3ac0e6c579..2c857443f5 100644
--- a/common/djangoapps/student/views.py
+++ b/common/djangoapps/student/views.py
@@ -119,7 +119,8 @@ from student.models import (
UserStanding,
anonymous_id_for_user,
create_comments_service_user,
- unique_id_for_user
+ unique_id_for_user,
+ REFUND_ORDER
)
from student.tasks import send_activation_email
from third_party_auth import pipeline, provider
@@ -127,7 +128,7 @@ from util.bad_request_rate_limiter import BadRequestRateLimiter
from util.db import outer_atomic
from util.json_request import JsonResponse
from util.milestones_helpers import get_pre_requisite_courses_not_completed
-from util.password_policy_validators import validate_password_strength
+from util.password_policy_validators import validate_password_length, validate_password_strength
from xmodule.modulestore.django import modulestore
log = logging.getLogger("edx.student")
@@ -1267,6 +1268,7 @@ def change_enrollment(request, check_access=True):
return HttpResponseBadRequest(_("Your certificate prevents you from unenrolling from this course"))
CourseEnrollment.unenroll(user, course_id)
+ REFUND_ORDER.send(sender=None, course_enrollment=enrollment)
return HttpResponse()
else:
return HttpResponseBadRequest(_("Enrollment action is invalid"))
@@ -2434,8 +2436,7 @@ def password_reset(request):
if form.is_valid():
form.save(use_https=request.is_secure(),
from_email=configuration_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL),
- request=request,
- domain_override=request.get_host())
+ request=request)
# When password change is complete, a "edx.user.settings.changed" event will be emitted.
# But because changing the password is multi-step, we also emit an event here so that we can
# track where the request was initiated.
@@ -2476,7 +2477,30 @@ def uidb36_to_uidb64(uidb36):
return uidb64
-def validate_password(user, password):
+def validate_password(password):
+ """
+ Validate password overall strength if ENFORCE_PASSWORD_POLICY is enable
+ otherwise only validate the length of the password.
+
+ Args:
+ password: the user's proposed new password.
+
+ Returns:
+ err_msg: an error message if there's a violation of one of the password
+ checks. Otherwise, `None`.
+ """
+
+ try:
+ if settings.FEATURES.get('ENFORCE_PASSWORD_POLICY', False):
+ validate_password_strength(password)
+ else:
+ validate_password_length(password)
+
+ except ValidationError as err:
+ return _('Password: ') + '; '.join(err.messages)
+
+
+def validate_password_security_policy(user, password):
"""
Tie in password policy enforcement as an optional level of
security protection
@@ -2486,19 +2510,11 @@ def validate_password(user, password):
password: the user's proposed new password.
Returns:
- is_valid_password: a boolean indicating if the new password
- passes the validation.
err_msg: an error message if there's a violation of one of the password
checks. Otherwise, `None`.
"""
+
err_msg = None
-
- if settings.FEATURES.get('ENFORCE_PASSWORD_POLICY', False):
- try:
- validate_password_strength(password)
- except ValidationError as err:
- err_msg = _('Password: ') + '; '.join(err.messages)
-
# also, check the password reuse policy
if not PasswordHistory.is_allowable_password_reuse(user, password):
if user.is_staff:
@@ -2524,9 +2540,7 @@ def validate_password(user, password):
num_days
).format(num=num_days)
- is_password_valid = err_msg is None
-
- return is_password_valid, err_msg
+ return err_msg
def password_reset_confirm_wrapper(request, uidb36=None, token=None):
@@ -2552,16 +2566,24 @@ def password_reset_confirm_wrapper(request, uidb36=None, token=None):
if request.method == 'POST':
password = request.POST['new_password1']
- is_password_valid, password_err_msg = validate_password(user, password)
- if not is_password_valid:
+ valid_link = False
+ error_message = validate_password_security_policy(user, password)
+ if not error_message:
+ # if security is not violated, we need to validate password
+ error_message = validate_password(password)
+ if error_message:
+ # password reset link will be valid if there is no security violation
+ valid_link = True
+
+ if error_message:
# We have a password reset attempt which violates some security
- # policy. Use the existing Django template to communicate that
+ # policy, or any other validation. Use the existing Django template to communicate that
# back to the user.
context = {
- 'validlink': False,
+ 'validlink': valid_link,
'form': None,
'title': _('Password reset unsuccessful'),
- 'err_msg': password_err_msg,
+ 'err_msg': error_message,
}
context.update(platform_name)
return TemplateResponse(
diff --git a/common/djangoapps/track/admin.py b/common/djangoapps/track/admin.py
index 6aa141a3e2..f450a92324 100644
--- a/common/djangoapps/track/admin.py
+++ b/common/djangoapps/track/admin.py
@@ -2,7 +2,7 @@
django admin pages for courseware model
'''
-from ratelimitbackend import admin
+from django.contrib import admin
from track.models import TrackingLog
diff --git a/common/djangoapps/util/admin.py b/common/djangoapps/util/admin.py
index c8da7cf4d6..0f4f7b2354 100644
--- a/common/djangoapps/util/admin.py
+++ b/common/djangoapps/util/admin.py
@@ -1,6 +1,6 @@
"""Admin interface for the util app. """
-from ratelimitbackend import admin
+from django.contrib import admin
from util.models import RateLimitConfiguration
diff --git a/common/djangoapps/util/tests/test_sandboxing.py b/common/djangoapps/util/tests/test_sandboxing.py
index 2b944a25a4..2dd9ae6c60 100644
--- a/common/djangoapps/util/tests/test_sandboxing.py
+++ b/common/djangoapps/util/tests/test_sandboxing.py
@@ -4,8 +4,8 @@ Tests for sandboxing.py in util app
from django.test import TestCase
from django.test.utils import override_settings
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
-from opaque_keys.edx.locator import LibraryLocator
+from opaque_keys.edx.keys import CourseKey
+from opaque_keys.edx.locator import CourseLocator, LibraryLocator
from util.sandboxing import can_execute_unsafe_code
@@ -19,7 +19,7 @@ class SandboxingTest(TestCase):
"""
Test to make sure that a non-match returns false
"""
- self.assertFalse(can_execute_unsafe_code(SlashSeparatedCourseKey('edX', 'notful', 'empty')))
+ self.assertFalse(can_execute_unsafe_code(CourseLocator('edX', 'notful', 'empty')))
self.assertFalse(can_execute_unsafe_code(LibraryLocator('edY', 'test_bank')))
@override_settings(COURSES_WITH_UNSAFE_CODE=['edX/full/.*'])
@@ -27,14 +27,14 @@ class SandboxingTest(TestCase):
"""
Test to make sure that a match works across course runs
"""
- self.assertTrue(can_execute_unsafe_code(SlashSeparatedCourseKey('edX', 'full', '2012_Fall')))
- self.assertTrue(can_execute_unsafe_code(SlashSeparatedCourseKey('edX', 'full', '2013_Spring')))
+ self.assertTrue(can_execute_unsafe_code(CourseKey.from_string('edX/full/2012_Fall')))
+ self.assertTrue(can_execute_unsafe_code(CourseKey.from_string('edX/full/2013_Spring')))
self.assertFalse(can_execute_unsafe_code(LibraryLocator('edX', 'test_bank')))
def test_courselikes_with_unsafe_code_default(self):
"""
Test that the default setting for COURSES_WITH_UNSAFE_CODE is an empty setting, e.g. we don't use @override_settings in these tests
"""
- self.assertFalse(can_execute_unsafe_code(SlashSeparatedCourseKey('edX', 'full', '2012_Fall')))
- self.assertFalse(can_execute_unsafe_code(SlashSeparatedCourseKey('edX', 'full', '2013_Spring')))
+ self.assertFalse(can_execute_unsafe_code(CourseLocator('edX', 'full', '2012_Fall')))
+ self.assertFalse(can_execute_unsafe_code(CourseLocator('edX', 'full', '2013_Spring')))
self.assertFalse(can_execute_unsafe_code(LibraryLocator('edX', 'test_bank')))
diff --git a/common/lib/xmodule/xmodule/course_module.py b/common/lib/xmodule/xmodule/course_module.py
index 0991e8a488..29e3a925f5 100644
--- a/common/lib/xmodule/xmodule/course_module.py
+++ b/common/lib/xmodule/xmodule/course_module.py
@@ -5,6 +5,7 @@ import json
import logging
from cStringIO import StringIO
from datetime import datetime, timedelta
+import dateutil.parser
import requests
from lazy import lazy
@@ -1393,9 +1394,10 @@ class CourseSummary(object):
A lightweight course summary class, which constructs split/mongo course summary without loading
the course. It is used at cms for listing courses to global staff user.
"""
- course_info_fields = ['display_name', 'display_coursenumber', 'display_organization']
+ course_info_fields = ['display_name', 'display_coursenumber', 'display_organization', 'end']
- def __init__(self, course_locator, display_name=u"Empty", display_coursenumber=None, display_organization=None):
+ def __init__(self, course_locator, display_name=u"Empty", display_coursenumber=None, display_organization=None,
+ end=None):
"""
Initialize and construct course summary
@@ -1412,6 +1414,8 @@ class CourseSummary(object):
display_organization (unicode|None): Course organization that is specified & appears in the courseware
+ end (unicode|None): Course end date. Must contain timezone.
+
"""
self.display_coursenumber = display_coursenumber
self.display_organization = display_organization
@@ -1419,6 +1423,9 @@ class CourseSummary(object):
self.id = course_locator # pylint: disable=invalid-name
self.location = course_locator.make_usage_key('course', 'course')
+ self.end = end
+ if end is not None and not isinstance(end, datetime):
+ self.end = dateutil.parser.parse(end)
@property
def display_org_with_default(self):
@@ -1439,3 +1446,9 @@ class CourseSummary(object):
if self.display_coursenumber:
return self.display_coursenumber
return self.location.course
+
+ def has_ended(self):
+ """
+ Returns whether the course has ended.
+ """
+ return course_metadata_utils.has_course_ended(self.end)
diff --git a/common/lib/xmodule/xmodule/library_content_module.py b/common/lib/xmodule/xmodule/library_content_module.py
index 7e52ba15f5..f11033e1a7 100644
--- a/common/lib/xmodule/xmodule/library_content_module.py
+++ b/common/lib/xmodule/xmodule/library_content_module.py
@@ -624,7 +624,7 @@ class LibraryContentDescriptor(LibraryContentFields, MakoModuleDescriptor, XmlDe
]
definition = {
attr_name: json.loads(attr_value)
- for attr_name, attr_value in xml_object.attrib
+ for attr_name, attr_value in xml_object.attrib.items()
}
return definition, children
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 b25a07415b..ef72921691 100644
--- a/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py
+++ b/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py
@@ -40,7 +40,7 @@ from xblock.test.tools import TestRuntime
if not settings.configured:
settings.configure()
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locator import BlockUsageLocator, CourseLocator, LibraryLocator
from xmodule.exceptions import InvalidVersionError
from xmodule.modulestore import ModuleStoreEnum
@@ -323,7 +323,7 @@ class TestMixedModuleStore(CommonMixedModuleStoreSetup):
)
# try an unknown mapping, it should be the 'default' store
self.assertEqual(self.store.get_modulestore_type(
- SlashSeparatedCourseKey('foo', 'bar', '2012_Fall')), default_ms
+ CourseKey.from_string('foo/bar/2012_Fall')), default_ms
)
@ddt.data(ModuleStoreEnum.Type.mongo, ModuleStoreEnum.Type.split)
diff --git a/common/lib/xmodule/xmodule/modulestore/tests/test_mongo.py b/common/lib/xmodule/xmodule/modulestore/tests/test_mongo.py
index 90b6fd395b..57423b4170 100644
--- a/common/lib/xmodule/xmodule/modulestore/tests/test_mongo.py
+++ b/common/lib/xmodule/xmodule/modulestore/tests/test_mongo.py
@@ -29,7 +29,7 @@ from opaque_keys.edx.locations import Location
from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.mongo import MongoKeyValueStore
from xmodule.modulestore.draft import DraftModuleStore
-from opaque_keys.edx.locations import SlashSeparatedCourseKey, AssetLocation
+from opaque_keys.edx.locations import AssetLocation
from opaque_keys.edx.locator import LibraryLocator, CourseLocator
from opaque_keys.edx.keys import UsageKey
from xmodule.modulestore.xml_exporter import export_course_to_xml
@@ -160,7 +160,7 @@ class TestMongoModuleStoreBase(unittest.TestCase):
static_content_store=content_store,
do_import_static=False,
verbose=True,
- target_id=SlashSeparatedCourseKey('guestx', 'foo', 'bar')
+ target_id=CourseKey.from_string('guestx/foo/bar')
)
return content_store, draft_store
@@ -216,7 +216,7 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
for course_key in [
- SlashSeparatedCourseKey(*fields)
+ CourseKey.from_string('/'.join(fields))
for fields in [
['edX', 'simple', '2012_Fall'],
['edX', 'simple_with_draft', '2012_Fall'],
@@ -230,8 +230,8 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
course = self.draft_store.get_course(course_key)
assert_not_none(course)
assert_true(self.draft_store.has_course(course_key))
- mix_cased = SlashSeparatedCourseKey(
- course_key.org.upper(), course_key.course.upper(), course_key.run.lower()
+ mix_cased = CourseKey.from_string(
+ '/'.join([course_key.org.upper(), course_key.course.upper(), course_key.run.lower()])
)
assert_false(self.draft_store.has_course(mix_cased))
assert_true(self.draft_store.has_course(mix_cased, ignore_case=True))
@@ -247,7 +247,7 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
course_ids = [course.id for course in courses]
for course_key in [
- SlashSeparatedCourseKey(*fields)
+ CourseKey.from_string('/'.join(fields))
for fields in [
['guestx', 'foo', 'bar']
]
@@ -259,7 +259,7 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
course_ids = [course.id for course in courses]
for course_key in [
- SlashSeparatedCourseKey(*fields)
+ CourseKey.from_string('/'.join(fields))
for fields in [
['edX', 'simple', '2012_Fall'],
['edX', 'simple_with_draft', '2012_Fall'],
@@ -276,7 +276,7 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
"""
for course_key in [
- SlashSeparatedCourseKey(*fields)
+ CourseKey.from_string('/'.join(fields))
for fields in [
['edX', 'simple', 'no_such_course'], ['edX', 'no_such_course', '2012_Fall'],
['NO_SUCH_COURSE', 'Test_iMport_courSe', '2012_Fall'],
@@ -285,8 +285,8 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
course = self.draft_store.get_course(course_key)
assert_is_none(course)
assert_false(self.draft_store.has_course(course_key))
- mix_cased = SlashSeparatedCourseKey(
- course_key.org.lower(), course_key.course.upper(), course_key.run.upper()
+ mix_cased = CourseKey.from_string(
+ '/'.join([course_key.org.lower(), course_key.course.upper(), course_key.run.upper()])
)
assert_false(self.draft_store.has_course(mix_cased))
assert_false(self.draft_store.has_course(mix_cased, ignore_case=True))
@@ -449,13 +449,13 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
for course_number in self.courses:
course_locations = self.draft_store.get_courses_for_wiki(course_number)
assert_equals(len(course_locations), 1)
- assert_equals(SlashSeparatedCourseKey('edX', course_number, '2012_Fall'), course_locations[0])
+ assert_equals(CourseKey.from_string('/'.join(['edX', course_number, '2012_Fall'])), course_locations[0])
course_locations = self.draft_store.get_courses_for_wiki('no_such_wiki')
assert_equals(len(course_locations), 0)
# set toy course to share the wiki with simple course
- toy_course = self.draft_store.get_course(SlashSeparatedCourseKey('edX', 'toy', '2012_Fall'))
+ toy_course = self.draft_store.get_course(CourseKey.from_string('edX/toy/2012_Fall'))
toy_course.wiki_slug = 'simple'
self.draft_store.update_item(toy_course, ModuleStoreEnum.UserID.test)
@@ -467,23 +467,23 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
course_locations = self.draft_store.get_courses_for_wiki('simple')
assert_equals(len(course_locations), 2)
for course_number in ['toy', 'simple']:
- assert_in(SlashSeparatedCourseKey('edX', course_number, '2012_Fall'), course_locations)
+ assert_in(CourseKey.from_string('/'.join(['edX', course_number, '2012_Fall'])), course_locations)
# configure simple course to use unique wiki_slug.
- simple_course = self.draft_store.get_course(SlashSeparatedCourseKey('edX', 'simple', '2012_Fall'))
+ simple_course = self.draft_store.get_course(CourseKey.from_string('edX/simple/2012_Fall'))
simple_course.wiki_slug = 'edX.simple.2012_Fall'
self.draft_store.update_item(simple_course, ModuleStoreEnum.UserID.test)
# it should be retrievable with its new wiki_slug
course_locations = self.draft_store.get_courses_for_wiki('edX.simple.2012_Fall')
assert_equals(len(course_locations), 1)
- assert_in(SlashSeparatedCourseKey('edX', 'simple', '2012_Fall'), course_locations)
+ assert_in(CourseKey.from_string('edX/simple/2012_Fall'), course_locations)
@XBlock.register_temp_plugin(ReferenceTestXBlock, 'ref_test')
def test_reference_converters(self):
"""
Test that references types get deserialized correctly
"""
- course_key = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ course_key = CourseKey.from_string('edX/toy/2012_Fall')
def setup_test():
course = self.draft_store.get_course(course_key)
@@ -563,7 +563,7 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
Test to make sure that we have a course image in the contentstore,
then export it to ensure it gets copied to both file locations.
"""
- course_key = SlashSeparatedCourseKey('edX', 'simple', '2012_Fall')
+ course_key = CourseKey.from_string('edX/simple/2012_Fall')
location = course_key.make_asset_key('asset', 'images_course_image.jpg')
# This will raise if the course image is missing
@@ -581,7 +581,7 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
Make sure that if a non-default image path is specified that we
don't export it to the static default location
"""
- course = self.draft_store.get_course(SlashSeparatedCourseKey('edX', 'toy', '2012_Fall'))
+ course = self.draft_store.get_course(CourseKey.from_string('edX/toy/2012_Fall'))
assert_true(course.course_image, 'just_a_test.jpg')
root_dir = path(mkdtemp())
@@ -595,7 +595,7 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
Make sure we elegantly passover our code when there isn't a static
image
"""
- course = self.draft_store.get_course(SlashSeparatedCourseKey('edX', 'simple_with_draft', '2012_Fall'))
+ course = self.draft_store.get_course(CourseKey.from_string('edX/simple_with_draft/2012_Fall'))
root_dir = path(mkdtemp())
self.addCleanup(shutil.rmtree, root_dir)
export_course_to_xml(self.draft_store, self.content_store, course.id, root_dir, 'test_export')
@@ -619,7 +619,7 @@ class TestMongoModuleStore(TestMongoModuleStoreBase):
course = 'tree{}'.format(name)
run = name
- if not self.draft_store.has_course(SlashSeparatedCourseKey(org, course, run)):
+ if not self.draft_store.has_course(CourseKey.from_string('/'.join[org, course, run])):
self.draft_store.create_course(org, course, run, user_id)
locations = {
@@ -755,7 +755,7 @@ class TestMongoKeyValueStore(unittest.TestCase):
def setUp(self):
super(TestMongoKeyValueStore, self).setUp()
self.data = {'foo': 'foo_value'}
- self.course_id = SlashSeparatedCourseKey('org', 'course', 'run')
+ self.course_id = CourseKey.from_string('org/course/run')
self.parent = self.course_id.make_usage_key('parent', 'p')
self.children = [self.course_id.make_usage_key('child', 'a'), self.course_id.make_usage_key('child', 'b')]
self.metadata = {'meta': 'meta_val'}
diff --git a/common/lib/xmodule/xmodule/modulestore/tests/test_semantics.py b/common/lib/xmodule/xmodule/modulestore/tests/test_semantics.py
index 8bf1446300..f70f209241 100644
--- a/common/lib/xmodule/xmodule/modulestore/tests/test_semantics.py
+++ b/common/lib/xmodule/xmodule/modulestore/tests/test_semantics.py
@@ -211,7 +211,7 @@ class DirectOnlyCategorySemantics(PureModulestoreTestCase):
"""
def verify_course_summery_fields(course_summary):
""" Verify that every `course_summary` object has all the required fields """
- expected_fields = CourseSummary.course_info_fields + ['id', 'location']
+ expected_fields = CourseSummary.course_info_fields + ['id', 'location', 'has_ended']
return all([hasattr(course_summary, field) for field in expected_fields])
self.assertTrue(all(verify_course_summery_fields(course_summary) for course_summary in course_summaries))
diff --git a/common/lib/xmodule/xmodule/modulestore/tests/test_xml.py b/common/lib/xmodule/xmodule/modulestore/tests/test_xml.py
index 4da26acfd0..1407885741 100644
--- a/common/lib/xmodule/xmodule/modulestore/tests/test_xml.py
+++ b/common/lib/xmodule/xmodule/modulestore/tests/test_xml.py
@@ -12,7 +12,8 @@ from xmodule.modulestore import ModuleStoreEnum
from xmodule.x_module import XModuleMixin
from xmodule.tests import DATA_DIR
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
+from opaque_keys.edx.locator import CourseLocator
from xmodule.modulestore.tests.test_modulestore import check_has_course_method
@@ -51,13 +52,13 @@ class TestXMLModuleStore(unittest.TestCase):
load_error_modules=False)
# Look up the errors during load. There should be none.
- errors = modulestore.get_course_errors(SlashSeparatedCourseKey("edX", "toy", "2012_Fall"))
+ errors = modulestore.get_course_errors(CourseKey.from_string("edX/toy/2012_Fall"))
assert errors == []
@patch("xmodule.modulestore.xml.glob.glob", side_effect=glob_tildes_at_end)
def test_tilde_files_ignored(self, _fake_glob):
modulestore = XMLModuleStore(DATA_DIR, source_dirs=['tilde'], load_error_modules=False)
- about_location = SlashSeparatedCourseKey('edX', 'tilde', '2012_Fall').make_usage_key(
+ about_location = CourseKey.from_string('edX/tilde/2012_Fall').make_usage_key(
'about', 'index',
)
about_module = modulestore.get_item(about_location)
@@ -78,7 +79,7 @@ class TestXMLModuleStore(unittest.TestCase):
self.assertEqual(len(course_locations), 0)
# now set toy course to share the wiki with simple course
- toy_course = store.get_course(SlashSeparatedCourseKey('edX', 'toy', '2012_Fall'))
+ toy_course = store.get_course(CourseKey.from_string('edX/toy/2012_Fall'))
toy_course.wiki_slug = 'simple'
course_locations = store.get_courses_for_wiki('toy')
@@ -87,7 +88,7 @@ class TestXMLModuleStore(unittest.TestCase):
course_locations = store.get_courses_for_wiki('simple')
self.assertEqual(len(course_locations), 2)
for course_number in ['toy', 'simple']:
- self.assertIn(SlashSeparatedCourseKey('edX', course_number, '2012_Fall'), course_locations)
+ self.assertIn(CourseKey.from_string('/'.join(['edX', course_number, '2012_Fall'])), course_locations)
def test_has_course(self):
"""
@@ -95,8 +96,8 @@ class TestXMLModuleStore(unittest.TestCase):
"""
check_has_course_method(
XMLModuleStore(DATA_DIR, source_dirs=['toy', 'simple']),
- SlashSeparatedCourseKey('edX', 'toy', '2012_Fall'),
- locator_key_fields=SlashSeparatedCourseKey.KEY_FIELDS
+ CourseKey.from_string('edX/toy/2012_Fall'),
+ locator_key_fields=CourseLocator.KEY_FIELDS
)
def test_branch_setting(self):
diff --git a/common/lib/xmodule/xmodule/modulestore/tests/test_xml_importer.py b/common/lib/xmodule/xmodule/modulestore/tests/test_xml_importer.py
index 6cc5913374..bb9e5f3e65 100644
--- a/common/lib/xmodule/xmodule/modulestore/tests/test_xml_importer.py
+++ b/common/lib/xmodule/xmodule/modulestore/tests/test_xml_importer.py
@@ -11,7 +11,7 @@ from xmodule.modulestore import ModuleStoreEnum
from xmodule.modulestore.inheritance import InheritanceMixin
from xmodule.modulestore.xml_importer import _update_and_import_module, _update_module_location
from xmodule.modulestore.tests.mongo_connection import MONGO_PORT_NUM, MONGO_HOST
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from xmodule.tests import DATA_DIR
from uuid import uuid4
import unittest
@@ -143,7 +143,7 @@ class RemapNamespaceTest(ModuleStoreNoSettings):
self.xblock.save()
# Move to different runtime w/ different course id
- target_location_namespace = SlashSeparatedCourseKey("org", "course", "run")
+ target_location_namespace = CourseKey.from_string("org/course/run")
new_version = _update_and_import_module(
self.xblock,
modulestore(),
diff --git a/common/lib/xmodule/xmodule/tests/test_error_module.py b/common/lib/xmodule/xmodule/tests/test_error_module.py
index a59cc56452..34c558e3cc 100644
--- a/common/lib/xmodule/xmodule/tests/test_error_module.py
+++ b/common/lib/xmodule/xmodule/tests/test_error_module.py
@@ -5,7 +5,8 @@ import unittest
from xmodule.tests import get_test_system
from xmodule.error_module import ErrorDescriptor, ErrorModule, NonStaffErrorDescriptor
from xmodule.modulestore.xml import CourseLocationManager
-from opaque_keys.edx.locations import SlashSeparatedCourseKey, Location
+from opaque_keys.edx.locator import CourseLocator
+from opaque_keys.edx.locations import Location
from xmodule.x_module import XModuleDescriptor, XModule, STUDENT_VIEW
from mock import MagicMock, Mock, patch
from xblock.runtime import Runtime, IdReader
@@ -19,7 +20,7 @@ class SetupTestErrorModules(unittest.TestCase):
def setUp(self):
super(SetupTestErrorModules, self).setUp()
self.system = get_test_system()
- self.course_id = SlashSeparatedCourseKey('org', 'course', 'run')
+ self.course_id = CourseLocator('org', 'course', 'run')
self.location = self.course_id.make_usage_key('foo', 'bar')
self.valid_xml = u"ABC \N{SNOWMAN}"
self.error_msg = "Error"
diff --git a/common/lib/xmodule/xmodule/tests/test_html_module.py b/common/lib/xmodule/xmodule/tests/test_html_module.py
index 2b272487ff..ec2413907c 100644
--- a/common/lib/xmodule/xmodule/tests/test_html_module.py
+++ b/common/lib/xmodule/xmodule/tests/test_html_module.py
@@ -1,7 +1,7 @@
import unittest
from mock import Mock
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from xblock.field_data import DictFieldData
from xblock.fields import ScopeIds
@@ -15,7 +15,7 @@ def instantiate_descriptor(**field_data):
Instantiate descriptor with most properties.
"""
system = get_test_descriptor_system()
- course_key = SlashSeparatedCourseKey('org', 'course', 'run')
+ course_key = CourseLocator('org', 'course', 'run')
usage_key = course_key.make_usage_key('html', 'SampleHtml')
return system.construct_xblock_from_class(
HtmlDescriptor,
diff --git a/common/lib/xmodule/xmodule/tests/test_import.py b/common/lib/xmodule/xmodule/tests/test_import.py
index f557d7959a..cd752004eb 100644
--- a/common/lib/xmodule/xmodule/tests/test_import.py
+++ b/common/lib/xmodule/xmodule/tests/test_import.py
@@ -19,6 +19,7 @@ from xmodule.x_module import XModuleMixin
from xmodule.fields import Date
from xmodule.tests import DATA_DIR
from xmodule.modulestore.inheritance import InheritanceMixin
+from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locations import SlashSeparatedCourseKey
from xblock.core import XBlock
@@ -576,7 +577,7 @@ class ImportTestCase(BaseCourseTestCase):
modulestore = XMLModuleStore(DATA_DIR, source_dirs=['toy'])
- toy_id = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ toy_id = CourseKey.from_string('edX/toy/2012_Fall')
course = modulestore.get_course(toy_id)
chapters = course.get_children()
@@ -654,7 +655,7 @@ class ImportTestCase(BaseCourseTestCase):
"""
modulestore = XMLModuleStore(DATA_DIR, source_dirs=['toy'])
- toy_id = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ toy_id = CourseKey.from_string('edX/toy/2012_Fall')
course = modulestore.get_course(toy_id)
diff --git a/common/lib/xmodule/xmodule/tests/test_import_static.py b/common/lib/xmodule/xmodule/tests/test_import_static.py
index 10de01d2a1..68b7d9d073 100644
--- a/common/lib/xmodule/xmodule/tests/test_import_static.py
+++ b/common/lib/xmodule/xmodule/tests/test_import_static.py
@@ -4,7 +4,7 @@ Tests that check that we ignore the appropriate files when importing courses.
import unittest
from mock import Mock
from xmodule.modulestore.xml_importer import import_static_content
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from xmodule.tests import DATA_DIR
@@ -12,7 +12,7 @@ class IgnoredFilesTestCase(unittest.TestCase):
"Tests for ignored files"
def test_ignore_tilde_static_files(self):
course_dir = DATA_DIR / "tilde"
- course_id = SlashSeparatedCourseKey("edX", "tilde", "Fall_2012")
+ course_id = CourseLocator("edX", "tilde", "Fall_2012")
content_store = Mock()
content_store.generate_thumbnail.return_value = ("content", "location")
import_static_content(course_dir, content_store, course_id)
@@ -27,7 +27,7 @@ class IgnoredFilesTestCase(unittest.TestCase):
Test for ignored Mac OS metadata files (filename starts with "._")
"""
course_dir = DATA_DIR / "dot-underscore"
- course_id = SlashSeparatedCourseKey("edX", "dot-underscore", "2014_Fall")
+ course_id = CourseLocator("edX", "dot-underscore", "2014_Fall")
content_store = Mock()
content_store.generate_thumbnail.return_value = ("content", "location")
import_static_content(course_dir, content_store, course_id)
diff --git a/common/lib/xmodule/xmodule/tests/test_video.py b/common/lib/xmodule/xmodule/tests/test_video.py
index 51c43006b1..45e93fab74 100644
--- a/common/lib/xmodule/xmodule/tests/test_video.py
+++ b/common/lib/xmodule/xmodule/tests/test_video.py
@@ -24,7 +24,7 @@ import ddt
from django.conf import settings
from django.test.utils import override_settings
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from opaque_keys.edx.keys import CourseKey
from xblock.field_data import DictFieldData
from xblock.fields import ScopeIds
@@ -92,7 +92,7 @@ def instantiate_descriptor(**field_data):
Instantiate descriptor with most properties.
"""
system = get_test_descriptor_system()
- course_key = SlashSeparatedCourseKey('org', 'course', 'run')
+ course_key = CourseLocator('org', 'course', 'run')
usage_key = course_key.make_usage_key('video', 'SampleProblem')
return system.construct_xblock_from_class(
VideoDescriptor,
diff --git a/common/lib/xmodule/xmodule/tests/xml/__init__.py b/common/lib/xmodule/xmodule/tests/xml/__init__.py
index 2c777c69c6..000d5e4606 100644
--- a/common/lib/xmodule/xmodule/tests/xml/__init__.py
+++ b/common/lib/xmodule/xmodule/tests/xml/__init__.py
@@ -9,7 +9,7 @@ from unittest import TestCase
from xmodule.x_module import XMLParsingSystem, policy_key
from xmodule.mako_module import MakoDescriptorSystem
from xmodule.modulestore.xml import CourseLocationManager
-from opaque_keys.edx.locations import SlashSeparatedCourseKey, Location
+from opaque_keys.edx.keys import CourseKey
from xblock.runtime import KvsFieldData, DictKeyValueStore
@@ -19,7 +19,7 @@ class InMemorySystem(XMLParsingSystem, MakoDescriptorSystem): # pylint: disable
The simplest possible XMLParsingSystem
"""
def __init__(self, xml_import_data):
- self.course_id = SlashSeparatedCourseKey.from_deprecated_string(xml_import_data.course_id)
+ self.course_id = CourseKey.from_string(xml_import_data.course_id)
self.default_class = xml_import_data.default_class
self._descriptors = {}
diff --git a/common/static/common/js/utils/edx.utils.validate.js b/common/static/common/js/utils/edx.utils.validate.js
index a6af7aedff..94dff74add 100644
--- a/common/static/common/js/utils/edx.utils.validate.js
+++ b/common/static/common/js/utils/edx.utils.validate.js
@@ -21,7 +21,7 @@
var _fn = {
validate: {
- template: _.template('
<%= content %>
'),
+ template: _.template('
<%- content %>
'),
msg: {
email: gettext("The email address you've provided isn't formatted correctly."),
@@ -107,7 +107,7 @@
regex: new RegExp(
[
'(^[-!#$%&\'*+/=?^_`{}|~0-9A-Z]+(\\.[-!#$%&\'*+/=?^_`{}|~0-9A-Z]+)*',
- '|^"([\\001-\\010\\013\\014\\016-\\037!#-\\[\\]-\\177]|\\\\[\\001-\\011\\013\\014\\016-\\177])*"',
+ '|^"([\\001-\\010\\013\\014\\016-\\037!#-\\[\\]-\\177]|\\\\[\\001-\\011\\013\\014\\016-\\177])*"', // eslint-disable-line max-len
')@((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\\.)+[A-Z]{2,6}\\.?$)',
'|\\[(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\]$'
].join(''), 'i'
@@ -124,7 +124,7 @@
getLabel: function(id) {
// Extract the field label, remove the asterisk (if it appears) and any extra whitespace
- return $('label[for=' + id + ']').text().split('*')[0].trim();
+ return $('label[for=' + id + '] > span.label-text').text().split('*')[0].trim();
},
getMessage: function($el, tests) {
@@ -132,16 +132,21 @@
label,
context,
content,
- customMsg;
+ customMsg,
+ liveValidationMsg;
_.each(tests, function(value, key) {
if (!value) {
label = _fn.validate.getLabel($el.attr('id'));
customMsg = $el.data('errormsg-' + key) || false;
+ liveValidationMsg =
+ $('#' + $el.attr('id') + '-validation-error-msg').text() || false;
// If the field has a custom error msg attached, use it
if (customMsg) {
content = customMsg;
+ } else if (liveValidationMsg) {
+ content = liveValidationMsg;
} else {
context = {field: label};
@@ -154,7 +159,9 @@
content = _.sprintf(_fn.validate.msg[key], context);
}
- txt.push(_fn.validate.template({content: content}));
+ txt.push(_fn.validate.template({
+ content: content
+ }));
}
});
@@ -173,7 +180,7 @@
return {
validate: _fn.validate.field
};
- })();
+ }());
return utils;
});
diff --git a/common/test/acceptance/pages/lms/instructor_dashboard.py b/common/test/acceptance/pages/lms/instructor_dashboard.py
index 6b59e6ac00..ea0f7b0a1f 100644
--- a/common/test/acceptance/pages/lms/instructor_dashboard.py
+++ b/common/test/acceptance/pages/lms/instructor_dashboard.py
@@ -119,9 +119,11 @@ class InstructorDashboardPage(CoursePage):
return ecommerce_section
def is_rescore_unsupported_message_visible(self):
- return u'This component cannot be rescored.' in unicode(
- self.q(css='.request-response-error').html
- )
+ if (self.q(css='.request-response-error').present):
+ return u'This component cannot be rescored.' in unicode(
+ self.q(css='.request-response-error').html
+ )
+ return False
@staticmethod
def get_asset_path(file_name):
diff --git a/common/test/acceptance/tests/lms/test_lms.py b/common/test/acceptance/tests/lms/test_lms.py
index 116068681a..b0ef31309d 100644
--- a/common/test/acceptance/tests/lms/test_lms.py
+++ b/common/test/acceptance/tests/lms/test_lms.py
@@ -344,10 +344,7 @@ class RegisterFromCombinedPageTest(UniqueCourseTest):
# Verify that the expected errors are displayed.
errors = self.register_page.wait_for_errors()
self.assertIn(u'Please enter your Public Username.', errors)
- self.assertIn(
- u'You must agree to the édX Terms of Service and Honor Code',
- errors
- )
+ self.assertIn(u'You must agree to the édX Terms of Service and Honor Code', errors)
self.assertIn(u'Please select your Country.', errors)
self.assertIn(u'Please tell us your favorite movie.', errors)
diff --git a/common/test/acceptance/tests/lms/test_lms_courseware.py b/common/test/acceptance/tests/lms/test_lms_courseware.py
index e86fd7e78d..1219ddd1a8 100644
--- a/common/test/acceptance/tests/lms/test_lms_courseware.py
+++ b/common/test/acceptance/tests/lms/test_lms_courseware.py
@@ -285,6 +285,7 @@ class ProctoredExamTest(UniqueCourseTest):
self.assertTrue(self.courseware_page.is_timer_bar_present)
self.courseware_page.stop_timed_exam()
+ self.courseware_page.wait_for_page()
self.assertTrue(self.courseware_page.has_submitted_exam_message())
LogoutPage(self.browser).visit()
diff --git a/common/test/acceptance/tests/lms/test_lms_dashboard.py b/common/test/acceptance/tests/lms/test_lms_dashboard.py
index 06f0aaa768..62c3562f72 100644
--- a/common/test/acceptance/tests/lms/test_lms_dashboard.py
+++ b/common/test/acceptance/tests/lms/test_lms_dashboard.py
@@ -158,8 +158,6 @@ class LmsDashboardPageTest(BaseLmsDashboardTest):
"%3Futm_campaign%3Dsocial-sharing%26utm_medium%3Dsocial-post%26utm_source%3Dtwitter")
self.assertEqual(twitter_widget.attrs('title')[0], 'Share on Twitter')
self.assertEqual(twitter_widget.attrs('data-tooltip')[0], 'Share on Twitter')
- self.assertEqual(twitter_widget.attrs('aria-haspopup')[0], 'true')
- self.assertEqual(twitter_widget.attrs('aria-expanded')[0], 'false')
self.assertEqual(twitter_widget.attrs('target')[0], '_blank')
self.assertIn(twitter_url, twitter_widget.attrs('href')[0])
self.assertIn(twitter_url, twitter_widget.attrs('onclick')[0])
@@ -170,8 +168,6 @@ class LmsDashboardPageTest(BaseLmsDashboardTest):
"quote=I%27m+taking+Test")
self.assertEqual(facebook_widget.attrs('title')[0], 'Share on Facebook')
self.assertEqual(facebook_widget.attrs('data-tooltip')[0], 'Share on Facebook')
- self.assertEqual(facebook_widget.attrs('aria-haspopup')[0], 'true')
- self.assertEqual(facebook_widget.attrs('aria-expanded')[0], 'false')
self.assertEqual(facebook_widget.attrs('target')[0], '_blank')
self.assertIn(facebook_url, facebook_widget.attrs('href')[0])
self.assertIn(facebook_url, facebook_widget.attrs('onclick')[0])
diff --git a/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py b/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py
index fe1147f7a1..287b665f09 100644
--- a/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py
+++ b/common/test/acceptance/tests/lms/test_lms_instructor_dashboard.py
@@ -395,8 +395,8 @@ class ProctoredExamsTest(BaseInstructorDashboardTest):
# Stop the timed exam.
self.courseware_page.stop_timed_exam()
+ LogoutPage(self.browser).visit()
- @skip("EDUCATOR-949")
def test_can_add_remove_allowance(self):
"""
Make sure that allowances can be added and removed.
@@ -426,7 +426,6 @@ class ProctoredExamsTest(BaseInstructorDashboardTest):
# Then, the added record should be visible
self.assertTrue(allowance_section.is_allowance_record_visible)
- @skip("EDUCATOR-551, EDUCATOR-949")
def test_can_reset_attempts(self):
"""
Make sure that Exam attempts are visible and can be reset.
@@ -1375,7 +1374,6 @@ class StudentAdminTest(BaseInstructorDashboardTest):
self.username, _ = self.log_in_as_instructor()
self.instructor_dashboard_page = self.visit_instructor_dashboard()
- @skip("EDUCATOR-552, EDUCATOR-949")
def test_rescore_nonrescorable(self):
student_admin_section = self.instructor_dashboard_page.select_student_admin(StudentSpecificAdmin)
student_admin_section.set_student_email_or_username(self.username)
diff --git a/conf/locale/ar/LC_MESSAGES/django.mo b/conf/locale/ar/LC_MESSAGES/django.mo
index 7b9ef1cf80..b467626ee8 100644
Binary files a/conf/locale/ar/LC_MESSAGES/django.mo and b/conf/locale/ar/LC_MESSAGES/django.mo differ
diff --git a/conf/locale/ar/LC_MESSAGES/django.po b/conf/locale/ar/LC_MESSAGES/django.po
index 919fb47fe6..a02164c2c8 100644
--- a/conf/locale/ar/LC_MESSAGES/django.po
+++ b/conf/locale/ar/LC_MESSAGES/django.po
@@ -136,7 +136,7 @@
# طاهر , 2014
# e2f_ar r3 , 2017
# e2f_ar t3 , 2016
-# Safaa_fadl , 2014
+# Safaa_fadl , 2014
# Hassan05 , 2014
# Jad Freij , 2014
# Mahmoud Elkhateeb , 2013
@@ -146,6 +146,7 @@
# Najwan Al Rousan , 2013
# Ned Batchelder , 2016
# Omar Al-Ithawi , 2015-2016
+# Sahbi Gdaiem , 2017
# Sarina Canelake , 2014
# shefaa abu jabel , 2016-2017
# Soha Assali , 2015-2016
@@ -167,7 +168,7 @@ msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-06 15:21+0000\n"
+"POT-Creation-Date: 2017-08-01 18:56+0000\n"
"PO-Revision-Date: 2017-03-16 12:39+0000\n"
"Last-Translator: Ned Batchelder \n"
"Language-Team: Arabic (http://www.transifex.com/open-edx/edx-platform/language/ar/)\n"
@@ -396,6 +397,28 @@ msgstr ""
msgid "Verified modes cannot be free."
msgstr "لا يمكن لمسار الشهادة الموثقة أن يكون مجانياً "
+#. #-#-#-#-# django-partial.po (edx-platform) #-#-#-#-#
+#. Translators: This will look like '$50', where {currency_symbol} is a symbol
+#. such as '$' and {price} is a
+#. numerical amount in that currency. Adjust this display as needed for your
+#. language.
+#. #-#-#-#-# mako.po (edx-platform) #-#-#-#-#
+#. Translators: currency_symbol is a symbol indicating type of currency, ex
+#. "$".
+#. This string would look like this when all variables are in:
+#. "$500.00"
+#: common/djangoapps/course_modes/models.py
+#: lms/templates/shoppingcart/shopping_cart.html
+#, python-brace-format
+msgid "{currency_symbol}{price}"
+msgstr "{currency_symbol}{price}"
+
+#. Translators: This refers to the cost of the course. In this case, the
+#. course costs nothing so it is free.
+#: common/djangoapps/course_modes/models.py
+msgid "Free"
+msgstr "مجّانًا"
+
#: common/djangoapps/course_modes/models.py
msgid ""
"The time period before a course ends in which a course mode will expire"
@@ -438,6 +461,10 @@ msgstr "المشرف"
msgid "Moderator"
msgstr "مشرف المنتدى"
+#: common/djangoapps/django_comment_common/models.py
+msgid "Group Moderator"
+msgstr ""
+
#: common/djangoapps/django_comment_common/models.py
msgid "Community TA"
msgstr "مساعد أستاذ لشؤون المتعلّمين"
@@ -1945,9 +1972,8 @@ msgid "Could not interpret '{student_answer}' as a number."
msgstr "تعذّر تفسير ’{student_answer}‘ كرقم."
#: common/lib/capa/capa/responsetypes.py
-msgid ""
-"Answers can include numerals, operation signs, and a few specific "
-"characters, such as the constants e and i."
+#, python-brace-format
+msgid "You may not use variables ({bad_variables}) in numerical problems."
msgstr ""
#: common/lib/capa/capa/responsetypes.py
@@ -2068,6 +2094,11 @@ msgstr "مُقيّم خارجي"
msgid "Math Expression Input"
msgstr "إدخال تعبير رياضي"
+#: common/lib/capa/capa/responsetypes.py
+#, python-brace-format
+msgid "Invalid input: {bad_input} not permitted in answer."
+msgstr ""
+
#: common/lib/capa/capa/responsetypes.py
#, python-brace-format
msgid ""
@@ -2301,6 +2332,10 @@ msgstr "قاموس لحفظ حالة أنواع المدخلات"
msgid "Dictionary with the current student responses"
msgstr "قاموس بردود الطالب الحالية"
+#: common/lib/xmodule/xmodule/capa_base.py
+msgid "Dictionary with the current student score"
+msgstr ""
+
#: common/lib/xmodule/xmodule/capa_base.py
msgid "Whether or not the answers have been saved since last submit"
msgstr "سواء تم حفظ الإجابات أم لا منذ آخر تقديم"
@@ -2383,6 +2418,8 @@ msgstr ""
#: lms/templates/register-shib.html
#: lms/templates/peer_grading/peer_grading_problem.html
#: lms/templates/survey/survey.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
#: themes/stanford-style/lms/templates/register-shib.html
msgid "Submit"
msgstr "إرسال"
@@ -3040,6 +3077,7 @@ msgstr ""
#: common/lib/xmodule/xmodule/course_module.py
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Handouts"
msgstr "منشورات المساق"
@@ -5959,6 +5997,15 @@ msgid ""
msgstr ""
" بصفتك أحد الطلّاب، لا يمكن عرض هذا النوع من المكوّنات أثناء استعراض المساق."
+#: lms/djangoapps/courseware/models.py
+msgid ""
+"Number of days a learner has to upgrade after content is made available"
+msgstr ""
+
+#: lms/djangoapps/courseware/models.py
+msgid "Disable the dynamic upgrade deadline for this course run."
+msgstr ""
+
#: lms/djangoapps/courseware/tabs.py lms/templates/courseware/syllabus.html
msgid "Syllabus"
msgstr "مخطّط المنهج الدراسي"
@@ -5976,27 +6023,28 @@ msgstr "العلامات"
msgid "Textbooks"
msgstr "الكتب"
-#. #-#-#-#-# django-partial.po (edx-platform) #-#-#-#-#
-#. Translators: This will look like '$50', where {currency_symbol} is a symbol
-#. such as '$' and {price} is a
-#. numerical amount in that currency. Adjust this display as needed for your
-#. language.
-#. #-#-#-#-# mako.po (edx-platform) #-#-#-#-#
-#. Translators: currency_symbol is a symbol indicating type of currency, ex
-#. "$".
-#. This string would look like this when all variables are in:
-#. "$500.00"
#: lms/djangoapps/courseware/views/views.py
-#: lms/templates/shoppingcart/shopping_cart.html
#, python-brace-format
-msgid "{currency_symbol}{price}"
-msgstr "{currency_symbol}{price}"
+msgid "To see course content, {sign_in_link} or {register_link}."
+msgstr ""
-#. Translators: This refers to the cost of the course. In this case, the
-#. course costs nothing so it is free.
#: lms/djangoapps/courseware/views/views.py
-msgid "Free"
-msgstr "مجّانًا"
+msgid "sign in"
+msgstr ""
+
+#: lms/djangoapps/courseware/views/views.py
+msgid "register"
+msgstr ""
+
+#: lms/djangoapps/courseware/views/views.py
+#, python-brace-format
+msgid ""
+"You must be enrolled in the course to see course content. {enroll_link}."
+msgstr ""
+
+#: lms/djangoapps/courseware/views/views.py
+msgid "Enroll now"
+msgstr ""
#: lms/djangoapps/courseware/views/views.py
msgid "Your enrollment: Audit track"
@@ -7478,6 +7526,14 @@ msgstr "عمليات تمديد تاريخ الاستحقاق لـ {0} {1} ({2})
msgid "This component cannot be rescored."
msgstr ""
+#: lms/djangoapps/instructor_task/api_helper.py
+msgid "This component does not support score override."
+msgstr ""
+
+#: lms/djangoapps/instructor_task/api_helper.py
+msgid "Scores must be between 0 and the value of the problem."
+msgstr ""
+
#: lms/djangoapps/instructor_task/api_helper.py
msgid "Not all problems in entrance exam support re-scoring."
msgstr "لا تدعم جميع مسائل امتحان الدخول ميّزة إعادة التقييم."
@@ -7488,6 +7544,12 @@ msgstr "لا تدعم جميع مسائل امتحان الدخول ميّزة
msgid "rescored"
msgstr "إعادة التقييم"
+#. Translators: This is a past-tense verb that is inserted into task progress
+#. messages as {action}.
+#: lms/djangoapps/instructor_task/tasks.py
+msgid "overridden"
+msgstr ""
+
#. Translators: This is a past-tense verb that is inserted into task progress
#. messages as {action}.
#: lms/djangoapps/instructor_task/tasks.py
@@ -7792,10 +7854,25 @@ msgid ""
"configurations."
msgstr ""
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid ""
+"This unit's access settings refer to deleted or invalid group "
+"configurations."
+msgstr ""
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid "This component's access settings refer to deleted or invalid groups."
msgstr ""
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid "This unit's access settings refer to deleted or invalid groups."
+msgstr ""
+
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid ""
+"This component's access settings contradict its parent's access settings."
+msgstr ""
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid "Whether to display this module in the table of contents"
msgstr "فيما إذا ستُعرض هذه الوحدة في فهرس المحتويات"
@@ -9364,6 +9441,11 @@ msgid ""
"opportunities from the world's best universities."
msgstr ""
+#: lms/templates/emails/password_reset_subject.txt
+#, python-format
+msgid "Password reset on %(platform_name)s"
+msgstr ""
+
#: lms/templates/logout.html
msgid "Signed Out"
msgstr "سُجِّل خروجك"
@@ -9406,9 +9488,6 @@ msgstr ""
"ترغب بمنع هذه الصلاحيات، انقر على زر \"إلغاء\"."
#: lms/templates/oauth2_provider/authorize.html
-#: cms/templates/course-create-rerun.html cms/templates/index.html
-#: cms/templates/manage_users.html cms/templates/manage_users_lib.html
-#: lms/templates/modal/accessible_confirm.html
msgid "Cancel"
msgstr "إلغاء"
@@ -9426,10 +9505,8 @@ msgstr "حدث خطأ"
#, python-format
msgid ""
"You're receiving this e-mail because you requested a password reset for your"
-" user account at %(site_name)s."
+" user account at %(platform_name)s."
msgstr ""
-"وصلتك رسالة البريد الالكتروني هذه بناءً على طلبك بتغيير كلمة المرور لحسابك "
-"على %(site_name)s."
#: lms/templates/registration/password_reset_email.html
msgid "Please go to the following page and choose a new password:"
@@ -9550,7 +9627,6 @@ msgstr "معاينة"
#: lms/templates/instructor/instructor_dashboard_2/metrics.html
#: lms/templates/instructor/instructor_dashboard_2/set_course_mode_price_modal.html
#: lms/templates/modal/_modal-settings-language.html
-#: lms/templates/modal/accessible_confirm.html
#: themes/edx.org/lms/templates/dashboard.html
msgid "Close"
msgstr "إغلاق "
@@ -9817,6 +9893,8 @@ msgstr ""
#: lms/templates/courseware/courses.html
#: lms/templates/courseware/courseware.html
#: lms/templates/edxnotes/edxnotes.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
#: themes/edx.org/lms/templates/dashboard.html
#: themes/stanford-style/lms/templates/index.html
msgid "Search"
@@ -10239,6 +10317,22 @@ msgstr "إعادة تعيين اللغة على رمز اللغة الافترا
msgid "Language reset to user's preference: {preview_language_code}"
msgstr "إعادة تعيين اللغة على تفضيل المستخدم: {preview_language_code}"
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a test message"
+msgstr ""
+
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a success message"
+msgstr ""
+
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a test warning"
+msgstr ""
+
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a test error"
+msgstr ""
+
#: openedx/core/djangoapps/embargo/forms.py
#: openedx/core/djangoapps/verified_track_content/forms.py
msgid "COURSE NOT FOUND. Please check that the course ID is valid."
@@ -10375,6 +10469,25 @@ msgstr ""
msgid "Enable course home page improvements."
msgstr "فعّل ميزة تحسين الصفحة الرئيسية للمساق."
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Site theme changed to {site_theme}"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Theme {site_theme} does not exist"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+msgid "Site theme reverted to the default"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Theming Administration"
+msgstr ""
+
#: openedx/core/djangoapps/user_api/accounts/api.py
#, python-brace-format
msgid "The '{field_name}' field cannot be edited."
@@ -10617,6 +10730,11 @@ msgstr "يجب الموافقة على {terms_of_service} الخاصة بمنص
msgid "Review the Terms of Service"
msgstr "استعراض شروط الخدمة"
+#: openedx/core/djangoapps/util/user_messages.py
+#, python-brace-format
+msgid "{header_open}{title}{header_close}{body}"
+msgstr ""
+
#: openedx/core/djangoapps/verified_track_content/models.py
msgid "The course key for the course we would like to be auto-cohorted."
msgstr "مفتاح الدورة للدورة التدريبية التي تود جعلها تشعبية بشكل تلقائي. "
@@ -11365,7 +11483,7 @@ msgstr "المحتوى"
#: lms/templates/courseware/courses.html lms/templates/edxnotes/edxnotes.html
#: lms/templates/instructor/instructor_dashboard_2/certificates.html
#: lms/templates/instructor/instructor_dashboard_2/metrics.html
-#: lms/templates/student_profile/learner_profile.html
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
msgid "Loading"
msgstr "جاري التحميل"
@@ -11382,6 +11500,16 @@ msgstr "الإعدادات"
msgid "Course Number"
msgstr "رقم المساق "
+#: cms/templates/course_outline.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Course Outline"
+msgstr ""
+
+#: cms/templates/course_outline.html cms/templates/index.html
+#: openedx/features/course_experience/templates/course_experience/welcome-message-fragment.html
+msgid "Dismiss"
+msgstr ""
+
#: cms/templates/course_outline.html
#: lms/templates/instructor/instructor_dashboard_2/course_info.html
msgid "Course Start Date:"
@@ -11409,7 +11537,6 @@ msgstr "رقم المساق: "
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Courses"
msgstr "المساقات"
@@ -11500,11 +11627,14 @@ msgstr "عرض"
#: cms/templates/darklang/preview_lang.html
#: lms/templates/darklang/preview_lang.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
msgid "Preview Language Setting"
msgstr "معاينة إعداد اللغة"
#: cms/templates/maintenance/_force_publish_course.html
#: lms/templates/problem.html lms/templates/shoppingcart/shopping_cart.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
msgid "Reset"
msgstr "إعادة الضبط"
@@ -11514,6 +11644,11 @@ msgstr "إعادة الضبط"
msgid "Legal"
msgstr "القانوني"
+#: cms/templates/widgets/header.html
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "Updates"
+msgstr ""
+
#: cms/templates/widgets/header.html lms/templates/navigation/navigation.html
#: lms/templates/widgets/footer-language-selector.html
msgid "Choose Language"
@@ -11597,7 +11732,6 @@ msgid "Usermenu dropdown"
msgstr "قائمة المستخدم"
#: cms/templates/widgets/user_dropdown.html lms/templates/user_dropdown.html
-#: themes/red-theme/lms/templates/header.html
msgid "Sign Out"
msgstr "تسجيل الخروج"
@@ -11803,12 +11937,10 @@ msgid "Go back to the {link_start}home page{link_end}."
msgstr "العودة إلى {link_start}الصفحة الرئيسية{link_end}."
#: lms/templates/email_change_successful.html
-#: lms/templates/emails_change_successful.html
msgid "E-mail change successful!"
msgstr "جرت عملية تغيير عنوان البريد الإلكتروني بنجاح!"
#: lms/templates/email_change_successful.html
-#: lms/templates/emails_change_successful.html
msgid "You should see your new email in your {link_start}dashboard{link_end}."
msgstr ""
"سيظهر عنوان بريدك الإلكتروني الجديد في {link_start}لوحة المعلومات{link_end} "
@@ -12819,14 +12951,18 @@ msgid "Add comment"
msgstr "إضافة تعليق"
#: lms/templates/staff_problem_info.html
-msgid "Staff Debug"
-msgstr "تصحيح أخطاء طاقم المساق"
+msgid "Staff Debug:"
+msgstr ""
#: lms/templates/staff_problem_info.html
#: lms/templates/instructor/instructor_dashboard_2/e-commerce.html
msgid "Actions"
msgstr "العمليات"
+#: lms/templates/staff_problem_info.html
+msgid "Score (for override only)"
+msgstr ""
+
#: lms/templates/staff_problem_info.html
msgid "Reset Learner's Attempts to Zero"
msgstr "تغيير عدد محاولات المتعلم إلى صفر"
@@ -12846,6 +12982,10 @@ msgstr "إعادة تقييم ورقة المتعلم"
msgid "Rescore Only If Score Improves"
msgstr "إعادة التقييم فقط في حالة تحسن النتيجة"
+#: lms/templates/staff_problem_info.html
+msgid "Override Score"
+msgstr ""
+
#: lms/templates/staff_problem_info.html
msgid "Module Fields"
msgstr "حقول الوحدة الدراسية"
@@ -13064,7 +13204,7 @@ msgstr ""
"الخاصّة بك {link_end}. أما إذا لم تقصد القيام بذلك، يُمكنك "
"{undo_link_start}إعادة التسجيل{link_end}."
-#: lms/templates/user_dropdown.html themes/red-theme/lms/templates/header.html
+#: lms/templates/user_dropdown.html
msgid "Dashboard for:"
msgstr "لوحة المعلومات لـ:"
@@ -14199,6 +14339,7 @@ msgid "Auto Enroll"
msgstr "التسجيل الآلي "
#: lms/templates/ccx/enrollment.html
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
"If this option is {em_start}checked{em_end}, users who have not yet "
"registered for {platform_name} will be automatically enrolled."
@@ -14207,6 +14348,7 @@ msgstr ""
"يتم تسجيلهم بعد في {platform_name} سيتم إدراجهم تلقائياً."
#: lms/templates/ccx/enrollment.html
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
"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 "
@@ -14228,6 +14370,7 @@ msgid "Notify users by email"
msgstr "إعلام المستخدمين عبر البريد الإلكتروني"
#: lms/templates/ccx/enrollment.html
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
"If this option is {em_start}checked{em_end}, users will receive an email "
"notification."
@@ -14631,6 +14774,7 @@ msgstr "{span_start}القسم الحالي{span_end}"
#: lms/templates/courseware/accordion.html
#: lms/templates/courseware/progress.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "due {date}"
msgstr "تاريخ الاستحقاق {date}"
@@ -14639,6 +14783,7 @@ msgid "{section_format} due {{date}}"
msgstr "{section_format} مستحق في {{date}}"
#: lms/templates/courseware/accordion.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "This content is graded"
msgstr "جرى تقييم هذا المحتوى"
@@ -14788,6 +14933,7 @@ msgstr "خصِّص بحثك"
#: lms/templates/courseware/courseware-chromeless.html
#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "{course_number} Courseware"
msgstr "محتويات المساق {course_number}"
@@ -14800,7 +14946,8 @@ msgstr "خدمات المساق"
msgid "Courseware"
msgstr "محتويات المساق"
-#: lms/templates/courseware/courseware.html lms/templates/courseware/info.html
+#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "Bookmarks"
msgstr "العلامات"
@@ -14862,6 +15009,8 @@ msgid "Welcome to {org}'s {course_name}!"
msgstr "مرحبًا بك في المساق {course_name} التابع للمؤسسة {org}!"
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "Resume Course"
msgstr "تابع المساق"
@@ -14878,13 +15027,10 @@ msgid "Handout Navigation"
msgstr "تصفّح النشرات "
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Tools"
msgstr ""
-#: lms/templates/courseware/info.html
-msgid "Reviews"
-msgstr ""
-
#: lms/templates/courseware/news.html
msgid "News - MITx 6.002x"
msgstr "أخبار- MITx 6.002x "
@@ -17712,32 +17858,6 @@ 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 "تسجيل الطلاب"
@@ -17776,11 +17896,9 @@ msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
-"If this option is checked, users who have not enrolled in your "
-"course will be automatically enrolled."
+"If this option is {em_start}checked{em_end}, users who have not enrolled in "
+"your course will be automatically enrolled."
msgstr ""
-"في حال تم التحقق من هذا الخيار، فإنّ المستخدمين الذين لم يقوموا "
-"بالتسجيل بعد في المساق، سيتم إلحاقهم به تلقائيّاً."
#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid "Checking this box has no effect if 'Remove beta testers' is selected."
@@ -17914,16 +18032,30 @@ msgid "Add Moderator"
msgstr "إضافة مشرف للمنتدى "
#: lms/templates/instructor/instructor_dashboard_2/membership.html
-msgid "Discussion Community TAs"
-msgstr "مساعدو مشرفي منتدى النقاش"
+msgid "Group Community TA"
+msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
-"Community TAs are members of the community whom you deem particularly "
-"helpful on the discussion boards. They can edit or delete any post, clear "
-"misuse flags, close and re-open threads, endorse responses, and see posts "
-"from all groups. Their posts are marked as 'Community TA'. Only enrolled "
-"users can be added as Community TAs."
+"Group Community TAs are members of the community who help course teams "
+"moderate discussions. Group Community TAs see only posts by learners in "
+"their assigned group. They can edit or delete posts, clear flags, close and "
+"re-open threads, and endorse responses, but only for posts by learners in "
+"their group. Their posts are marked as 'Community TA'. Only enrolled "
+"learners can be added as Group Community TAs."
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
+msgid "Add Group Community TA"
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
+msgid ""
+"Community TAs are members of the community who help course teams moderate "
+"discussions. They can see posts by all learners, and can edit or delete "
+"posts, clear flags, close or re-open threads, and endorse responses. Their "
+"posts are marked as 'Community TA'. Only enrolled learners can be added as "
+"Community TAs."
msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/membership.html
@@ -18167,9 +18299,8 @@ msgid "View a specific learner's grades and progress"
msgstr "عرض علامات وتقدم أحد الطلاب."
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
-msgid "Learner's {platform_name} email address or username *"
+msgid "Learner's {platform_name} email address or username"
msgstr ""
-"عنوان البريد الإلكتروني {platform_name} للمتعلم أو اسم المستخدم الخاص به *"
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
msgid "Learner email address or username"
@@ -18184,8 +18315,8 @@ msgid "Adjust a learner's grade for a specific problem"
msgstr "تعديل درجات الطالب في مسألة محددة"
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
-msgid "Location of problem in course *"
-msgstr "موقع المسألة في الدورة *"
+msgid "Location of problem in course"
+msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
msgid "Example"
@@ -18222,6 +18353,23 @@ msgstr ""
" في حالة تحسن النتيجة\" بتحديث نتيجة الطالب فقط في حالة تغير النتيجة لصالح "
"الطالب."
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid "Score Override"
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid "For the specified problem, override the learner's score."
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid ""
+"New score for problem, out of the total points available for the problem"
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid "Override Learner's Score"
+msgstr ""
+
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
msgid "Problem History"
msgstr "تاريخ المسألة"
@@ -18344,7 +18492,6 @@ msgstr "تفاصيل البرنامج"
#: lms/templates/navigation/navbar-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Programs"
msgstr "البرامج"
@@ -18367,28 +18514,9 @@ msgid ""
msgstr ""
"لم تجد لغتك المفضّلة؟ {link_start}تطوّع لتقوم بدور المترجم! {link_end}"
-#: lms/templates/modal/accessible_confirm.html
-msgid "Confirm"
-msgstr "تأكيد"
-
-#. Translators: this text gives status on if the modal interface (a menu or
-#. piece of UI that takes the full focus of the screen) is open or not
-#: lms/templates/modal/accessible_confirm.html
-msgid "modal open"
-msgstr "مفتوح بشكل مشروط"
-
-#: lms/templates/modal/accessible_confirm.html
-msgid "OK"
-msgstr "موافق"
-
-#: lms/templates/modal/accessible_confirm.html
-msgid "open"
-msgstr "افتح"
-
#. Translators: This is short for "System administration".
#: lms/templates/navigation/navbar-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
-#: themes/red-theme/lms/templates/header.html
msgid "Sysadmin"
msgstr "المشرف على النظام"
@@ -18396,27 +18524,23 @@ msgstr "المشرف على النظام"
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
#: lms/templates/shoppingcart/shopping_cart.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Shopping Cart"
msgstr "سلّة التسوّق"
#: lms/templates/navigation/navbar-logo-header.html
#: lms/templates/navigation/bootstrap/navbar-logo-header.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "{platform_name} Home Page"
msgstr "الصفحة الرئيسية لمنصّة {platform_name}"
#: lms/templates/navigation/navbar-not-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "How it Works"
msgstr "كيفية العمل"
#: lms/templates/navigation/navbar-not-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
-#: themes/red-theme/lms/templates/header.html
msgid "Schools"
msgstr "المدارس"
@@ -18427,12 +18551,10 @@ msgstr "استكشاف الدورات التدريبية"
#: lms/templates/navigation/navbar-not-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Sign in"
msgstr "تسجيل الدخول"
#: lms/templates/navigation/navigation.html
-#: themes/red-theme/lms/templates/header.html
msgid "Global"
msgstr "عالمي"
@@ -19261,7 +19383,6 @@ msgid "Currently the {platform_name} servers are overloaded"
msgstr "تعمل مخدمات المنصة {platform_name} حالياً بمستوى تحميل يتجاوز طاقتها"
#: lms/templates/student_account/account_settings.html
-#: themes/red-theme/lms/templates/header.html
msgid "Account Settings"
msgstr "إعدادات الحساب"
@@ -19273,40 +19394,6 @@ msgstr "يرجى الانتظار"
msgid "Sign in or Register"
msgstr "يرجى تسجيل الدخول أو التسجيل"
-#: lms/templates/student_profile/learner_profile.html
-msgid "Learner Profile"
-msgstr "الملف الشخصي للمتعلّم"
-
-#. Translators: this section lists all the third-party authentication
-#. providers
-#. (for example, Google and LinkedIn) the user can link with or unlink from
-#. their edX account.
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Connected Accounts"
-msgstr "الحسابات المترابطة"
-
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Linked"
-msgstr "مربوط"
-
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Not Linked"
-msgstr "غير مربوط"
-
-#. Translators: clicking on this removes the link between a user's edX account
-#. and their account with an external authentication provider (like Google or
-#. LinkedIn).
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Unlink"
-msgstr "افصل"
-
-#. Translators: clicking on this creates a link between a user's edX account
-#. and their account with an external authentication provider (like Google or
-#. LinkedIn).
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Link"
-msgstr "اربط"
-
#: lms/templates/support/certificates.html lms/templates/support/index.html
msgid "Student Support"
msgstr "دعم الطلاب"
@@ -19510,7 +19597,8 @@ msgstr "العودة إلى لوحة المعلومات"
#: lms/templates/widgets/cookie-consent.html
msgid ""
"This website uses cookies to ensure you get the best experience on our "
-"website."
+"website. If you continue browsing this site, we understand that you accept "
+"the use of cookies."
msgstr ""
#: lms/templates/widgets/cookie-consent.html
@@ -19541,6 +19629,134 @@ msgstr ""
msgid "Add article"
msgstr "إضافة مقال"
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Language Code"
+msgstr ""
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "For example use en for English"
+msgstr ""
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Please refresh the page to see the changes applied."
+msgstr ""
+
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Preview Theme"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "All Rights Reserved"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Attribution"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Noncommercial"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "No Derivatives"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Share Alike"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Creative Commons licensed content, with terms as follow:"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Some Rights Reserved"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Important Course Dates"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Today is {date}"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search the course"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Start Course"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "{subsection_format} due {{date}}"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This is your last visited course section."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This course has not started yet."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "We're still working on course content."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid ""
+"This course has not started yet, and will launch on {launch_date_html}."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-reviews-fragment.html
+msgid "Reviews"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "This course does not have any updates."
+msgstr ""
+
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search Results"
+msgstr ""
+
+#. Translators: this section lists all the third-party authentication
+#. providers
+#. (for example, Google and LinkedIn) the user can link with or unlink from
+#. their edX account.
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Connected Accounts"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Linked"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Not Linked"
+msgstr ""
+
+#. Translators: clicking on this removes the link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Unlink"
+msgstr ""
+
+#. Translators: clicking on this creates a link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Link"
+msgstr ""
+
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
+msgid "Learner Profile"
+msgstr ""
+
#: themes/edx.org/cms/templates/widgets/sock.html
msgid ""
"Access Course Staff Support on the Partner Portal to submit or review "
@@ -19587,7 +19803,6 @@ msgid "Main"
msgstr ""
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Find Courses"
msgstr "إيجاد المساقات"
@@ -19621,18 +19836,6 @@ msgstr ""
"{tos_link_start}شروط الخدمة{tos_link_end} و{honor_link_start}ميثاق "
"الشرف{honor_link_end}"
-#: themes/red-theme/lms/templates/header.html
-msgid "More options dropdown"
-msgstr "قائمة منسدلة لخيارات إضافية"
-
-#: themes/red-theme/lms/templates/header.html
-msgid "My Profile"
-msgstr "ملفي الشخصي"
-
-#: themes/red-theme/lms/templates/header.html
-msgid "Register Now"
-msgstr "سجِّل الآن"
-
#: themes/stanford-style/lms/templates/footer.html
#: themes/stanford-style/lms/templates/static_templates/tos.html
msgid "Copyright"
@@ -19820,19 +20023,14 @@ msgstr ""
msgid "Files & Uploads"
msgstr "الملفات والتحميل "
-#: cms/templates/asset_index.html cms/templates/container.html
-#: cms/templates/course-create-rerun.html cms/templates/course_info.html
-#: cms/templates/course_outline.html cms/templates/edit-tabs.html
-#: cms/templates/index.html cms/templates/library.html
-#: cms/templates/manage_users.html cms/templates/manage_users_lib.html
-#: cms/templates/textbooks.html cms/templates/videos_index.html
-msgid "Page Actions"
-msgstr "عمليات الصفحة"
-
#: cms/templates/asset_index.html cms/templates/videos_index.html
msgid "Upload New File"
msgstr "تحميل ملف جديد"
+#: cms/templates/asset_index.html
+msgid "Help adding Files and Uploads"
+msgstr ""
+
#: cms/templates/asset_index.html
msgid "Adding Files for Your Course"
msgstr "جاري إضافة ملفّات إلى مساقك"
@@ -20048,6 +20246,15 @@ msgstr "حذف هذا المكوِّن"
msgid "Drag to reorder"
msgstr "السحب لإعادة الترتيب"
+#: cms/templates/container.html cms/templates/course-create-rerun.html
+#: cms/templates/course_info.html cms/templates/course_outline.html
+#: cms/templates/edit-tabs.html cms/templates/index.html
+#: cms/templates/library.html cms/templates/manage_users.html
+#: cms/templates/manage_users_lib.html cms/templates/textbooks.html
+#: cms/templates/videos_index.html
+msgid "Page Actions"
+msgstr "عمليات الصفحة"
+
#: cms/templates/container.html
msgid "Open the courseware in the LMS"
msgstr "فتح محتويات المساق في نظام إدارة التعلّم LMS"
@@ -20306,10 +20513,6 @@ msgstr ""
" الضوء على مناقشات معيّنة في المنتديات، والإعلان عن التغييرات المُدخلة على "
"الجدول، والردّ على أسئلة الطلّاب. ويمكنك إضافة تحديثات أو تعديلها بلغة HTML."
-#: cms/templates/course_outline.html
-msgid "Course Outline"
-msgstr "المخطّط الكلّي للمساق"
-
#: cms/templates/course_outline.html
msgid ""
"This course was created as a re-run. Some manual configuration is needed."
@@ -20328,10 +20531,6 @@ msgstr ""
"الدورة التدريبية؛ إعداد فريق الدورة التدريبية؛ مراجعة تحديثات الدورة "
"التدريبية وغيرها من الأصول للمواد المؤرخة؛ وتنظيم المناقشات والويكي."
-#: cms/templates/course_outline.html cms/templates/index.html
-msgid "Dismiss"
-msgstr "رفض العملية"
-
#: cms/templates/course_outline.html
msgid "Warning"
msgstr "تحذير"
@@ -21689,10 +21888,6 @@ msgstr ""
msgid "For example, MITx"
msgstr ""
-#: cms/templates/index.html
-msgid "Show content libraries"
-msgstr ""
-
#: cms/templates/index.html
msgid "Courses Being Processed"
msgstr "المساقات الجاري معالجتها"
@@ -22389,6 +22584,14 @@ msgstr "اليوم الأخير الذي يكون فيه المساق مفعّل
msgid "Course End Time"
msgstr "وقت انتهاء المساق"
+#: cms/templates/settings.html
+msgid "Certificates Available Date"
+msgstr ""
+
+#: cms/templates/settings.html
+msgid "By default, 48 hours after course end date"
+msgstr ""
+
#: cms/templates/settings.html
msgid "Enrollment Start Date"
msgstr "تاريخ بدء التسجيل"
@@ -23068,18 +23271,35 @@ msgstr ""
msgid "Access is not restricted"
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"Access to this unit is not restricted, but visibility might be affected by "
+"inherited settings."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"Access to this component is not restricted, but visibility might be affected"
" by inherited settings."
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific enrollment "
+"tracks or content groups."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific enrollment"
" tracks or content groups."
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific content groups."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific content "
@@ -23121,8 +23341,8 @@ msgstr ""
#: cms/templates/visibility_editor.html
msgid ""
-"This group no longer exists. Choose another group or do not restrict access "
-"to this component."
+"This group no longer exists. Choose another group or remove the access "
+"restriction."
msgstr ""
#: cms/templates/emails/activation_email.txt
@@ -23288,10 +23508,6 @@ msgstr "تصفّح المساق"
msgid "Outline"
msgstr "المخطّط الكلّي"
-#: cms/templates/widgets/header.html
-msgid "Updates"
-msgstr "التحديثات"
-
#: cms/templates/widgets/header.html
msgid "Import"
msgstr "استيراد"
diff --git a/conf/locale/ar/LC_MESSAGES/djangojs.mo b/conf/locale/ar/LC_MESSAGES/djangojs.mo
index 2a330e6c26..719ea97f6c 100644
Binary files a/conf/locale/ar/LC_MESSAGES/djangojs.mo and b/conf/locale/ar/LC_MESSAGES/djangojs.mo differ
diff --git a/conf/locale/ar/LC_MESSAGES/djangojs.po b/conf/locale/ar/LC_MESSAGES/djangojs.po
index 4319030425..b5ce303bff 100644
--- a/conf/locale/ar/LC_MESSAGES/djangojs.po
+++ b/conf/locale/ar/LC_MESSAGES/djangojs.po
@@ -124,8 +124,8 @@ msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-06 15:20+0000\n"
-"PO-Revision-Date: 2017-07-06 15:25+0000\n"
+"POT-Creation-Date: 2017-08-01 18:55+0000\n"
+"PO-Revision-Date: 2017-07-20 11:59+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"
@@ -235,7 +235,7 @@ msgstr "جاري التحميل"
#: common/static/common/templates/discussion/alert-popup.underscore
#: common/static/common/templates/discussion/forum-action-close.underscore
#: common/static/common/templates/discussion/search-alert.underscore
-#: lms/templates/student_profile/share_modal.underscore
+#: openedx/features/learner_profile/static/learner_profile/templates/share_modal.underscore
msgid "Close"
msgstr "إغلاق"
@@ -2755,7 +2755,6 @@ msgstr ""
"اللغة الرئيسية التي يعتمدها أفراد الفريق بشكل أساسي للتواصل فيما بينهم"
#: lms/djangoapps/teams/static/teams/js/views/edit_team.js
-#: lms/static/js/student_profile/views/learner_profile_factory.js
msgid "Country"
msgstr "البلد"
@@ -3855,7 +3854,6 @@ msgstr "وسم رمز التسجيل على أنّه غير مستخدم"
#: lms/static/js/instructor_dashboard/membership.js
#: lms/static/js/student_account/views/account_settings_factory.js
-#: lms/static/js/student_profile/views/learner_profile_factory.js
#: lms/templates/financial-assistance/financial_assessment_form.underscore
msgid "Username"
msgstr "اسم المستخدم"
@@ -3868,6 +3866,10 @@ msgstr "البريد الإلكتروني"
msgid "Revoke access"
msgstr "إلغاء صلاحيات الوصول"
+#: lms/static/js/instructor_dashboard/membership.js
+msgid "Group"
+msgstr ""
+
#: lms/static/js/instructor_dashboard/membership.js
msgid "Enter username or email"
msgstr "أدخل اسم المستخدم أو البريد الإلكتروني"
@@ -3876,6 +3878,10 @@ msgstr "أدخل اسم المستخدم أو البريد الإلكتروني"
msgid "Please enter a username or email."
msgstr "يُرجى إدخال اسم مستخدم او عنوان بريد إلكتروني."
+#: lms/static/js/instructor_dashboard/membership.js
+msgid "This role requires a divided discussions scheme."
+msgstr ""
+
#: lms/static/js/instructor_dashboard/membership.js
msgid "Error changing user's permissions."
msgstr "نأسف لحدوث خطأ في تغيير صلاحيات المستخدم."
@@ -4281,6 +4287,24 @@ msgstr ""
"للطالب صاحب الرقم ’<%- student_id %>‘. تأكد من إدخال هذان المُعطيان بشكل "
"صحيح"
+#: lms/static/js/instructor_dashboard/student_admin.js
+msgid "Please enter a score."
+msgstr ""
+
+#: lms/static/js/instructor_dashboard/student_admin.js
+msgid ""
+"Started task to override the score for problem '<%- problem_id %>' and "
+"student '<%- student_id %>'. Click the 'Show Task Status' button to see the "
+"status of the task."
+msgstr ""
+
+#: lms/static/js/instructor_dashboard/student_admin.js
+msgid ""
+"Error starting a task to override score for problem '<%- problem_id %>' for "
+"student '<%- student_id %>'. Make sure that the the score and the problem "
+"and student identifiers are complete and correct."
+msgstr ""
+
#: lms/static/js/instructor_dashboard/student_admin.js
msgid ""
"Started entrance exam rescore task for student '{student_id}'. Click the "
@@ -4488,6 +4512,14 @@ msgstr "تمت بنجاح عملية إعادة تقييم المسألة لتح
msgid "Failed to rescore problem to improve score for user."
msgstr "عذراً، لم تنجح عملية إعادة تقييم المسألة بهدف تحسين نتيجة المستخدم."
+#: lms/static/js/staff_debug_actions.js
+msgid "Successfully overrode problem score for {user}"
+msgstr ""
+
+#: lms/static/js/staff_debug_actions.js
+msgid "Could not override problem score for {user}."
+msgstr ""
+
#: lms/static/js/student_account/account.js
msgid "The data could not be saved."
msgstr "تعذّر حفظ البيانات."
@@ -4728,7 +4760,6 @@ msgid "Year of Birth"
msgstr "سنة الميلاد"
#: lms/static/js/student_account/views/account_settings_factory.js
-#: lms/static/js/student_profile/views/learner_profile_factory.js
msgid "Preferred Language"
msgstr "اللغة المفضّلة"
@@ -4848,84 +4879,6 @@ msgstr "معلومات الحساب"
msgid "Order History"
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} رؤية:"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Limited Profile"
-msgstr "ملفّي الشخصي المحدود"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Full Profile"
-msgstr "كامل ملفّي الشخصي"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Add Country"
-msgstr "إضافة البلد"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Add language"
-msgstr "إضافة اللغة"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "About me"
-msgstr "نبذة عني"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid ""
-"Tell other learners a little about yourself: where you live, what your "
-"interests are, why you're taking courses, or what you hope to learn."
-msgstr ""
-"تفضّل بإعطاء المتعلّمين الآخرين فكرة عامة عنك: مكان سكنك، اهتماماتك، سبب "
-"التحاقك بهذه المساقات، أو ما ترغب في تعلّمه."
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid "Account Settings page."
-msgstr "صفحة إعدادات الحساب"
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid ""
-"You must specify your birth year before you can share your full profile. To "
-"specify your birth year, go to the {account_settings_page_link}"
-msgstr ""
-"يجب أن تحدّد سنة ميلادك قبل أن تتمكّن من مشاركة صفحتك الشخصية بأكملها. "
-"ولتحدّد سنة ميلادك، يُرجى الانتقال إلى صفحة إعدادات الحساب "
-"{account_settings_page_link}."
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid ""
-"You must be over 13 to share a full profile. If you are over 13, make sure "
-"that you have specified a birth year on the {account_settings_page_link}"
-msgstr ""
-"يجب أن يكون عمرك ما فوق 13 سنة لتتمكّن من مشاركة صفحتك الشخصية بأكملها. فإذا"
-" كان عمرك ما فوق 13 سنة، يُرجى التأكّد من أنّك حدّدت سنة ميلادك في صفحة "
-"الإعدادات {account_settings_page_link}."
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid "Profile Image"
-msgstr "صورة الملف الشخصي"
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-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 "نأسف لحدوث خطأ في تحميل الصورة"
@@ -5394,6 +5347,11 @@ msgstr "يجب أن يأتي تاريخ انتهاء المساق بعد تار
msgid "The course start date must be later than the enrollment start date."
msgstr "يجب أن يأتي تاريخ بدء المساق بعد تاريخ التسجيل فيه."
+#: cms/static/js/models/settings/course_details.js
+msgid ""
+"The certificate available date must be later than the enrollment start date."
+msgstr ""
+
#: cms/static/js/models/settings/course_details.js
msgid "The enrollment start date cannot be after the enrollment end date."
msgstr ""
@@ -5467,6 +5425,10 @@ msgstr ""
msgid "or"
msgstr "أو"
+#: cms/static/js/models/xblock_validation.js
+msgid "This unit has validation issues."
+msgstr ""
+
#: cms/static/js/models/xblock_validation.js
msgid "This component has validation issues."
msgstr "هناك إشكالات في المصادقة على هذا المكوِّن."
@@ -5654,16 +5616,18 @@ msgstr "ليس قيد الاستخدام"
#. Translators: 'count' is number of units that the group
#. configuration is used in.
+#. Translators: 'count' is number of locations that the group
+#. configuration is used in.
#: cms/static/js/views/group_configuration_details.js
#: cms/static/js/views/partition_group_details.js
-msgid "Used in {count} unit"
-msgid_plural "Used in {count} units"
-msgstr[0] "مستخدم في {count} وحدة"
-msgstr[1] "مستخدم في {count} وحدة"
-msgstr[2] "مستخدم في {count} وحدة"
-msgstr[3] "مستخدم في {count} وحدة"
-msgstr[4] "مستخدم في {count} وحدة"
-msgstr[5] "مستخدم في {count} وحدة"
+msgid "Used in {count} location"
+msgid_plural "Used in {count} locations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
#. Translators: this refers to a collection of groups.
#: cms/static/js/views/group_configuration_item.js
@@ -5824,10 +5788,6 @@ msgstr "هل أنت متأكد من رغبتك في تقييد وصول {email}
msgid "{display_name} Settings"
msgstr "إعدادات {display_name}"
-#: cms/static/js/views/modals/course_outline_modals.js
-msgid "Change the settings for {display_name}"
-msgstr "تغيير الإعدادات لـ {display_name}"
-
#: cms/static/js/views/modals/course_outline_modals.js
msgid "Publish {display_name}"
msgstr "نشر {display_name}"
@@ -5842,6 +5802,10 @@ msgstr "نشر جميع التغييرات غير المنشورة لهذا {ite
msgid "Publish"
msgstr "نشر"
+#: cms/static/js/views/modals/course_outline_modals.js
+msgid "All Learners and Staff"
+msgstr ""
+
#: cms/static/js/views/modals/course_outline_modals.js
msgid "Basic"
msgstr "أساسي"
@@ -5855,6 +5819,10 @@ msgstr ""
msgid "Editing: %(title)s"
msgstr "تعديل: %(title)s"
+#: lms/templates/ccx/schedule.underscore
+msgid "Unit"
+msgstr "الوحدة"
+
#: cms/static/js/views/modals/edit_xblock.js
msgid "Component"
msgstr "مكوِّن"
@@ -5916,7 +5884,8 @@ msgstr "المخطّط الكلّي للمساق"
msgid "Date added"
msgstr "تاريخ الإضافة "
-#. Translators: "title" is the name of the current component being edited.
+#. Translators: "title" is the name of the current component or unit being
+#. edited.
#: cms/static/js/views/pages/container.js
msgid "Editing access for: %(title)s"
msgstr ""
@@ -7113,10 +7082,6 @@ msgstr "تكبير جميع الأقسام"
msgid "Collapse All"
msgstr "طي جميع الأقسام"
-#: lms/templates/ccx/schedule.underscore
-msgid "Unit"
-msgstr "الوحدة"
-
#: lms/templates/ccx/schedule.underscore
msgid "Start Date"
msgstr "تاريخ البدء"
@@ -8017,76 +7982,6 @@ msgstr "أو أنشئ حساباً جديداً باستخدام"
msgid "Create account"
msgstr ""
-#: lms/templates/student_profile/badge.underscore
-#, python-format
-msgid "Share your \"%(display_name)s\" award"
-msgstr "شارك \"%(display_name)s\" جائزتك"
-
-#: lms/templates/student_profile/badge.underscore
-msgid "Share"
-msgstr "شارك"
-
-#: lms/templates/student_profile/badge.underscore
-#, python-format
-msgid "Earned %(created)s."
-msgstr "%(created)s التي حصلت عليها"
-
-#: 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/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 "شارك على Mozilla Backpack"
-
-#: 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 ""
-"لمشاركة شهادتك على Mozilla Backpack، يجب عليك أولاً إنشاء حساب Backpack. "
-"أكمل الخطوات التالية لإضافة شهادتك إلى Backpack."
-
-#: 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 ""
-"أنشئ حساب %(link_start)s Mozilla Backpack %(link_end)s، أو سجل دخولك إلى "
-"حسابك الموجود"
-
-#: 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 ""
-"%(download_link_start)s حمل الصورة (اضغط زر الفأرة الأيمن، حفظ باسم) "
-"%(link_end)s ومن ثم %(upload_link_start)sحمل%(link_end)s إلى Backpack."
-
#: lms/templates/verify_student/enrollment_confirmation_step.underscore
#, python-format
msgid "Congratulations! You are now verified on %(platformName)s!"
@@ -8671,6 +8566,76 @@ msgstr "عذرًا، لا توجد أي نتائج."
msgid "Back to Dashboard"
msgstr "العودة إلى لوحة المعلومات"
+#: openedx/features/learner_profile/static/learner_profile/templates/badge.underscore
+#, python-format
+msgid "Share your \"%(display_name)s\" award"
+msgstr "شارك \"%(display_name)s\" جائزتك"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge.underscore
+msgid "Share"
+msgstr "شارك"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge.underscore
+#, python-format
+msgid "Earned %(created)s."
+msgstr "%(created)s التي حصلت عليها"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge_placeholder.underscore
+msgid "What's Your Next Accomplishment?"
+msgstr "ماهو إنجازك القادم؟"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge_placeholder.underscore
+msgid "Start working toward your next learning goal."
+msgstr "ابدآ العمل في اتجاه هدفك التالي."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge_placeholder.underscore
+msgid "Find a course"
+msgstr "ابحث عن مادة"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/learner_profile.underscore
+msgid "An error occurred. Try loading the page again."
+msgstr "حدث خطأ. حاول تحميل الصفحة مرة أخرى."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/section_two.underscore
+msgid "You are currently sharing a limited profile."
+msgstr "إنّك حاليًّا تشارك ملفًّا شخصيًّا محدودًا."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/section_two.underscore
+msgid "This learner is currently sharing a limited profile."
+msgstr "هذا المتعلم يشارك ملفاً شخصياً محدوداً."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/share_modal.underscore
+msgid "Share on Mozilla Backpack"
+msgstr "شارك على Mozilla Backpack"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/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 ""
+"لمشاركة شهادتك على Mozilla Backpack، يجب عليك أولاً إنشاء حساب Backpack. "
+"أكمل الخطوات التالية لإضافة شهادتك إلى Backpack."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/share_modal.underscore
+#, python-format
+msgid ""
+"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to "
+"your existing account"
+msgstr ""
+"أنشئ حساب %(link_start)s Mozilla Backpack %(link_end)s، أو سجل دخولك إلى "
+"حسابك الموجود"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/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 ""
+"%(download_link_start)s حمل الصورة (اضغط زر الفأرة الأيمن، حفظ باسم) "
+"%(link_end)s ومن ثم %(upload_link_start)sحمل%(link_end)s إلى Backpack."
+
#: cms/templates/js/access-editor.underscore
msgid "Limit Access"
msgstr "الحدّ من صلاحية الوصول"
@@ -8919,6 +8884,20 @@ msgstr "تفعيل"
msgid "Deactivate"
msgstr "تعطيل"
+#: cms/templates/js/container-access.underscore
+msgid "component"
+msgstr ""
+
+#: cms/templates/js/container-access.underscore
+msgid "Access to this {blockType} is restricted to: {selectedGroupsLabel}"
+msgstr ""
+
+#: cms/templates/js/container-access.underscore
+msgid ""
+"Access to some content in this {blockType} is restricted to specific groups "
+"of learners."
+msgstr ""
+
#: cms/templates/js/container-message.underscore
msgid ""
"Caution: The last published version of this unit is live. By publishing "
@@ -9089,6 +9068,10 @@ msgstr "لن يجري إصدار الوحدات غير المنشورة"
msgid "Unpublished changes to content that will release in the future"
msgstr "تغييرات غير منشورة جرى إدخالها على المحتوى وسيجري إصدارها مستقبليًّا"
+#: cms/templates/js/course-outline.underscore
+msgid "Access to this unit is restricted to: {selectedGroupsLabel}"
+msgstr ""
+
#: cms/templates/js/course-outline.underscore
msgid ""
"Access to some content in this unit is restricted to specific groups of "
@@ -9634,12 +9617,6 @@ msgstr "مع %(section_or_subsection)s"
msgid "Staff and Learners"
msgstr "الموظفون والمتعلمون"
-#: cms/templates/js/publish-xblock.underscore
-msgid ""
-"Access to some content in this unit is restricted to specific groups of "
-"learners."
-msgstr ""
-
#: cms/templates/js/publish-xblock.underscore
#: cms/templates/js/staff-lock-editor.underscore
msgid "Hide from learners"
@@ -9924,6 +9901,32 @@ msgstr ""
"حدّد أي قواعد إضافية أو استنثاءات القواعد التي يجب أن تُطبّق عند مراجعة "
"مقاطع الفيديو. مثال، يمكنك نحديد فيما إذا كانت الآلات الحاسبة مسموحة."
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Unit Access"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Restrict access to:"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Select a group type"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Select one or more groups:"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Deleted Group"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid ""
+"This group no longer exists. Choose another group or do not restrict access "
+"to this unit."
+msgstr ""
+
#: cms/templates/js/upload-dialog.underscore
msgid "File upload succeeded"
msgstr "جرى تحميل الملف بنجاح"
@@ -9964,9 +9967,9 @@ msgid ""
"should be {maxFileSize} and format must be one of {supportedImageFormats}."
msgstr ""
-#: cms/templates/js/xblock-string-field-editor.underscore
-msgid "Edit the name"
-msgstr "تعديل الاسم"
+#: cms/templates/js/xblock-access-editor.underscore
+msgid "Set Access"
+msgstr ""
#: cms/templates/js/xblock-string-field-editor.underscore
#, python-format
diff --git a/conf/locale/en/LC_MESSAGES/django.po b/conf/locale/en/LC_MESSAGES/django.po
index 7246b9dd6e..fbf7872c49 100644
--- a/conf/locale/en/LC_MESSAGES/django.po
+++ b/conf/locale/en/LC_MESSAGES/django.po
@@ -32,8 +32,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1a\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-20 11:48+0000\n"
-"PO-Revision-Date: 2017-07-20 11:48:32.252217\n"
+"POT-Creation-Date: 2017-08-02 12:48+0000\n"
+"PO-Revision-Date: 2017-08-02 12:48:04.261143\n"
"Last-Translator: \n"
"Language-Team: openedx-translation \n"
"MIME-Version: 1.0\n"
@@ -248,6 +248,28 @@ msgstr ""
msgid "Verified modes cannot be free."
msgstr ""
+#. #-#-#-#-# django-partial.po (0.1a) #-#-#-#-#
+#. Translators: This will look like '$50', where {currency_symbol} is a symbol
+#. such as '$' and {price} is a
+#. numerical amount in that currency. Adjust this display as needed for your
+#. language.
+#. #-#-#-#-# mako.po (0.1a) #-#-#-#-#
+#. Translators: currency_symbol is a symbol indicating type of currency, ex
+#. "$".
+#. This string would look like this when all variables are in:
+#. "$500.00"
+#: common/djangoapps/course_modes/models.py
+#: lms/templates/shoppingcart/shopping_cart.html
+#, python-brace-format
+msgid "{currency_symbol}{price}"
+msgstr ""
+
+#. Translators: This refers to the cost of the course. In this case, the
+#. course costs nothing so it is free.
+#: common/djangoapps/course_modes/models.py
+msgid "Free"
+msgstr ""
+
#: common/djangoapps/course_modes/models.py
msgid ""
"The time period before a course ends in which a course mode will expire"
@@ -308,31 +330,6 @@ msgstr ""
msgid "User profile"
msgstr ""
-#: common/djangoapps/student/forms.py
-msgid "Username must be minimum of two characters long"
-msgstr ""
-
-#: common/djangoapps/student/forms.py
-#, python-format
-msgid "Username cannot be more than %(limit_value)s characters long"
-msgstr ""
-
-#. Translators: This message is shown when the Unicode usernames are NOT
-#. allowed
-#: common/djangoapps/student/forms.py
-msgid ""
-"Usernames can only contain Roman letters, western numerals (0-9), "
-"underscores (_), and hyphens (-)."
-msgstr ""
-
-#. Translators: This message is shown only when the Unicode usernames are
-#. allowed
-#: common/djangoapps/student/forms.py
-msgid ""
-"Usernames can only contain letters, numerals, underscore (_), numbers and "
-"@/./+/-/_ characters."
-msgstr ""
-
#: common/djangoapps/student/forms.py
msgid ""
"That e-mail address doesn't have an associated user account. Are you sure "
@@ -2114,6 +2111,8 @@ msgstr ""
#: lms/templates/register-shib.html
#: lms/templates/peer_grading/peer_grading_problem.html
#: lms/templates/survey/survey.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
#: themes/stanford-style/lms/templates/register-shib.html
msgid "Submit"
msgstr ""
@@ -2674,6 +2673,7 @@ msgstr ""
#: common/lib/xmodule/xmodule/course_module.py
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Handouts"
msgstr ""
@@ -5218,6 +5218,15 @@ msgid ""
"specific student."
msgstr ""
+#: lms/djangoapps/courseware/models.py
+msgid ""
+"Number of days a learner has to upgrade after content is made available"
+msgstr ""
+
+#: lms/djangoapps/courseware/models.py
+msgid "Disable the dynamic upgrade deadline for this course run."
+msgstr ""
+
#: lms/djangoapps/courseware/tabs.py lms/templates/courseware/syllabus.html
msgid "Syllabus"
msgstr ""
@@ -5258,28 +5267,6 @@ msgstr ""
msgid "Enroll now"
msgstr ""
-#. #-#-#-#-# django-partial.po (0.1a) #-#-#-#-#
-#. Translators: This will look like '$50', where {currency_symbol} is a symbol
-#. such as '$' and {price} is a
-#. numerical amount in that currency. Adjust this display as needed for your
-#. language.
-#. #-#-#-#-# mako.po (0.1a) #-#-#-#-#
-#. Translators: currency_symbol is a symbol indicating type of currency, ex
-#. "$".
-#. This string would look like this when all variables are in:
-#. "$500.00"
-#: lms/djangoapps/courseware/views/views.py
-#: lms/templates/shoppingcart/shopping_cart.html
-#, python-brace-format
-msgid "{currency_symbol}{price}"
-msgstr ""
-
-#. Translators: This refers to the cost of the course. In this case, the
-#. course costs nothing so it is free.
-#: lms/djangoapps/courseware/views/views.py
-msgid "Free"
-msgstr ""
-
#: lms/djangoapps/courseware/views/views.py
msgid "Your enrollment: Audit track"
msgstr ""
@@ -6952,10 +6939,20 @@ msgid ""
"configurations."
msgstr ""
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid ""
+"This unit's access settings refer to deleted or invalid group "
+"configurations."
+msgstr ""
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid "This component's access settings refer to deleted or invalid groups."
msgstr ""
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid "This unit's access settings refer to deleted or invalid groups."
+msgstr ""
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid ""
"This component's access settings contradict its parent's access settings."
@@ -8743,6 +8740,8 @@ msgstr ""
#: lms/templates/courseware/courses.html
#: lms/templates/courseware/courseware.html
#: lms/templates/edxnotes/edxnotes.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
#: themes/edx.org/lms/templates/dashboard.html
#: themes/stanford-style/lms/templates/index.html
msgid "Search"
@@ -9264,6 +9263,120 @@ msgstr ""
msgid "Enable course home page improvements."
msgstr ""
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Site theme changed to {site_theme}"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Theme {site_theme} does not exist"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+msgid "Site theme reverted to the default"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Theming Administration"
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid ""
+"Usernames can only contain letters (A-Z, a-z), numerals (0-9), underscores "
+"(_), and hyphens (-)."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid ""
+"Usernames can only contain letters, numerals, and @/./+/-/_ characters."
+msgstr ""
+
+#. Translators: This message is shown to users who attempt to create a new
+#. account using
+#. an invalid email format.
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+#, python-brace-format
+msgid "\"{email}\" is not a valid email address."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+#, python-brace-format
+msgid ""
+"It looks like {email_address} belongs to an existing account. Try again with"
+" a different email address."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+#, python-brace-format
+msgid ""
+"It looks like {username} belongs to an existing account. Try again with a "
+"different username."
+msgstr ""
+
+#. Translators: This message is shown to users who enter a
+#. username/email/password
+#. with an inappropriate length (too short or too long).
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+#, python-brace-format
+msgid "Username must be between {min} and {max} characters long."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+#, python-brace-format
+msgid "Enter a valid email address that contains at least {min} characters."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "Please enter a password."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "Password is not long enough."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+#, python-brace-format
+msgid "Password cannot be longer than {max} character."
+msgstr ""
+
+#. Translators: This message is shown to users who enter a password matching
+#. the username they enter(ed).
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "Password cannot be the same as the username."
+msgstr ""
+
+#. Translators: These messages are shown to users who do not enter information
+#. into the required field or enter it incorrectly.
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "Please enter your Full Name."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "The email addresses do not match."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "Please select your Country."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "Please enter your City."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "Please tell us your goals."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "Please select your highest level of education completed."
+msgstr ""
+
+#: openedx/core/djangoapps/user_api/accounts/__init__.py
+msgid "Please enter your mailing address."
+msgstr ""
+
#: openedx/core/djangoapps/user_api/accounts/api.py
#, python-brace-format
msgid "The '{field_name}' field cannot be edited."
@@ -9349,24 +9462,6 @@ msgstr ""
msgid "Remember me"
msgstr ""
-#. Translators: This message is shown to users who attempt to create a new
-#. account using an email address associated with an existing account.
-#: openedx/core/djangoapps/user_api/views.py
-#, python-brace-format
-msgid ""
-"It looks like {email_address} belongs to an existing account. Try again with"
-" a different email address."
-msgstr ""
-
-#. Translators: This message is shown to users who attempt to create a new
-#. account using a username associated with an existing account.
-#: openedx/core/djangoapps/user_api/views.py
-#, python-brace-format
-msgid ""
-"It looks like {username} belongs to an existing account. Try again with a "
-"different username."
-msgstr ""
-
#. Translators: These instructions appear on the registration form,
#. immediately
#. below a field meant to hold the user's email address.
@@ -9380,10 +9475,6 @@ msgstr ""
msgid "Confirm Email"
msgstr ""
-#: openedx/core/djangoapps/user_api/views.py
-msgid "The email addresses do not match."
-msgstr ""
-
#. Translators: This example name is used as a placeholder in
#. a field on the registration form meant to hold the user's name.
#: openedx/core/djangoapps/user_api/views.py
@@ -9462,10 +9553,6 @@ msgstr ""
msgid "Company"
msgstr ""
-#: openedx/core/djangoapps/user_api/views.py
-msgid "Please select your Country."
-msgstr ""
-
#: openedx/core/djangoapps/user_api/views.py
msgid "Review the Honor Code"
msgstr ""
@@ -9502,6 +9589,11 @@ msgstr ""
msgid "Review the Terms of Service"
msgstr ""
+#: openedx/core/djangoapps/util/user_messages.py
+#, python-brace-format
+msgid "{header_open}{title}{header_close}{body}"
+msgstr ""
+
#: openedx/core/djangoapps/verified_track_content/models.py
msgid "The course key for the course we would like to be auto-cohorted."
msgstr ""
@@ -10213,6 +10305,7 @@ msgstr ""
#: lms/templates/courseware/courses.html lms/templates/edxnotes/edxnotes.html
#: lms/templates/instructor/instructor_dashboard_2/certificates.html
#: lms/templates/instructor/instructor_dashboard_2/metrics.html
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
msgid "Loading"
msgstr ""
@@ -10229,6 +10322,16 @@ msgstr ""
msgid "Course Number"
msgstr ""
+#: cms/templates/course_outline.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Course Outline"
+msgstr ""
+
+#: cms/templates/course_outline.html cms/templates/index.html
+#: openedx/features/course_experience/templates/course_experience/welcome-message-fragment.html
+msgid "Dismiss"
+msgstr ""
+
#: cms/templates/course_outline.html
#: lms/templates/instructor/instructor_dashboard_2/course_info.html
msgid "Course Start Date:"
@@ -10346,11 +10449,14 @@ msgstr ""
#: cms/templates/darklang/preview_lang.html
#: lms/templates/darklang/preview_lang.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
msgid "Preview Language Setting"
msgstr ""
#: cms/templates/maintenance/_force_publish_course.html
#: lms/templates/problem.html lms/templates/shoppingcart/shopping_cart.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
msgid "Reset"
msgstr ""
@@ -10360,6 +10466,11 @@ msgstr ""
msgid "Legal"
msgstr ""
+#: cms/templates/widgets/header.html
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "Updates"
+msgstr ""
+
#: cms/templates/widgets/header.html lms/templates/navigation/navigation.html
#: lms/templates/widgets/footer-language-selector.html
msgid "Choose Language"
@@ -13092,6 +13203,7 @@ msgstr ""
#: lms/templates/courseware/accordion.html
#: lms/templates/courseware/progress.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "due {date}"
msgstr ""
@@ -13100,6 +13212,7 @@ msgid "{section_format} due {{date}}"
msgstr ""
#: lms/templates/courseware/accordion.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "This content is graded"
msgstr ""
@@ -13241,6 +13354,7 @@ msgstr ""
#: lms/templates/courseware/courseware-chromeless.html
#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "{course_number} Courseware"
msgstr ""
@@ -13254,6 +13368,7 @@ msgid "Courseware"
msgstr ""
#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "Bookmarks"
msgstr ""
@@ -13315,6 +13430,8 @@ msgid "Welcome to {org}'s {course_name}!"
msgstr ""
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "Resume Course"
msgstr ""
@@ -13331,6 +13448,7 @@ msgid "Handout Navigation"
msgstr ""
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Tools"
msgstr ""
@@ -17469,7 +17587,8 @@ msgstr ""
#: lms/templates/widgets/cookie-consent.html
msgid ""
"This website uses cookies to ensure you get the best experience on our "
-"website."
+"website. If you continue browsing this site, we understand that you accept "
+"the use of cookies."
msgstr ""
#: lms/templates/widgets/cookie-consent.html
@@ -17500,6 +17619,134 @@ msgstr ""
msgid "Add article"
msgstr ""
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Language Code"
+msgstr ""
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "For example use en for English"
+msgstr ""
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Please refresh the page to see the changes applied."
+msgstr ""
+
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Preview Theme"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "All Rights Reserved"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Attribution"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Noncommercial"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "No Derivatives"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Share Alike"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Creative Commons licensed content, with terms as follow:"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Some Rights Reserved"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Important Course Dates"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Today is {date}"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search the course"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Start Course"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "{subsection_format} due {{date}}"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This is your last visited course section."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This course has not started yet."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "We're still working on course content."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid ""
+"This course has not started yet, and will launch on {launch_date_html}."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-reviews-fragment.html
+msgid "Reviews"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "This course does not have any updates."
+msgstr ""
+
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search Results"
+msgstr ""
+
+#. Translators: this section lists all the third-party authentication
+#. providers
+#. (for example, Google and LinkedIn) the user can link with or unlink from
+#. their edX account.
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Connected Accounts"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Linked"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Not Linked"
+msgstr ""
+
+#. Translators: clicking on this removes the link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Unlink"
+msgstr ""
+
+#. Translators: clicking on this creates a link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Link"
+msgstr ""
+
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
+msgid "Learner Profile"
+msgstr ""
+
#: themes/edx.org/cms/templates/widgets/sock.html
msgid ""
"Access Course Staff Support on the Partner Portal to submit or review "
@@ -18171,10 +18418,6 @@ msgid ""
"respond to student questions. You add or edit updates in HTML."
msgstr ""
-#: cms/templates/course_outline.html
-msgid "Course Outline"
-msgstr ""
-
#: cms/templates/course_outline.html
msgid ""
"This course was created as a re-run. Some manual configuration is needed."
@@ -18188,10 +18431,6 @@ msgid ""
"and seed the discussions and wiki."
msgstr ""
-#: cms/templates/course_outline.html cms/templates/index.html
-msgid "Dismiss"
-msgstr ""
-
#: cms/templates/course_outline.html
msgid "Warning"
msgstr ""
@@ -19415,6 +19654,10 @@ msgid ""
"assistance."
msgstr ""
+#: cms/templates/index.html
+msgid "Archived Courses"
+msgstr ""
+
#: cms/templates/index.html
msgid "Libraries"
msgstr ""
@@ -19962,6 +20205,14 @@ msgstr ""
msgid "Course End Time"
msgstr ""
+#: cms/templates/settings.html
+msgid "Certificates Available Date"
+msgstr ""
+
+#: cms/templates/settings.html
+msgid "By default, 48 hours after course end date"
+msgstr ""
+
#: cms/templates/settings.html
msgid "Enrollment Start Date"
msgstr ""
@@ -20557,18 +20808,35 @@ msgstr ""
msgid "Access is not restricted"
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"Access to this unit is not restricted, but visibility might be affected by "
+"inherited settings."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"Access to this component is not restricted, but visibility might be affected"
" by inherited settings."
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific enrollment "
+"tracks or content groups."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific enrollment"
" tracks or content groups."
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific content groups."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific content "
@@ -20610,8 +20878,8 @@ msgstr ""
#: cms/templates/visibility_editor.html
msgid ""
-"This group no longer exists. Choose another group or do not restrict access "
-"to this component."
+"This group no longer exists. Choose another group or remove the access "
+"restriction."
msgstr ""
#: cms/templates/emails/activation_email.txt
@@ -20757,10 +21025,6 @@ msgstr ""
msgid "Outline"
msgstr ""
-#: cms/templates/widgets/header.html
-msgid "Updates"
-msgstr ""
-
#: cms/templates/widgets/header.html
msgid "Import"
msgstr ""
@@ -21449,7 +21713,7 @@ msgid "Your changes were saved."
msgstr ""
#: wiki/views/article.py
-msgid "A new revision of the article was succesfully added."
+msgid "A new revision of the article was successfully added."
msgstr ""
#: wiki/views/article.py
diff --git a/conf/locale/en/LC_MESSAGES/djangojs.po b/conf/locale/en/LC_MESSAGES/djangojs.po
index b907f89fb8..a8a3d33527 100644
--- a/conf/locale/en/LC_MESSAGES/djangojs.po
+++ b/conf/locale/en/LC_MESSAGES/djangojs.po
@@ -26,8 +26,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1a\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-20 11:47+0000\n"
-"PO-Revision-Date: 2017-07-20 11:48:32.711353\n"
+"POT-Creation-Date: 2017-08-02 12:47+0000\n"
+"PO-Revision-Date: 2017-08-02 12:48:04.567443\n"
"Last-Translator: \n"
"Language-Team: openedx-translation \n"
"MIME-Version: 1.0\n"
@@ -4218,6 +4218,10 @@ msgstr ""
msgid "We couldn't create your account."
msgstr ""
+#: lms/static/js/student_account/views/RegisterView.js
+msgid "(required)"
+msgstr ""
+
#: lms/static/js/student_account/views/RegisterView.js
msgid "You've successfully signed into %(currentProvider)s."
msgstr ""
@@ -4886,6 +4890,11 @@ msgstr ""
msgid "The course start date must be later than the enrollment start date."
msgstr ""
+#: cms/static/js/models/settings/course_details.js
+msgid ""
+"The certificate available date must be later than the enrollment start date."
+msgstr ""
+
#: cms/static/js/models/settings/course_details.js
msgid "The enrollment start date cannot be after the enrollment end date."
msgstr ""
@@ -4955,6 +4964,10 @@ msgstr ""
msgid "or"
msgstr ""
+#: cms/static/js/models/xblock_validation.js
+msgid "This unit has validation issues."
+msgstr ""
+
#: cms/static/js/models/xblock_validation.js
msgid "This component has validation issues."
msgstr ""
diff --git a/conf/locale/eo/LC_MESSAGES/django.mo b/conf/locale/eo/LC_MESSAGES/django.mo
index dbbe737fe1..ace785e06d 100644
Binary files a/conf/locale/eo/LC_MESSAGES/django.mo and b/conf/locale/eo/LC_MESSAGES/django.mo differ
diff --git a/conf/locale/eo/LC_MESSAGES/django.po b/conf/locale/eo/LC_MESSAGES/django.po
index fd53263f0c..12aa896acc 100644
--- a/conf/locale/eo/LC_MESSAGES/django.po
+++ b/conf/locale/eo/LC_MESSAGES/django.po
@@ -32,8 +32,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1a\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-20 11:48+0000\n"
-"PO-Revision-Date: 2017-07-20 11:48:32.252217\n"
+"POT-Creation-Date: 2017-08-01 21:22+0000\n"
+"PO-Revision-Date: 2017-08-01 21:22:49.685108\n"
"Last-Translator: \n"
"Language-Team: openedx-translation \n"
"MIME-Version: 1.0\n"
@@ -283,6 +283,28 @@ msgstr ""
msgid "Verified modes cannot be free."
msgstr "Vérïfïéd mödés çännöt ßé fréé. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#"
+#. #-#-#-#-# django-partial.po (0.1a) #-#-#-#-#
+#. Translators: This will look like '$50', where {currency_symbol} is a symbol
+#. such as '$' and {price} is a
+#. numerical amount in that currency. Adjust this display as needed for your
+#. language.
+#. #-#-#-#-# mako.po (0.1a) #-#-#-#-#
+#. Translators: currency_symbol is a symbol indicating type of currency, ex
+#. "$".
+#. This string would look like this when all variables are in:
+#. "$500.00"
+#: common/djangoapps/course_modes/models.py
+#: lms/templates/shoppingcart/shopping_cart.html
+#, python-brace-format
+msgid "{currency_symbol}{price}"
+msgstr "{currency_symbol}{price} Ⱡ'σяєм ιρѕυ#"
+
+#. Translators: This refers to the cost of the course. In this case, the
+#. course costs nothing so it is free.
+#: common/djangoapps/course_modes/models.py
+msgid "Free"
+msgstr "Fréé Ⱡ'σяєм ι#"
+
#: common/djangoapps/course_modes/models.py
msgid ""
"The time period before a course ends in which a course mode will expire"
@@ -2578,6 +2600,8 @@ msgstr ""
#: lms/templates/register-shib.html
#: lms/templates/peer_grading/peer_grading_problem.html
#: lms/templates/survey/survey.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
#: themes/stanford-style/lms/templates/register-shib.html
msgid "Submit"
msgstr "Süßmït Ⱡ'σяєм ιρѕυ#"
@@ -3342,6 +3366,7 @@ msgstr ""
#: common/lib/xmodule/xmodule/course_module.py
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Handouts"
msgstr "Çöürsé Händöüts Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#"
@@ -6768,6 +6793,19 @@ msgstr ""
"Thïs týpé öf çömpönént çännöt ßé shöwn whïlé vïéwïng thé çöürsé äs ä "
"spéçïfïç stüdént. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢#"
+#: lms/djangoapps/courseware/models.py
+msgid ""
+"Number of days a learner has to upgrade after content is made available"
+msgstr ""
+"Nümßér öf däýs ä léärnér häs tö üpgrädé äftér çöntént ïs mädé äväïläßlé "
+"Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя#"
+
+#: lms/djangoapps/courseware/models.py
+msgid "Disable the dynamic upgrade deadline for this course run."
+msgstr ""
+"Dïsäßlé thé dýnämïç üpgrädé déädlïné för thïs çöürsé rün. Ⱡ'σяєм ιρѕυм ∂σłσя"
+" ѕιт αмєт, ¢σηѕє¢тєтυя α#"
+
#: lms/djangoapps/courseware/tabs.py lms/templates/courseware/syllabus.html
msgid "Syllabus"
msgstr "Sýlläßüs Ⱡ'σяєм ιρѕυм ∂#"
@@ -6812,28 +6850,6 @@ msgstr ""
msgid "Enroll now"
msgstr "Énröll nöw Ⱡ'σяєм ιρѕυм ∂σłσ#"
-#. #-#-#-#-# django-partial.po (0.1a) #-#-#-#-#
-#. Translators: This will look like '$50', where {currency_symbol} is a symbol
-#. such as '$' and {price} is a
-#. numerical amount in that currency. Adjust this display as needed for your
-#. language.
-#. #-#-#-#-# mako.po (0.1a) #-#-#-#-#
-#. Translators: currency_symbol is a symbol indicating type of currency, ex
-#. "$".
-#. This string would look like this when all variables are in:
-#. "$500.00"
-#: lms/djangoapps/courseware/views/views.py
-#: lms/templates/shoppingcart/shopping_cart.html
-#, python-brace-format
-msgid "{currency_symbol}{price}"
-msgstr "{currency_symbol}{price} Ⱡ'σяєм ιρѕυ#"
-
-#. Translators: This refers to the cost of the course. In this case, the
-#. course costs nothing so it is free.
-#: lms/djangoapps/courseware/views/views.py
-msgid "Free"
-msgstr "Fréé Ⱡ'σяєм ι#"
-
#: lms/djangoapps/courseware/views/views.py
msgid "Your enrollment: Audit track"
msgstr "Ýöür énröllmént: Àüdït träçk Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢#"
@@ -8955,12 +8971,26 @@ msgstr ""
"Thïs çömpönént's äççéss séttïngs référ tö délétéd ör ïnvälïd gröüp "
"çönfïgürätïöns. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тє#"
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid ""
+"This unit's access settings refer to deleted or invalid group "
+"configurations."
+msgstr ""
+"Thïs ünït's äççéss séttïngs référ tö délétéd ör ïnvälïd gröüp "
+"çönfïgürätïöns. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєт#"
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid "This component's access settings refer to deleted or invalid groups."
msgstr ""
"Thïs çömpönént's äççéss séttïngs référ tö délétéd ör ïnvälïd gröüps. Ⱡ'σяєм "
"ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя #"
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid "This unit's access settings refer to deleted or invalid groups."
+msgstr ""
+"Thïs ünït's äççéss séttïngs référ tö délétéd ör ïnvälïd gröüps. Ⱡ'σяєм ιρѕυм"
+" ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#"
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid ""
"This component's access settings contradict its parent's access settings."
@@ -11247,6 +11277,8 @@ msgstr ""
#: lms/templates/courseware/courses.html
#: lms/templates/courseware/courseware.html
#: lms/templates/edxnotes/edxnotes.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
#: themes/edx.org/lms/templates/dashboard.html
#: themes/stanford-style/lms/templates/index.html
msgid "Search"
@@ -11948,6 +11980,26 @@ msgstr ""
"Énäßlé çöürsé hömé pägé ïmprövéménts. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
"¢σηѕє¢тєтυ#"
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Site theme changed to {site_theme}"
+msgstr "Sïté thémé çhängéd tö {site_theme} Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕ#"
+
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Theme {site_theme} does not exist"
+msgstr "Thémé {site_theme} döés nöt éxïst Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢ση#"
+
+#: openedx/core/djangoapps/theming/views.py
+msgid "Site theme reverted to the default"
+msgstr ""
+"Sïté thémé révértéd tö thé défäült Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєт#"
+
+#: openedx/core/djangoapps/theming/views.py
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Theming Administration"
+msgstr "Thémïng Àdmïnïsträtïön Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢#"
+
#: openedx/core/djangoapps/user_api/accounts/api.py
#, python-brace-format
msgid "The '{field_name}' field cannot be edited."
@@ -12226,6 +12278,11 @@ msgstr ""
msgid "Review the Terms of Service"
msgstr "Révïéw thé Térms öf Sérvïçé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє#"
+#: openedx/core/djangoapps/util/user_messages.py
+#, python-brace-format
+msgid "{header_open}{title}{header_close}{body}"
+msgstr "{header_open}{title}{header_close}{body} Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
+
#: openedx/core/djangoapps/verified_track_content/models.py
msgid "The course key for the course we would like to be auto-cohorted."
msgstr ""
@@ -13093,6 +13150,7 @@ msgstr "Çöntént Ⱡ'σяєм ιρѕυм #"
#: lms/templates/courseware/courses.html lms/templates/edxnotes/edxnotes.html
#: lms/templates/instructor/instructor_dashboard_2/certificates.html
#: lms/templates/instructor/instructor_dashboard_2/metrics.html
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
msgid "Loading"
msgstr "Löädïng Ⱡ'σяєм ιρѕυм #"
@@ -13109,6 +13167,16 @@ msgstr "Séttïngs Ⱡ'σяєм ιρѕυм ∂#"
msgid "Course Number"
msgstr "Çöürsé Nümßér Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
+#: cms/templates/course_outline.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Course Outline"
+msgstr "Çöürsé Öütlïné Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
+
+#: cms/templates/course_outline.html cms/templates/index.html
+#: openedx/features/course_experience/templates/course_experience/welcome-message-fragment.html
+msgid "Dismiss"
+msgstr "Dïsmïss Ⱡ'σяєм ιρѕυм #"
+
#: cms/templates/course_outline.html
#: lms/templates/instructor/instructor_dashboard_2/course_info.html
msgid "Course Start Date:"
@@ -13230,11 +13298,14 @@ msgstr "Vïéw Ⱡ'σяєм ι#"
#: cms/templates/darklang/preview_lang.html
#: lms/templates/darklang/preview_lang.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
msgid "Preview Language Setting"
msgstr "Prévïéw Längüägé Séttïng Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢ση#"
#: cms/templates/maintenance/_force_publish_course.html
#: lms/templates/problem.html lms/templates/shoppingcart/shopping_cart.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
msgid "Reset"
msgstr "Rését Ⱡ'σяєм ιρѕ#"
@@ -13244,6 +13315,11 @@ msgstr "Rését Ⱡ'σяєм ιρѕ#"
msgid "Legal"
msgstr "Légäl Ⱡ'σяєм ιρѕ#"
+#: cms/templates/widgets/header.html
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "Updates"
+msgstr "Ûpdätés Ⱡ'σяєм ιρѕυм #"
+
#: cms/templates/widgets/header.html lms/templates/navigation/navigation.html
#: lms/templates/widgets/footer-language-selector.html
msgid "Choose Language"
@@ -16734,6 +16810,7 @@ msgstr "{span_start}çürrént séçtïön{span_end} Ⱡ'σяєм ιρѕυм ∂
#: lms/templates/courseware/accordion.html
#: lms/templates/courseware/progress.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "due {date}"
msgstr "düé {date} Ⱡ'σяєм ιρѕυм #"
@@ -16742,6 +16819,7 @@ msgid "{section_format} due {{date}}"
msgstr "{section_format} düé {{date}} Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
#: lms/templates/courseware/accordion.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "This content is graded"
msgstr "Thïs çöntént ïs grädéd Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢#"
@@ -16913,6 +16991,7 @@ msgstr "Réfïné Ýöür Séärçh Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт
#: lms/templates/courseware/courseware-chromeless.html
#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "{course_number} Courseware"
msgstr "{course_number} Çöürséwäré Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
@@ -16926,6 +17005,7 @@ msgid "Courseware"
msgstr "Çöürséwäré Ⱡ'σяєм ιρѕυм ∂σłσ#"
#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "Bookmarks"
msgstr "Böökmärks Ⱡ'σяєм ιρѕυм ∂σł#"
@@ -16996,6 +17076,8 @@ msgid "Welcome to {org}'s {course_name}!"
msgstr "Wélçömé tö {org}'s {course_name}! Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #"
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "Resume Course"
msgstr "Résümé Çöürsé Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
@@ -17012,6 +17094,7 @@ msgid "Handout Navigation"
msgstr "Händöüt Nävïgätïön Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт#"
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Tools"
msgstr "Çöürsé Tööls Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
@@ -22372,10 +22455,17 @@ msgstr "Rétürn tö Ýöür Däshßöärd Ⱡ'σяєм ιρѕυм ∂σłσя
#: lms/templates/widgets/cookie-consent.html
msgid ""
"This website uses cookies to ensure you get the best experience on our "
-"website."
+"website. If you continue browsing this site, we understand that you accept "
+"the use of cookies."
msgstr ""
"Thïs wéßsïté üsés çöökïés tö énsüré ýöü gét thé ßést éxpérïénçé ön öür "
-"wéßsïté. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєт#"
+"wéßsïté. Ìf ýöü çöntïnüé ßröwsïng thïs sïté, wé ündérständ thät ýöü äççépt "
+"thé üsé öf çöökïés. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α∂ιριѕι¢ιηg "
+"єłιт, ѕє∂ ∂σ єιυѕмσ∂ тємρσя ιη¢ι∂ι∂υηт υт łαвσяє єт ∂σłσяє мαgηα αłιqυα. υт "
+"єηιм α∂ мιηιм νєηιαм, qυιѕ ησѕтяυ∂ єχєя¢ιтαтιση υłłαм¢σ łαвσяιѕ ηιѕι υт "
+"αłιqυιρ єχ єα ¢σммσ∂σ ¢σηѕєqυαт. ∂υιѕ αυтє ιяυяє ∂σłσя ιη яєρяєнєη∂єяιт ιη "
+"νσłυρтαтє νєłιт єѕѕє ¢ιłłυм ∂σłσяє єυ ƒυgιαт ηυłłα ραяιαтυя. єχ¢єρтєυя ѕιηт "
+"σ¢¢αє¢αт ¢υρι∂αтαт ηση ρяσι∂єηт, ѕυηт ιη ¢υłρα qυι σƒƒι¢ια#"
#: lms/templates/widgets/cookie-consent.html
msgid "Got it!"
@@ -22405,6 +22495,147 @@ msgstr "Çöürsé Wïkï Ⱡ'σяєм ιρѕυм ∂σłσя #"
msgid "Add article"
msgstr "Àdd ärtïçlé Ⱡ'σяєм ιρѕυм ∂σłσя #"
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Language Code"
+msgstr "Längüägé Çödé Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "For example use en for English"
+msgstr "För éxämplé üsé én för Énglïsh Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#"
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Please refresh the page to see the changes applied."
+msgstr ""
+"Pléäsé réfrésh thé pägé tö séé thé çhängés äpplïéd. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт "
+"αмєт, ¢σηѕє¢тєтυя α#"
+
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Preview Theme"
+msgstr "Prévïéw Thémé Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
+
+#: openedx/core/lib/license/templates/license.html
+msgid "All Rights Reserved"
+msgstr "Àll Rïghts Résérvéd Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт,#"
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Attribution"
+msgstr "Àttrïßütïön Ⱡ'σяєм ιρѕυм ∂σłσя #"
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Noncommercial"
+msgstr "Nönçömmérçïäl Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#"
+
+#: openedx/core/lib/license/templates/license.html
+msgid "No Derivatives"
+msgstr "Nö Dérïvätïvés Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Share Alike"
+msgstr "Shäré Àlïké Ⱡ'σяєм ιρѕυм ∂σłσя #"
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Creative Commons licensed content, with terms as follow:"
+msgstr ""
+"Çréätïvé Çömmöns lïçénséd çöntént, wïth térms äs föllöw: Ⱡ'σяєм ιρѕυм ∂σłσя "
+"ѕιт αмєт, ¢σηѕє¢тєтυя α#"
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Some Rights Reserved"
+msgstr "Sömé Rïghts Résérvéd Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #"
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Important Course Dates"
+msgstr "Ìmpörtänt Çöürsé Dätés Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢#"
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Today is {date}"
+msgstr "Tödäý ïs {date} Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search the course"
+msgstr "Séärçh thé çöürsé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмє#"
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Start Course"
+msgstr "Stärt Çöürsé Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "{subsection_format} due {{date}}"
+msgstr "{subsection_format} düé {{date}} Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#"
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This is your last visited course section."
+msgstr ""
+"Thïs ïs ýöür läst vïsïtéd çöürsé séçtïön. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
+"¢σηѕє¢тєтυя #"
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This course has not started yet."
+msgstr ""
+"Thïs çöürsé häs nöt stärtéd ýét. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тє#"
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "We're still working on course content."
+msgstr ""
+"Wé'ré stïll wörkïng ön çöürsé çöntént. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
+"¢σηѕє¢тєтυя#"
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid ""
+"This course has not started yet, and will launch on {launch_date_html}."
+msgstr ""
+"Thïs çöürsé häs nöt stärtéd ýét, änd wïll läünçh ön {launch_date_html}. "
+"Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя α#"
+
+#: openedx/features/course_experience/templates/course_experience/course-reviews-fragment.html
+msgid "Reviews"
+msgstr "Révïéws Ⱡ'σяєм ιρѕυм #"
+
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "This course does not have any updates."
+msgstr ""
+"Thïs çöürsé döés nöt hävé äný üpdätés. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
+"¢σηѕє¢тєтυя#"
+
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search Results"
+msgstr "Séärçh Résülts Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
+
+#. Translators: this section lists all the third-party authentication
+#. providers
+#. (for example, Google and LinkedIn) the user can link with or unlink from
+#. their edX account.
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Connected Accounts"
+msgstr "Çönnéçtéd Àççöünts Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт#"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Linked"
+msgstr "Lïnkéd Ⱡ'σяєм ιρѕυ#"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Not Linked"
+msgstr "Nöt Lïnkéd Ⱡ'σяєм ιρѕυм ∂σłσ#"
+
+#. Translators: clicking on this removes the link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Unlink"
+msgstr "Ûnlïnk Ⱡ'σяєм ιρѕυ#"
+
+#. Translators: clicking on this creates a link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Link"
+msgstr "Lïnk Ⱡ'σяєм ι#"
+
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
+msgid "Learner Profile"
+msgstr "Léärnér Pröfïlé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#"
+
#: themes/edx.org/cms/templates/widgets/sock.html
msgid ""
"Access Course Staff Support on the Partner Portal to submit or review "
@@ -23307,10 +23538,6 @@ msgstr ""
"¢σηѕєqυαт. ∂υιѕ αυтє ιяυяє ∂σłσя ιη яєρяєнєη∂єяιт ιη νσłυρтαтє νєłιт єѕѕє "
"¢ιłłυм ∂σłσяє єυ ƒυgιαт ηυłłα ραяιαтυя. єχ¢єρтєυя ѕ#"
-#: cms/templates/course_outline.html
-msgid "Course Outline"
-msgstr "Çöürsé Öütlïné Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#"
-
#: cms/templates/course_outline.html
msgid ""
"This course was created as a re-run. Some manual configuration is needed."
@@ -23333,10 +23560,6 @@ msgstr ""
" αłιqυα. υт єηιм α∂ мιηιм νєηιαм, qυιѕ ησѕтяυ∂ єχєя¢ιтαтιση υłłαм¢σ łαвσяιѕ "
"ηιѕι υт αłιqυιρ єχ єα ¢σммσ∂σ ¢σηѕєqυαт. ∂υιѕ αυтє ιяυяє ∂σłσя ι#"
-#: cms/templates/course_outline.html cms/templates/index.html
-msgid "Dismiss"
-msgstr "Dïsmïss Ⱡ'σяєм ιρѕυм #"
-
#: cms/templates/course_outline.html
msgid "Warning"
msgstr "Wärnïng Ⱡ'σяєм ιρѕυм #"
@@ -25857,6 +26080,16 @@ msgstr "Läst däý ýöür çöürsé ïs äçtïvé Ⱡ'σяєм ιρѕυм
msgid "Course End Time"
msgstr "Çöürsé Énd Tïmé Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#"
+#: cms/templates/settings.html
+msgid "Certificates Available Date"
+msgstr "Çértïfïçätés Àväïläßlé Däté Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє#"
+
+#: cms/templates/settings.html
+msgid "By default, 48 hours after course end date"
+msgstr ""
+"Bý défäült, 48 höürs äftér çöürsé énd däté Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, "
+"¢σηѕє¢тєтυя #"
+
#: cms/templates/settings.html
msgid "Enrollment Start Date"
msgstr "Énröllmént Stärt Däté Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #"
@@ -26682,6 +26915,14 @@ msgstr ""
msgid "Access is not restricted"
msgstr "Àççéss ïs nöt réstrïçtéd Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢ση#"
+#: cms/templates/visibility_editor.html
+msgid ""
+"Access to this unit is not restricted, but visibility might be affected by "
+"inherited settings."
+msgstr ""
+"Àççéss tö thïs ünït ïs nöt réstrïçtéd, ßüt vïsïßïlïtý mïght ßé äfféçtéd ßý "
+"ïnhérïtéd séttïngs. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢#"
+
#: cms/templates/visibility_editor.html
msgid ""
"Access to this component is not restricted, but visibility might be affected"
@@ -26690,6 +26931,14 @@ msgstr ""
"Àççéss tö thïs çömpönént ïs nöt réstrïçtéd, ßüt vïsïßïlïtý mïght ßé äfféçtéd"
" ßý ïnhérïtéd séttïngs. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт#"
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific enrollment "
+"tracks or content groups."
+msgstr ""
+"Ýöü çän réstrïçt äççéss tö thïs ünït tö léärnérs ïn spéçïfïç énröllmént "
+"träçks ör çöntént gröüps. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #"
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific enrollment"
@@ -26698,6 +26947,13 @@ msgstr ""
"Ýöü çän réstrïçt äççéss tö thïs çömpönént tö léärnérs ïn spéçïfïç énröllmént"
" träçks ör çöntént gröüps. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αм#"
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific content groups."
+msgstr ""
+"Ýöü çän réstrïçt äççéss tö thïs ünït tö léärnérs ïn spéçïfïç çöntént gröüps."
+" Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυ#"
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific content "
@@ -26750,11 +27006,11 @@ msgstr "Séléçt öné ör möré gröüps: Ⱡ'σяєм ιρѕυм ∂σłσя
#: cms/templates/visibility_editor.html
msgid ""
-"This group no longer exists. Choose another group or do not restrict access "
-"to this component."
+"This group no longer exists. Choose another group or remove the access "
+"restriction."
msgstr ""
-"Thïs gröüp nö löngér éxïsts. Çhöösé änöthér gröüp ör dö nöt réstrïçt äççéss "
-"tö thïs çömpönént. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢#"
+"Thïs gröüp nö löngér éxïsts. Çhöösé änöthér gröüp ör rémövé thé äççéss "
+"réstrïçtïön. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢т#"
#: cms/templates/emails/activation_email.txt
msgid ""
@@ -26955,10 +27211,6 @@ msgstr "Çöürsé Nävïgätïön Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α
msgid "Outline"
msgstr "Öütlïné Ⱡ'σяєм ιρѕυм #"
-#: cms/templates/widgets/header.html
-msgid "Updates"
-msgstr "Ûpdätés Ⱡ'σяєм ιρѕυм #"
-
#: cms/templates/widgets/header.html
msgid "Import"
msgstr "Ìmpört Ⱡ'σяєм ιρѕυ#"
diff --git a/conf/locale/eo/LC_MESSAGES/djangojs.mo b/conf/locale/eo/LC_MESSAGES/djangojs.mo
index b2a74a5030..fb84a1312b 100644
Binary files a/conf/locale/eo/LC_MESSAGES/djangojs.mo and b/conf/locale/eo/LC_MESSAGES/djangojs.mo differ
diff --git a/conf/locale/eo/LC_MESSAGES/djangojs.po b/conf/locale/eo/LC_MESSAGES/djangojs.po
index 99ae8dbed9..c2e0118e0f 100644
--- a/conf/locale/eo/LC_MESSAGES/djangojs.po
+++ b/conf/locale/eo/LC_MESSAGES/djangojs.po
@@ -26,8 +26,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1a\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-20 11:47+0000\n"
-"PO-Revision-Date: 2017-07-20 11:48:32.711353\n"
+"POT-Creation-Date: 2017-08-01 21:22+0000\n"
+"PO-Revision-Date: 2017-08-01 21:22:50.339993\n"
"Last-Translator: \n"
"Language-Team: openedx-translation \n"
"MIME-Version: 1.0\n"
@@ -5828,6 +5828,13 @@ msgstr ""
"Thé çöürsé stärt däté müst ßé lätér thän thé énröllmént stärt däté. Ⱡ'σяєм "
"ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυя #"
+#: cms/static/js/models/settings/course_details.js
+msgid ""
+"The certificate available date must be later than the enrollment start date."
+msgstr ""
+"Thé çértïfïçäté äväïläßlé däté müst ßé lätér thän thé énröllmént stärt däté."
+" Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєтυ#"
+
#: cms/static/js/models/settings/course_details.js
msgid "The enrollment start date cannot be after the enrollment end date."
msgstr ""
@@ -5922,6 +5929,11 @@ msgstr ""
msgid "or"
msgstr "ör Ⱡ'σя#"
+#: cms/static/js/models/xblock_validation.js
+msgid "This unit has validation issues."
+msgstr ""
+"Thïs ünït häs välïdätïön ïssüés. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тє#"
+
#: cms/static/js/models/xblock_validation.js
msgid "This component has validation issues."
msgstr ""
diff --git a/conf/locale/es_419/LC_MESSAGES/django.mo b/conf/locale/es_419/LC_MESSAGES/django.mo
index 7a3ad0c5a7..7ec9c609b0 100644
Binary files a/conf/locale/es_419/LC_MESSAGES/django.mo and b/conf/locale/es_419/LC_MESSAGES/django.mo differ
diff --git a/conf/locale/es_419/LC_MESSAGES/django.po b/conf/locale/es_419/LC_MESSAGES/django.po
index 13f0a451ed..b50606ca8a 100644
--- a/conf/locale/es_419/LC_MESSAGES/django.po
+++ b/conf/locale/es_419/LC_MESSAGES/django.po
@@ -194,7 +194,7 @@ msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-06 15:21+0000\n"
+"POT-Creation-Date: 2017-08-01 18:56+0000\n"
"PO-Revision-Date: 2017-07-03 19:43+0000\n"
"Last-Translator: Eduardo Zambrano \n"
"Language-Team: Spanish (Latin America) (http://www.transifex.com/open-edx/edx-platform/language/es_419/)\n"
@@ -424,6 +424,28 @@ msgstr ""
msgid "Verified modes cannot be free."
msgstr "Los modos verificados no pueden ser gratuitos."
+#. #-#-#-#-# django-partial.po (edx-platform) #-#-#-#-#
+#. Translators: This will look like '$50', where {currency_symbol} is a symbol
+#. such as '$' and {price} is a
+#. numerical amount in that currency. Adjust this display as needed for your
+#. language.
+#. #-#-#-#-# mako.po (edx-platform) #-#-#-#-#
+#. Translators: currency_symbol is a symbol indicating type of currency, ex
+#. "$".
+#. This string would look like this when all variables are in:
+#. "$500.00"
+#: common/djangoapps/course_modes/models.py
+#: lms/templates/shoppingcart/shopping_cart.html
+#, python-brace-format
+msgid "{currency_symbol}{price}"
+msgstr "{currency_symbol}{price}"
+
+#. Translators: This refers to the cost of the course. In this case, the
+#. course costs nothing so it is free.
+#: common/djangoapps/course_modes/models.py
+msgid "Free"
+msgstr "Gratis"
+
#: common/djangoapps/course_modes/models.py
msgid ""
"The time period before a course ends in which a course mode will expire"
@@ -471,6 +493,10 @@ msgstr "Administrador"
msgid "Moderator"
msgstr "Moderador"
+#: common/djangoapps/django_comment_common/models.py
+msgid "Group Moderator"
+msgstr ""
+
#: common/djangoapps/django_comment_common/models.py
msgid "Community TA"
msgstr "Profesor asistente de la comunidad"
@@ -1978,9 +2004,8 @@ msgid "Could not interpret '{student_answer}' as a number."
msgstr "No fue posible interpretar '{student_answer}' como un número."
#: common/lib/capa/capa/responsetypes.py
-msgid ""
-"Answers can include numerals, operation signs, and a few specific "
-"characters, such as the constants e and i."
+#, python-brace-format
+msgid "You may not use variables ({bad_variables}) in numerical problems."
msgstr ""
#: common/lib/capa/capa/responsetypes.py
@@ -2109,6 +2134,11 @@ msgstr "Calificador externo"
msgid "Math Expression Input"
msgstr "Respuesta de expresión matemática"
+#: common/lib/capa/capa/responsetypes.py
+#, python-brace-format
+msgid "Invalid input: {bad_input} not permitted in answer."
+msgstr ""
+
#: common/lib/capa/capa/responsetypes.py
#, python-brace-format
msgid ""
@@ -2349,6 +2379,10 @@ msgstr "Diccionario para mantener el estado de los tipos de entrada"
msgid "Dictionary with the current student responses"
msgstr "Diccionario con las respuestas de los estudiantes actuales"
+#: common/lib/xmodule/xmodule/capa_base.py
+msgid "Dictionary with the current student score"
+msgstr ""
+
#: common/lib/xmodule/xmodule/capa_base.py
msgid "Whether or not the answers have been saved since last submit"
msgstr "Si las respuestas se han guardado después del último envío o no"
@@ -2432,6 +2466,8 @@ msgstr ""
#: lms/templates/register-shib.html
#: lms/templates/peer_grading/peer_grading_problem.html
#: lms/templates/survey/survey.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
#: themes/stanford-style/lms/templates/register-shib.html
msgid "Submit"
msgstr "Enviar"
@@ -3089,6 +3125,7 @@ msgstr ""
#: common/lib/xmodule/xmodule/course_module.py
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Handouts"
msgstr "Materiales del curso"
@@ -6079,6 +6116,15 @@ msgstr ""
"Este tipo de componente no se puede mostrar en la vista del curso como un "
"estudiante específico."
+#: lms/djangoapps/courseware/models.py
+msgid ""
+"Number of days a learner has to upgrade after content is made available"
+msgstr ""
+
+#: lms/djangoapps/courseware/models.py
+msgid "Disable the dynamic upgrade deadline for this course run."
+msgstr ""
+
#: lms/djangoapps/courseware/tabs.py lms/templates/courseware/syllabus.html
msgid "Syllabus"
msgstr "Temario"
@@ -6096,27 +6142,28 @@ msgstr "Progreso"
msgid "Textbooks"
msgstr "Libros de texto"
-#. #-#-#-#-# django-partial.po (edx-platform) #-#-#-#-#
-#. Translators: This will look like '$50', where {currency_symbol} is a symbol
-#. such as '$' and {price} is a
-#. numerical amount in that currency. Adjust this display as needed for your
-#. language.
-#. #-#-#-#-# mako.po (edx-platform) #-#-#-#-#
-#. Translators: currency_symbol is a symbol indicating type of currency, ex
-#. "$".
-#. This string would look like this when all variables are in:
-#. "$500.00"
#: lms/djangoapps/courseware/views/views.py
-#: lms/templates/shoppingcart/shopping_cart.html
#, python-brace-format
-msgid "{currency_symbol}{price}"
-msgstr "{currency_symbol}{price}"
+msgid "To see course content, {sign_in_link} or {register_link}."
+msgstr ""
-#. Translators: This refers to the cost of the course. In this case, the
-#. course costs nothing so it is free.
#: lms/djangoapps/courseware/views/views.py
-msgid "Free"
-msgstr "Gratis"
+msgid "sign in"
+msgstr ""
+
+#: lms/djangoapps/courseware/views/views.py
+msgid "register"
+msgstr ""
+
+#: lms/djangoapps/courseware/views/views.py
+#, python-brace-format
+msgid ""
+"You must be enrolled in the course to see course content. {enroll_link}."
+msgstr ""
+
+#: lms/djangoapps/courseware/views/views.py
+msgid "Enroll now"
+msgstr ""
#: lms/djangoapps/courseware/views/views.py
msgid "Your enrollment: Audit track"
@@ -7652,6 +7699,14 @@ msgstr "Extensiones de fecha de entrega para {0} {1} ({2})"
msgid "This component cannot be rescored."
msgstr ""
+#: lms/djangoapps/instructor_task/api_helper.py
+msgid "This component does not support score override."
+msgstr ""
+
+#: lms/djangoapps/instructor_task/api_helper.py
+msgid "Scores must be between 0 and the value of the problem."
+msgstr ""
+
#: lms/djangoapps/instructor_task/api_helper.py
msgid "Not all problems in entrance exam support re-scoring."
msgstr "No todos los problemas del examen de ingreso soportan re-evaluación."
@@ -7662,6 +7717,12 @@ msgstr "No todos los problemas del examen de ingreso soportan re-evaluación."
msgid "rescored"
msgstr "re calificado"
+#. Translators: This is a past-tense verb that is inserted into task progress
+#. messages as {action}.
+#: lms/djangoapps/instructor_task/tasks.py
+msgid "overridden"
+msgstr ""
+
#. Translators: This is a past-tense verb that is inserted into task progress
#. messages as {action}.
#: lms/djangoapps/instructor_task/tasks.py
@@ -7968,10 +8029,25 @@ msgid ""
"configurations."
msgstr ""
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid ""
+"This unit's access settings refer to deleted or invalid group "
+"configurations."
+msgstr ""
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid "This component's access settings refer to deleted or invalid groups."
msgstr ""
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid "This unit's access settings refer to deleted or invalid groups."
+msgstr ""
+
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid ""
+"This component's access settings contradict its parent's access settings."
+msgstr ""
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid "Whether to display this module in the table of contents"
msgstr "Define si se mostrará este módulo o no en la tabla de contenidos"
@@ -9588,6 +9664,11 @@ msgid ""
"opportunities from the world's best universities."
msgstr ""
+#: lms/templates/emails/password_reset_subject.txt
+#, python-format
+msgid "Password reset on %(platform_name)s"
+msgstr ""
+
#: lms/templates/logout.html
msgid "Signed Out"
msgstr "Sesión cerrada"
@@ -9633,9 +9714,6 @@ msgstr ""
"clic en el botón 'Cancelar'."
#: lms/templates/oauth2_provider/authorize.html
-#: cms/templates/course-create-rerun.html cms/templates/index.html
-#: cms/templates/manage_users.html cms/templates/manage_users_lib.html
-#: lms/templates/modal/accessible_confirm.html
msgid "Cancel"
msgstr "Cancelar"
@@ -9653,10 +9731,8 @@ msgstr "Error"
#, python-format
msgid ""
"You're receiving this e-mail because you requested a password reset for your"
-" user account at %(site_name)s."
+" user account at %(platform_name)s."
msgstr ""
-"Usted recibió este correo porque solicitó el restablecimiento de la "
-"contraseña asociada a su cuenta en %(site_name)s."
#: lms/templates/registration/password_reset_email.html
msgid "Please go to the following page and choose a new password:"
@@ -9780,7 +9856,6 @@ msgstr "Vista previa"
#: lms/templates/instructor/instructor_dashboard_2/metrics.html
#: lms/templates/instructor/instructor_dashboard_2/set_course_mode_price_modal.html
#: lms/templates/modal/_modal-settings-language.html
-#: lms/templates/modal/accessible_confirm.html
#: themes/edx.org/lms/templates/dashboard.html
msgid "Close"
msgstr "Cerrar"
@@ -10050,6 +10125,8 @@ msgstr ""
#: lms/templates/courseware/courses.html
#: lms/templates/courseware/courseware.html
#: lms/templates/edxnotes/edxnotes.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
#: themes/edx.org/lms/templates/dashboard.html
#: themes/stanford-style/lms/templates/index.html
msgid "Search"
@@ -10481,6 +10558,22 @@ msgstr "Idioma reajustado al código de idioma por defecto"
msgid "Language reset to user's preference: {preview_language_code}"
msgstr "Idioma reajustado a preferencias del usuario: {preview_language_code}"
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a test message"
+msgstr ""
+
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a success message"
+msgstr ""
+
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a test warning"
+msgstr ""
+
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a test error"
+msgstr ""
+
#: openedx/core/djangoapps/embargo/forms.py
#: openedx/core/djangoapps/verified_track_content/forms.py
msgid "COURSE NOT FOUND. Please check that the course ID is valid."
@@ -10622,6 +10715,25 @@ msgstr ""
msgid "Enable course home page improvements."
msgstr "Habilitar las mejoras a la página de inicio del curso."
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Site theme changed to {site_theme}"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Theme {site_theme} does not exist"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+msgid "Site theme reverted to the default"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Theming Administration"
+msgstr ""
+
#: openedx/core/djangoapps/user_api/accounts/api.py
#, python-brace-format
msgid "The '{field_name}' field cannot be edited."
@@ -10870,6 +10982,11 @@ msgstr ""
msgid "Review the Terms of Service"
msgstr "Revisar los Términos del Servicio"
+#: openedx/core/djangoapps/util/user_messages.py
+#, python-brace-format
+msgid "{header_open}{title}{header_close}{body}"
+msgstr ""
+
#: openedx/core/djangoapps/verified_track_content/models.py
msgid "The course key for the course we would like to be auto-cohorted."
msgstr "La clave del curso que queremos que tenga cohortes automáticamente."
@@ -11636,7 +11753,7 @@ msgstr "Contenido"
#: lms/templates/courseware/courses.html lms/templates/edxnotes/edxnotes.html
#: lms/templates/instructor/instructor_dashboard_2/certificates.html
#: lms/templates/instructor/instructor_dashboard_2/metrics.html
-#: lms/templates/student_profile/learner_profile.html
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
msgid "Loading"
msgstr "Cargando"
@@ -11653,6 +11770,16 @@ msgstr "Configuración"
msgid "Course Number"
msgstr "Código del curso"
+#: cms/templates/course_outline.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Course Outline"
+msgstr ""
+
+#: cms/templates/course_outline.html cms/templates/index.html
+#: openedx/features/course_experience/templates/course_experience/welcome-message-fragment.html
+msgid "Dismiss"
+msgstr ""
+
#: cms/templates/course_outline.html
#: lms/templates/instructor/instructor_dashboard_2/course_info.html
msgid "Course Start Date:"
@@ -11680,7 +11807,6 @@ msgstr "Número de curso:"
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Courses"
msgstr "Cursos"
@@ -11771,11 +11897,14 @@ msgstr "Ver"
#: cms/templates/darklang/preview_lang.html
#: lms/templates/darklang/preview_lang.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
msgid "Preview Language Setting"
msgstr "Previsualizar configuración de idioma"
#: cms/templates/maintenance/_force_publish_course.html
#: lms/templates/problem.html lms/templates/shoppingcart/shopping_cart.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
msgid "Reset"
msgstr "Reiniciar"
@@ -11785,6 +11914,11 @@ msgstr "Reiniciar"
msgid "Legal"
msgstr "Legal"
+#: cms/templates/widgets/header.html
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "Updates"
+msgstr ""
+
#: cms/templates/widgets/header.html lms/templates/navigation/navigation.html
#: lms/templates/widgets/footer-language-selector.html
msgid "Choose Language"
@@ -11868,7 +12002,6 @@ msgid "Usermenu dropdown"
msgstr "Menú desplegable de usuario"
#: cms/templates/widgets/user_dropdown.html lms/templates/user_dropdown.html
-#: themes/red-theme/lms/templates/header.html
msgid "Sign Out"
msgstr "Cerrar sesión"
@@ -12069,12 +12202,10 @@ msgid "Go back to the {link_start}home page{link_end}."
msgstr "Regresar a la {link_start}Página de inicio{link_end}."
#: lms/templates/email_change_successful.html
-#: lms/templates/emails_change_successful.html
msgid "E-mail change successful!"
msgstr "¡Cambio de correo electrónico exitoso!"
#: lms/templates/email_change_successful.html
-#: lms/templates/emails_change_successful.html
msgid "You should see your new email in your {link_start}dashboard{link_end}."
msgstr ""
"Deberías ver tu nuevo correo electrónico en tu {link_start}panel de "
@@ -13096,14 +13227,18 @@ msgid "Add comment"
msgstr "Añadir comentario"
#: lms/templates/staff_problem_info.html
-msgid "Staff Debug"
-msgstr "Depuración del personal de soporte"
+msgid "Staff Debug:"
+msgstr ""
#: lms/templates/staff_problem_info.html
#: lms/templates/instructor/instructor_dashboard_2/e-commerce.html
msgid "Actions"
msgstr "Acciones"
+#: lms/templates/staff_problem_info.html
+msgid "Score (for override only)"
+msgstr ""
+
#: lms/templates/staff_problem_info.html
msgid "Reset Learner's Attempts to Zero"
msgstr "Reiniciar los intentos del estudiante"
@@ -13123,6 +13258,10 @@ msgstr "Calificar el envío del estudiante nuevamente"
msgid "Rescore Only If Score Improves"
msgstr "Puntuar de nuevo solamente si se mejora la calificación"
+#: lms/templates/staff_problem_info.html
+msgid "Override Score"
+msgstr ""
+
#: lms/templates/staff_problem_info.html
msgid "Module Fields"
msgstr "Campos de módulo"
@@ -13341,7 +13480,7 @@ msgstr ""
" al panel de control. Si deseas volver a suscribirte a las notificaciones, "
"haz clic {undo_link_start}aquí{link_end}."
-#: lms/templates/user_dropdown.html themes/red-theme/lms/templates/header.html
+#: lms/templates/user_dropdown.html
msgid "Dashboard for:"
msgstr "Panel de Control para:"
@@ -14527,6 +14666,7 @@ msgid "Auto Enroll"
msgstr "Auto inscribirse"
#: lms/templates/ccx/enrollment.html
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
"If this option is {em_start}checked{em_end}, users who have not yet "
"registered for {platform_name} will be automatically enrolled."
@@ -14535,6 +14675,7 @@ msgstr ""
"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 {em_start}unchecked{em_end}, users who have not yet "
"registered for {platform_name} will not be enrolled, but will be allowed to "
@@ -14557,6 +14698,7 @@ 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 {em_start}checked{em_end}, users will receive an email "
"notification."
@@ -14983,6 +15125,7 @@ msgstr "{span_start}sección actual{span_end}"
#: lms/templates/courseware/accordion.html
#: lms/templates/courseware/progress.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "due {date}"
msgstr "fecha límite: {date}"
@@ -14991,6 +15134,7 @@ msgid "{section_format} due {{date}}"
msgstr "{section_format} fecha límite {{date}}"
#: lms/templates/courseware/accordion.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "This content is graded"
msgstr "Este contenido es calificable"
@@ -15141,6 +15285,7 @@ msgstr "Refinar su búsqueda"
#: lms/templates/courseware/courseware-chromeless.html
#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "{course_number} Courseware"
msgstr "Material del curso {course_number}"
@@ -15153,7 +15298,8 @@ msgstr "Utilidades de curso"
msgid "Courseware"
msgstr "Contenidos"
-#: lms/templates/courseware/courseware.html lms/templates/courseware/info.html
+#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "Bookmarks"
msgstr "Marcadores"
@@ -15217,6 +15363,8 @@ msgid "Welcome to {org}'s {course_name}!"
msgstr "Bienvenido a {course_name} {org}"
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "Resume Course"
msgstr "Continuar con el curso"
@@ -15233,13 +15381,10 @@ msgid "Handout Navigation"
msgstr "Navegación de documentos"
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Tools"
msgstr ""
-#: lms/templates/courseware/info.html
-msgid "Reviews"
-msgstr ""
-
#: lms/templates/courseware/news.html
msgid "News - MITx 6.002x"
msgstr "Noticias - MITx 6.002x"
@@ -18166,32 +18311,6 @@ 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"
@@ -18231,11 +18350,9 @@ msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
-"If this option is checked, users who have not enrolled in your "
-"course will be automatically enrolled."
+"If this option is {em_start}checked{em_end}, users who have not enrolled in "
+"your course will be automatically enrolled."
msgstr ""
-"Si esta opción esta marcada, los usuarios que aun no se han "
-"inscrito en tu curso, serán inscritos automáticamente."
#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid "Checking this box has no effect if 'Remove beta testers' is selected."
@@ -18375,16 +18492,30 @@ msgid "Add Moderator"
msgstr "Añadir moderador"
#: lms/templates/instructor/instructor_dashboard_2/membership.html
-msgid "Discussion Community TAs"
-msgstr "Profesores asistentes en los foros de discusión"
+msgid "Group Community TA"
+msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
-"Community TAs are members of the community whom you deem particularly "
-"helpful on the discussion boards. They can edit or delete any post, clear "
-"misuse flags, close and re-open threads, endorse responses, and see posts "
-"from all groups. Their posts are marked as 'Community TA'. Only enrolled "
-"users can be added as Community TAs."
+"Group Community TAs are members of the community who help course teams "
+"moderate discussions. Group Community TAs see only posts by learners in "
+"their assigned group. They can edit or delete posts, clear flags, close and "
+"re-open threads, and endorse responses, but only for posts by learners in "
+"their group. Their posts are marked as 'Community TA'. Only enrolled "
+"learners can be added as Group Community TAs."
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
+msgid "Add Group Community TA"
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
+msgid ""
+"Community TAs are members of the community who help course teams moderate "
+"discussions. They can see posts by all learners, and can edit or delete "
+"posts, clear flags, close or re-open threads, and endorse responses. Their "
+"posts are marked as 'Community TA'. Only enrolled learners can be added as "
+"Community TAs."
msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/membership.html
@@ -18638,9 +18769,8 @@ msgid "View a specific learner's grades and progress"
msgstr "Ver las notas y el progreso de un estudiante específico"
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
-msgid "Learner's {platform_name} email address or username *"
+msgid "Learner's {platform_name} email address or username"
msgstr ""
-"Dirección de email {platform_name} o nombre de usuario del estudiante *"
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
msgid "Learner email address or username"
@@ -18655,8 +18785,8 @@ msgid "Adjust a learner's grade for a specific problem"
msgstr "Ajustar la calificación del estudiante para una pregunta específica"
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
-msgid "Location of problem in course *"
-msgstr "Localizador del problema dentro del curso *"
+msgid "Location of problem in course"
+msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
msgid "Example"
@@ -18695,6 +18825,23 @@ msgstr ""
"nuevamente. La opción \"Recalificar solamente si se mejora la nota\" "
"actualiza la nota del estudiante solamente si se mejora."
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid "Score Override"
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid "For the specified problem, override the learner's score."
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid ""
+"New score for problem, out of the total points available for the problem"
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid "Override Learner's Score"
+msgstr ""
+
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
msgid "Problem History"
msgstr "Historial del problema"
@@ -18824,7 +18971,6 @@ msgstr "Detalles del programa"
#: lms/templates/navigation/navbar-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Programs"
msgstr "Programas"
@@ -18848,28 +18994,9 @@ msgstr ""
"¿No está disponible el idioma de su preferencia? {link_start}Hágase "
"traductor voluntario!{link_end}"
-#: lms/templates/modal/accessible_confirm.html
-msgid "Confirm"
-msgstr "Confirmar"
-
-#. Translators: this text gives status on if the modal interface (a menu or
-#. piece of UI that takes the full focus of the screen) is open or not
-#: lms/templates/modal/accessible_confirm.html
-msgid "modal open"
-msgstr "dialogo abierto"
-
-#: lms/templates/modal/accessible_confirm.html
-msgid "OK"
-msgstr "Aceptar"
-
-#: lms/templates/modal/accessible_confirm.html
-msgid "open"
-msgstr "abierto"
-
#. Translators: This is short for "System administration".
#: lms/templates/navigation/navbar-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
-#: themes/red-theme/lms/templates/header.html
msgid "Sysadmin"
msgstr "Sysadmin"
@@ -18877,27 +19004,23 @@ msgstr "Sysadmin"
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
#: lms/templates/shoppingcart/shopping_cart.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Shopping Cart"
msgstr "Carro de compras"
#: lms/templates/navigation/navbar-logo-header.html
#: lms/templates/navigation/bootstrap/navbar-logo-header.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "{platform_name} Home Page"
msgstr "{platform_name} Página de inicio"
#: lms/templates/navigation/navbar-not-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "How it Works"
msgstr "Cómo funciona"
#: lms/templates/navigation/navbar-not-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
-#: themes/red-theme/lms/templates/header.html
msgid "Schools"
msgstr "Instituciones"
@@ -18908,12 +19031,10 @@ msgstr "Explorar cursos"
#: lms/templates/navigation/navbar-not-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Sign in"
msgstr "Iniciar sesión"
#: lms/templates/navigation/navigation.html
-#: themes/red-theme/lms/templates/header.html
msgid "Global"
msgstr "Global"
@@ -19756,7 +19877,6 @@ msgid "Currently the {platform_name} servers are overloaded"
msgstr "Actualmente los servidores de {platform_name} están sobrecargados"
#: lms/templates/student_account/account_settings.html
-#: themes/red-theme/lms/templates/header.html
msgid "Account Settings"
msgstr "Configuración de la cuenta"
@@ -19768,40 +19888,6 @@ msgstr "Por favor espere"
msgid "Sign in or Register"
msgstr "Inicie sesión o regístrese"
-#: lms/templates/student_profile/learner_profile.html
-msgid "Learner Profile"
-msgstr "Perfil de usuario"
-
-#. Translators: this section lists all the third-party authentication
-#. providers
-#. (for example, Google and LinkedIn) the user can link with or unlink from
-#. their edX account.
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Connected Accounts"
-msgstr "Cuentas conectadas"
-
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Linked"
-msgstr "Vinculado"
-
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Not Linked"
-msgstr "Sin vincular"
-
-#. Translators: clicking on this removes the link between a user's edX account
-#. and their account with an external authentication provider (like Google or
-#. LinkedIn).
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Unlink"
-msgstr "Desvincular"
-
-#. Translators: clicking on this creates a link between a user's edX account
-#. and their account with an external authentication provider (like Google or
-#. LinkedIn).
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Link"
-msgstr "Vincular"
-
#: lms/templates/support/certificates.html lms/templates/support/index.html
msgid "Student Support"
msgstr "Soporte a estudiantes"
@@ -20010,7 +20096,8 @@ msgstr "Volver al panel principal"
#: lms/templates/widgets/cookie-consent.html
msgid ""
"This website uses cookies to ensure you get the best experience on our "
-"website."
+"website. If you continue browsing this site, we understand that you accept "
+"the use of cookies."
msgstr ""
#: lms/templates/widgets/cookie-consent.html
@@ -20041,6 +20128,134 @@ msgstr "Wiki del curso"
msgid "Add article"
msgstr "Añadir artículo"
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Language Code"
+msgstr ""
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "For example use en for English"
+msgstr ""
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Please refresh the page to see the changes applied."
+msgstr ""
+
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Preview Theme"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "All Rights Reserved"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Attribution"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Noncommercial"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "No Derivatives"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Share Alike"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Creative Commons licensed content, with terms as follow:"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Some Rights Reserved"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Important Course Dates"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Today is {date}"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search the course"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Start Course"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "{subsection_format} due {{date}}"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This is your last visited course section."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This course has not started yet."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "We're still working on course content."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid ""
+"This course has not started yet, and will launch on {launch_date_html}."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-reviews-fragment.html
+msgid "Reviews"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "This course does not have any updates."
+msgstr ""
+
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search Results"
+msgstr ""
+
+#. Translators: this section lists all the third-party authentication
+#. providers
+#. (for example, Google and LinkedIn) the user can link with or unlink from
+#. their edX account.
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Connected Accounts"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Linked"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Not Linked"
+msgstr ""
+
+#. Translators: clicking on this removes the link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Unlink"
+msgstr ""
+
+#. Translators: clicking on this creates a link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Link"
+msgstr ""
+
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
+msgid "Learner Profile"
+msgstr ""
+
#: themes/edx.org/cms/templates/widgets/sock.html
msgid ""
"Access Course Staff Support on the Partner Portal to submit or review "
@@ -20089,7 +20304,6 @@ msgid "Main"
msgstr ""
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Find Courses"
msgstr "Buscar Cursos"
@@ -20124,18 +20338,6 @@ msgstr ""
"{tos_link_start}Términos del servicio{tos_link_end} y "
"{honor_link_start}Código de Honor{honor_link_end}"
-#: themes/red-theme/lms/templates/header.html
-msgid "More options dropdown"
-msgstr "Despliegue de más opciones"
-
-#: themes/red-theme/lms/templates/header.html
-msgid "My Profile"
-msgstr "Mi Perfil"
-
-#: themes/red-theme/lms/templates/header.html
-msgid "Register Now"
-msgstr "Registrarse"
-
#: themes/stanford-style/lms/templates/footer.html
#: themes/stanford-style/lms/templates/static_templates/tos.html
msgid "Copyright"
@@ -20322,19 +20524,14 @@ msgstr ""
msgid "Files & Uploads"
msgstr "Archivos y cargas"
-#: cms/templates/asset_index.html cms/templates/container.html
-#: cms/templates/course-create-rerun.html cms/templates/course_info.html
-#: cms/templates/course_outline.html cms/templates/edit-tabs.html
-#: cms/templates/index.html cms/templates/library.html
-#: cms/templates/manage_users.html cms/templates/manage_users_lib.html
-#: cms/templates/textbooks.html cms/templates/videos_index.html
-msgid "Page Actions"
-msgstr "Acciones de página"
-
#: cms/templates/asset_index.html cms/templates/videos_index.html
msgid "Upload New File"
msgstr "Subir nuevo archivo"
+#: cms/templates/asset_index.html
+msgid "Help adding Files and Uploads"
+msgstr ""
+
#: cms/templates/asset_index.html
msgid "Adding Files for Your Course"
msgstr "Añadiendo Archivos a su Curso"
@@ -20554,6 +20751,15 @@ msgstr "Borrar este componente"
msgid "Drag to reorder"
msgstr "Arrastre para reorganizar"
+#: cms/templates/container.html cms/templates/course-create-rerun.html
+#: cms/templates/course_info.html cms/templates/course_outline.html
+#: cms/templates/edit-tabs.html cms/templates/index.html
+#: cms/templates/library.html cms/templates/manage_users.html
+#: cms/templates/manage_users_lib.html cms/templates/textbooks.html
+#: cms/templates/videos_index.html
+msgid "Page Actions"
+msgstr "Acciones de página"
+
#: cms/templates/container.html
msgid "Open the courseware in the LMS"
msgstr "Abrir el contenido del curso en el LMS"
@@ -20817,10 +21023,6 @@ msgstr ""
"los estudiantes de forma general. En esta sección puede añadir o editar sus "
"actualizaciones en lenguaje HTML."
-#: cms/templates/course_outline.html
-msgid "Course Outline"
-msgstr "Estructura del curso"
-
#: cms/templates/course_outline.html
msgid ""
"This course was created as a re-run. Some manual configuration is needed."
@@ -20841,10 +21043,6 @@ msgstr ""
"actualizaciones del curso y otros recursos con fecha, así como de crear y "
"comenzar las discusiones y la wiki."
-#: cms/templates/course_outline.html cms/templates/index.html
-msgid "Dismiss"
-msgstr "Descartar"
-
#: cms/templates/course_outline.html
msgid "Warning"
msgstr "Atención"
@@ -22246,10 +22444,6 @@ msgstr ""
msgid "For example, MITx"
msgstr ""
-#: cms/templates/index.html
-msgid "Show content libraries"
-msgstr ""
-
#: cms/templates/index.html
msgid "Courses Being Processed"
msgstr "Cursos que están siendo procesados"
@@ -22968,6 +23162,14 @@ msgstr "Último día que el curso estará activo"
msgid "Course End Time"
msgstr "Hora de finalización del curso"
+#: cms/templates/settings.html
+msgid "Certificates Available Date"
+msgstr ""
+
+#: cms/templates/settings.html
+msgid "By default, 48 hours after course end date"
+msgstr ""
+
#: cms/templates/settings.html
msgid "Enrollment Start Date"
msgstr "Fecha de inicio de inscripciones"
@@ -23680,18 +23882,35 @@ msgstr ""
msgid "Access is not restricted"
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"Access to this unit is not restricted, but visibility might be affected by "
+"inherited settings."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"Access to this component is not restricted, but visibility might be affected"
" by inherited settings."
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific enrollment "
+"tracks or content groups."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific enrollment"
" tracks or content groups."
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific content groups."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific content "
@@ -23733,8 +23952,8 @@ msgstr ""
#: cms/templates/visibility_editor.html
msgid ""
-"This group no longer exists. Choose another group or do not restrict access "
-"to this component."
+"This group no longer exists. Choose another group or remove the access "
+"restriction."
msgstr ""
#: cms/templates/emails/activation_email.txt
@@ -23902,10 +24121,6 @@ msgstr "Navegación del curso"
msgid "Outline"
msgstr "Estructura"
-#: cms/templates/widgets/header.html
-msgid "Updates"
-msgstr "Actualizaciones"
-
#: cms/templates/widgets/header.html
msgid "Import"
msgstr "Importar"
diff --git a/conf/locale/es_419/LC_MESSAGES/djangojs.mo b/conf/locale/es_419/LC_MESSAGES/djangojs.mo
index 9f5e0f004c..bc7b65d4d4 100644
Binary files a/conf/locale/es_419/LC_MESSAGES/djangojs.mo and b/conf/locale/es_419/LC_MESSAGES/djangojs.mo differ
diff --git a/conf/locale/es_419/LC_MESSAGES/djangojs.po b/conf/locale/es_419/LC_MESSAGES/djangojs.po
index c50e71cf26..fdd45f5749 100644
--- a/conf/locale/es_419/LC_MESSAGES/djangojs.po
+++ b/conf/locale/es_419/LC_MESSAGES/djangojs.po
@@ -127,9 +127,9 @@ msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-06 15:20+0000\n"
-"PO-Revision-Date: 2017-07-17 18:30+0000\n"
-"Last-Translator: Jose Antonio Sanchez Romero \n"
+"POT-Creation-Date: 2017-08-01 18:55+0000\n"
+"PO-Revision-Date: 2017-07-20 11:59+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"
@@ -241,7 +241,7 @@ msgstr "Subiendo"
#: common/static/common/templates/discussion/alert-popup.underscore
#: common/static/common/templates/discussion/forum-action-close.underscore
#: common/static/common/templates/discussion/search-alert.underscore
-#: lms/templates/student_profile/share_modal.underscore
+#: openedx/features/learner_profile/static/learner_profile/templates/share_modal.underscore
msgid "Close"
msgstr "Cerrar"
@@ -2714,7 +2714,6 @@ msgid ""
msgstr "El idioma que usan los miembros del equipo para comunicarse."
#: lms/djangoapps/teams/static/teams/js/views/edit_team.js
-#: lms/static/js/student_profile/views/learner_profile_factory.js
msgid "Country"
msgstr "País"
@@ -3836,7 +3835,6 @@ msgstr "Marcar código de inscripción como no utilizado"
#: lms/static/js/instructor_dashboard/membership.js
#: lms/static/js/student_account/views/account_settings_factory.js
-#: lms/static/js/student_profile/views/learner_profile_factory.js
#: lms/templates/financial-assistance/financial_assessment_form.underscore
msgid "Username"
msgstr "Nombre de usuario"
@@ -3849,6 +3847,10 @@ msgstr "Correo electrónico"
msgid "Revoke access"
msgstr "Quitar el acceso"
+#: lms/static/js/instructor_dashboard/membership.js
+msgid "Group"
+msgstr ""
+
#: lms/static/js/instructor_dashboard/membership.js
msgid "Enter username or email"
msgstr "Ingresa el nombre de usuario o el correo electrónico."
@@ -3858,6 +3860,10 @@ msgid "Please enter a username or email."
msgstr ""
"Por favor ingresa tu nombre de usuario o dirección de correo electrónico."
+#: lms/static/js/instructor_dashboard/membership.js
+msgid "This role requires a divided discussions scheme."
+msgstr ""
+
#: lms/static/js/instructor_dashboard/membership.js
msgid "Error changing user's permissions."
msgstr "Error al cambiar los permisos del usuario."
@@ -4287,6 +4293,24 @@ msgstr ""
"%>' para el estudiante '<%- student_id %>'. Verifica que el problema y el "
"estudiante estén identificados correctamente."
+#: lms/static/js/instructor_dashboard/student_admin.js
+msgid "Please enter a score."
+msgstr ""
+
+#: lms/static/js/instructor_dashboard/student_admin.js
+msgid ""
+"Started task to override the score for problem '<%- problem_id %>' and "
+"student '<%- student_id %>'. Click the 'Show Task Status' button to see the "
+"status of the task."
+msgstr ""
+
+#: lms/static/js/instructor_dashboard/student_admin.js
+msgid ""
+"Error starting a task to override score for problem '<%- problem_id %>' for "
+"student '<%- student_id %>'. Make sure that the the score and the problem "
+"and student identifiers are complete and correct."
+msgstr ""
+
#: lms/static/js/instructor_dashboard/student_admin.js
msgid ""
"Started entrance exam rescore task for student '{student_id}'. Click the "
@@ -4502,6 +4526,14 @@ msgid "Failed to rescore problem to improve score for user."
msgstr ""
"Falló al re puntuar el problema para mejorar la calificación del usuario."
+#: lms/static/js/staff_debug_actions.js
+msgid "Successfully overrode problem score for {user}"
+msgstr ""
+
+#: lms/static/js/staff_debug_actions.js
+msgid "Could not override problem score for {user}."
+msgstr ""
+
#: lms/static/js/student_account/account.js
msgid "The data could not be saved."
msgstr "Los datos no pudieron ser guardados."
@@ -4758,7 +4790,6 @@ msgid "Year of Birth"
msgstr "Año de nacimiento"
#: lms/static/js/student_account/views/account_settings_factory.js
-#: lms/static/js/student_profile/views/learner_profile_factory.js
msgid "Preferred Language"
msgstr "Preferencia de idioma"
@@ -4880,85 +4911,6 @@ msgstr "Información de la cuenta"
msgid "Order History"
msgstr "Historial de órdenes"
-#: lms/static/js/student_profile/views/badge_list_container.js
-msgid "Accomplishments Pagination"
-msgstr "Paginación de Logros"
-
-#: 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:"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Limited Profile"
-msgstr "Perfil limitado"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Full Profile"
-msgstr "Perfil completo"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Add Country"
-msgstr "Añadir país"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Add language"
-msgstr "Añadir idioma"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "About me"
-msgstr "Sobre mí"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid ""
-"Tell other learners a little about yourself: where you live, what your "
-"interests are, why you're taking courses, or what you hope to learn."
-msgstr ""
-"Comparte con otros usuarios algo sobre ti: donde vives, cuales son tus "
-"intereses, porque estás tomando estos cursos, o cuales son tus expectativas "
-"de aprendizaje."
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid "Account Settings page."
-msgstr "Página de configuración de cuenta."
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid ""
-"You must specify your birth year before you can share your full profile. To "
-"specify your birth year, go to the {account_settings_page_link}"
-msgstr ""
-"Debes especificar un año de nacimiento antes de poder compartir tu perfil "
-"completo. Para definir un año de nacimiento, visita "
-"{account_settings_page_link}"
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid ""
-"You must be over 13 to share a full profile. If you are over 13, make sure "
-"that you have specified a birth year on the {account_settings_page_link}"
-msgstr ""
-"Debes tener 13 años o más para compartir un perfil completo. Si tienes más "
-"de esta edad, asegúrate que has especificado un año de nacimiento en "
-"{account_settings_page_link}"
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid "Profile Image"
-msgstr "Foto de perfil"
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-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 "Sobre Mí"
-
-#: lms/static/js/student_profile/views/learner_profile_view.js
-msgid "Accomplishments"
-msgstr "Logros"
-
-#: lms/static/js/student_profile/views/learner_profile_view.js
-msgid "Profile"
-msgstr "Perfil"
-
#: lms/static/js/verify_student/views/image_input_view.js
msgid "Image Upload Error"
msgstr "Error en subir imagen"
@@ -5421,6 +5373,11 @@ msgstr ""
"La fecha de inicio del curso debe ser posterior a la fecha de inicio de "
"inscripciones."
+#: cms/static/js/models/settings/course_details.js
+msgid ""
+"The certificate available date must be later than the enrollment start date."
+msgstr ""
+
#: cms/static/js/models/settings/course_details.js
msgid "The enrollment start date cannot be after the enrollment end date."
msgstr ""
@@ -5499,6 +5456,10 @@ msgstr ""
msgid "or"
msgstr "o"
+#: cms/static/js/models/xblock_validation.js
+msgid "This unit has validation issues."
+msgstr ""
+
#: cms/static/js/models/xblock_validation.js
msgid "This component has validation issues."
msgstr "El componente tiene errores de validación"
@@ -5682,12 +5643,14 @@ msgstr "No esta en uso"
#. Translators: 'count' is number of units that the group
#. configuration is used in.
+#. Translators: 'count' is number of locations that the group
+#. configuration is used in.
#: cms/static/js/views/group_configuration_details.js
#: cms/static/js/views/partition_group_details.js
-msgid "Used in {count} unit"
-msgid_plural "Used in {count} units"
-msgstr[0] "Usado en {count} unidades"
-msgstr[1] "Usado en {count} unidades"
+msgid "Used in {count} location"
+msgid_plural "Used in {count} locations"
+msgstr[0] ""
+msgstr[1] ""
#. Translators: this refers to a collection of groups.
#: cms/static/js/views/group_configuration_item.js
@@ -5853,10 +5816,6 @@ msgstr ""
msgid "{display_name} Settings"
msgstr "Ajustes de configuración para {display_name} "
-#: cms/static/js/views/modals/course_outline_modals.js
-msgid "Change the settings for {display_name}"
-msgstr "Cambiar los ajustes para {display_name}"
-
#: cms/static/js/views/modals/course_outline_modals.js
msgid "Publish {display_name}"
msgstr "Publicar {display_name}"
@@ -5871,6 +5830,10 @@ msgstr "Publicar todos los cambios no publicados para este {item}?"
msgid "Publish"
msgstr "Publicar"
+#: cms/static/js/views/modals/course_outline_modals.js
+msgid "All Learners and Staff"
+msgstr ""
+
#: cms/static/js/views/modals/course_outline_modals.js
msgid "Basic"
msgstr "Básico"
@@ -5884,6 +5847,10 @@ msgstr ""
msgid "Editing: %(title)s"
msgstr "Editando: %(title)s"
+#: lms/templates/ccx/schedule.underscore
+msgid "Unit"
+msgstr "Unidad"
+
#: cms/static/js/views/modals/edit_xblock.js
msgid "Component"
msgstr "Componente"
@@ -5945,7 +5912,8 @@ msgstr "Estructura del curso"
msgid "Date added"
msgstr "Fecha de adición"
-#. Translators: "title" is the name of the current component being edited.
+#. Translators: "title" is the name of the current component or unit being
+#. edited.
#: cms/static/js/views/pages/container.js
msgid "Editing access for: %(title)s"
msgstr ""
@@ -7149,10 +7117,6 @@ msgstr "Expandir todo"
msgid "Collapse All"
msgstr "Colapsar todo"
-#: lms/templates/ccx/schedule.underscore
-msgid "Unit"
-msgstr "Unidad"
-
#: lms/templates/ccx/schedule.underscore
msgid "Start Date"
msgstr "Fecha inicial:"
@@ -8058,78 +8022,6 @@ msgstr "o crear una nueva aquí"
msgid "Create account"
msgstr ""
-#: lms/templates/student_profile/badge.underscore
-#, python-format
-msgid "Share your \"%(display_name)s\" award"
-msgstr "Comparte tu insignia de \"%(display_name)s\" "
-
-#: lms/templates/student_profile/badge.underscore
-msgid "Share"
-msgstr "Compartir"
-
-#: lms/templates/student_profile/badge.underscore
-#, python-format
-msgid "Earned %(created)s."
-msgstr "Obtenido %(created)s."
-
-#: lms/templates/student_profile/badge_placeholder.underscore
-msgid "What's Your Next Accomplishment?"
-msgstr "¿Qué será tu próximo logro?"
-
-#: lms/templates/student_profile/badge_placeholder.underscore
-msgid "Start working toward your next learning goal."
-msgstr "Empieza a trabajar hacia tu próxima meta de aprendizaje."
-
-#: lms/templates/student_profile/badge_placeholder.underscore
-msgid "Find a course"
-msgstr "Busca un curso"
-
-#: lms/templates/student_profile/learner_profile.underscore
-msgid "An error occurred. Try loading the page again."
-msgstr "Ocurrió un error. Intenta cargar la página nuevamente."
-
-#: 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/section_two.underscore
-msgid "This learner is currently sharing a limited profile."
-msgstr "Este usuario está compartiendo un perfil limitado."
-
-#: lms/templates/student_profile/share_modal.underscore
-msgid "Share on Mozilla Backpack"
-msgstr "Compartir en Mozilla Backpack"
-
-#: 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 ""
-"Para compartir tu certificado en Mozilla Backpack, debes tener una cuenta de"
-" Backpack primero. Completa los siguientes pasos para agregar tu certificado"
-" a Backpack."
-
-#: 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 ""
-"Crea una cuenta de %(link_start)sMozilla Backpack%(link_end)s, o inicia "
-"sesión usando una cuenta existente"
-
-#: 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 ""
-"%(download_link_start)sDescarga esta imagen (haz clic derecho o pulsa "
-"opción, guardar como)%(link_end)s y después "
-"%(upload_link_start)ssubirla%(link_end)s a tu mochila."
-
#: lms/templates/verify_student/enrollment_confirmation_step.underscore
#, python-format
msgid "Congratulations! You are now verified on %(platformName)s!"
@@ -8736,6 +8628,78 @@ msgstr "Lo sentimos, no se encuentran resultados"
msgid "Back to Dashboard"
msgstr "Volver al Panel de Control"
+#: openedx/features/learner_profile/static/learner_profile/templates/badge.underscore
+#, python-format
+msgid "Share your \"%(display_name)s\" award"
+msgstr "Comparte tu insignia de \"%(display_name)s\" "
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge.underscore
+msgid "Share"
+msgstr "Compartir"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge.underscore
+#, python-format
+msgid "Earned %(created)s."
+msgstr "Obtenido %(created)s."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge_placeholder.underscore
+msgid "What's Your Next Accomplishment?"
+msgstr "¿Qué será tu próximo logro?"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge_placeholder.underscore
+msgid "Start working toward your next learning goal."
+msgstr "Empieza a trabajar hacia tu próxima meta de aprendizaje."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge_placeholder.underscore
+msgid "Find a course"
+msgstr "Busca un curso"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/learner_profile.underscore
+msgid "An error occurred. Try loading the page again."
+msgstr "Ocurrió un error. Intenta cargar la página nuevamente."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/section_two.underscore
+msgid "You are currently sharing a limited profile."
+msgstr "Actualmente está compartiendo un perfil limitado."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/section_two.underscore
+msgid "This learner is currently sharing a limited profile."
+msgstr "Este usuario está compartiendo un perfil limitado."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/share_modal.underscore
+msgid "Share on Mozilla Backpack"
+msgstr "Compartir en Mozilla Backpack"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/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 ""
+"Para compartir tu certificado en Mozilla Backpack, debes tener una cuenta de"
+" Backpack primero. Completa los siguientes pasos para agregar tu certificado"
+" a Backpack."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/share_modal.underscore
+#, python-format
+msgid ""
+"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to "
+"your existing account"
+msgstr ""
+"Crea una cuenta de %(link_start)sMozilla Backpack%(link_end)s, o inicia "
+"sesión usando una cuenta existente"
+
+#: openedx/features/learner_profile/static/learner_profile/templates/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 ""
+"%(download_link_start)sDescarga esta imagen (haz clic derecho o pulsa "
+"opción, guardar como)%(link_end)s y después "
+"%(upload_link_start)ssubirla%(link_end)s a tu mochila."
+
#: cms/templates/js/access-editor.underscore
msgid "Limit Access"
msgstr "Restrinja permisos"
@@ -8984,6 +8948,20 @@ msgstr "Activar"
msgid "Deactivate"
msgstr "Desactivar"
+#: cms/templates/js/container-access.underscore
+msgid "component"
+msgstr ""
+
+#: cms/templates/js/container-access.underscore
+msgid "Access to this {blockType} is restricted to: {selectedGroupsLabel}"
+msgstr ""
+
+#: cms/templates/js/container-access.underscore
+msgid ""
+"Access to some content in this {blockType} is restricted to specific groups "
+"of learners."
+msgstr ""
+
#: cms/templates/js/container-message.underscore
msgid ""
"Caution: The last published version of this unit is live. By publishing "
@@ -9155,6 +9133,10 @@ msgstr "Las unidades no publicadas no serán liberadas"
msgid "Unpublished changes to content that will release in the future"
msgstr "Cambios no publicados del contenido que será liberado en el futuro"
+#: cms/templates/js/course-outline.underscore
+msgid "Access to this unit is restricted to: {selectedGroupsLabel}"
+msgstr ""
+
#: cms/templates/js/course-outline.underscore
msgid ""
"Access to some content in this unit is restricted to specific groups of "
@@ -9708,12 +9690,6 @@ msgstr "con %(section_or_subsection)s"
msgid "Staff and Learners"
msgstr "Funcionarios y estudiantes"
-#: cms/templates/js/publish-xblock.underscore
-msgid ""
-"Access to some content in this unit is restricted to specific groups of "
-"learners."
-msgstr ""
-
#: cms/templates/js/publish-xblock.underscore
#: cms/templates/js/staff-lock-editor.underscore
msgid "Hide from learners"
@@ -10007,6 +9983,32 @@ msgstr ""
" revisión de exámenes supervisados deba validar al revisar los videos. Por "
"ejemplo, puede especificar que se permite el uso de calculadoras."
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Unit Access"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Restrict access to:"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Select a group type"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Select one or more groups:"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Deleted Group"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid ""
+"This group no longer exists. Choose another group or do not restrict access "
+"to this unit."
+msgstr ""
+
#: cms/templates/js/upload-dialog.underscore
msgid "File upload succeeded"
msgstr "Archivo subido con exito"
@@ -10047,9 +10049,9 @@ msgid ""
"should be {maxFileSize} and format must be one of {supportedImageFormats}."
msgstr ""
-#: cms/templates/js/xblock-string-field-editor.underscore
-msgid "Edit the name"
-msgstr "Editar el nombre"
+#: cms/templates/js/xblock-access-editor.underscore
+msgid "Set Access"
+msgstr ""
#: cms/templates/js/xblock-string-field-editor.underscore
#, python-format
diff --git a/conf/locale/fr/LC_MESSAGES/django.mo b/conf/locale/fr/LC_MESSAGES/django.mo
index c4dfc4129b..3f960cd977 100644
Binary files a/conf/locale/fr/LC_MESSAGES/django.mo and b/conf/locale/fr/LC_MESSAGES/django.mo differ
diff --git a/conf/locale/fr/LC_MESSAGES/django.po b/conf/locale/fr/LC_MESSAGES/django.po
index a18fbd5881..b8d25df609 100644
--- a/conf/locale/fr/LC_MESSAGES/django.po
+++ b/conf/locale/fr/LC_MESSAGES/django.po
@@ -257,7 +257,7 @@ msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-06 15:21+0000\n"
+"POT-Creation-Date: 2017-08-01 18:56+0000\n"
"PO-Revision-Date: 2017-05-10 21:24+0000\n"
"Last-Translator: Ned Batchelder \n"
"Language-Team: French (http://www.transifex.com/open-edx/edx-platform/language/fr/)\n"
@@ -489,6 +489,28 @@ msgstr ""
msgid "Verified modes cannot be free."
msgstr "Les modes vérifiés ne peuvent être gratuit."
+#. #-#-#-#-# django-partial.po (edx-platform) #-#-#-#-#
+#. Translators: This will look like '$50', where {currency_symbol} is a symbol
+#. such as '$' and {price} is a
+#. numerical amount in that currency. Adjust this display as needed for your
+#. language.
+#. #-#-#-#-# mako.po (edx-platform) #-#-#-#-#
+#. Translators: currency_symbol is a symbol indicating type of currency, ex
+#. "$".
+#. This string would look like this when all variables are in:
+#. "$500.00"
+#: common/djangoapps/course_modes/models.py
+#: lms/templates/shoppingcart/shopping_cart.html
+#, python-brace-format
+msgid "{currency_symbol}{price}"
+msgstr "{currency_symbol}{price}"
+
+#. Translators: This refers to the cost of the course. In this case, the
+#. course costs nothing so it is free.
+#: common/djangoapps/course_modes/models.py
+msgid "Free"
+msgstr "Gratuit"
+
#: common/djangoapps/course_modes/models.py
msgid ""
"The time period before a course ends in which a course mode will expire"
@@ -533,6 +555,10 @@ msgstr "Administrateur"
msgid "Moderator"
msgstr "Modérateur"
+#: common/djangoapps/django_comment_common/models.py
+msgid "Group Moderator"
+msgstr ""
+
#: common/djangoapps/django_comment_common/models.py
msgid "Community TA"
msgstr "Assistant"
@@ -2005,9 +2031,8 @@ msgid "Could not interpret '{student_answer}' as a number."
msgstr ""
#: common/lib/capa/capa/responsetypes.py
-msgid ""
-"Answers can include numerals, operation signs, and a few specific "
-"characters, such as the constants e and i."
+#, python-brace-format
+msgid "You may not use variables ({bad_variables}) in numerical problems."
msgstr ""
#: common/lib/capa/capa/responsetypes.py
@@ -2137,6 +2162,11 @@ msgstr "Évaluateur externe"
msgid "Math Expression Input"
msgstr ""
+#: common/lib/capa/capa/responsetypes.py
+#, python-brace-format
+msgid "Invalid input: {bad_input} not permitted in answer."
+msgstr ""
+
#: common/lib/capa/capa/responsetypes.py
#, python-brace-format
msgid ""
@@ -2375,6 +2405,10 @@ msgstr ""
msgid "Dictionary with the current student responses"
msgstr "Dictionnaire des réponses actuelles des élèves"
+#: common/lib/xmodule/xmodule/capa_base.py
+msgid "Dictionary with the current student score"
+msgstr ""
+
#: common/lib/xmodule/xmodule/capa_base.py
msgid "Whether or not the answers have been saved since last submit"
msgstr ""
@@ -2450,6 +2484,8 @@ msgstr ""
#: lms/templates/manage_user_standing.html lms/templates/register-shib.html
#: lms/templates/peer_grading/peer_grading_problem.html
#: lms/templates/survey/survey.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
#: themes/stanford-style/lms/templates/register-shib.html
msgid "Submit"
msgstr "Soumettre"
@@ -3063,6 +3099,7 @@ msgstr ""
#: common/lib/xmodule/xmodule/course_module.py
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Handouts"
msgstr "Documents de cours"
@@ -5868,6 +5905,15 @@ msgstr ""
"Ce type de composant ne peut pas être affiché tout en consultant le cours "
"comme étudiant spécifique."
+#: lms/djangoapps/courseware/models.py
+msgid ""
+"Number of days a learner has to upgrade after content is made available"
+msgstr ""
+
+#: lms/djangoapps/courseware/models.py
+msgid "Disable the dynamic upgrade deadline for this course run."
+msgstr ""
+
#: lms/djangoapps/courseware/tabs.py lms/templates/courseware/syllabus.html
msgid "Syllabus"
msgstr "Syllabus"
@@ -5885,27 +5931,28 @@ msgstr "Progression"
msgid "Textbooks"
msgstr "Manuels"
-#. #-#-#-#-# django-partial.po (edx-platform) #-#-#-#-#
-#. Translators: This will look like '$50', where {currency_symbol} is a symbol
-#. such as '$' and {price} is a
-#. numerical amount in that currency. Adjust this display as needed for your
-#. language.
-#. #-#-#-#-# mako.po (edx-platform) #-#-#-#-#
-#. Translators: currency_symbol is a symbol indicating type of currency, ex
-#. "$".
-#. This string would look like this when all variables are in:
-#. "$500.00"
#: lms/djangoapps/courseware/views/views.py
-#: lms/templates/shoppingcart/shopping_cart.html
#, python-brace-format
-msgid "{currency_symbol}{price}"
-msgstr "{currency_symbol}{price}"
+msgid "To see course content, {sign_in_link} or {register_link}."
+msgstr ""
-#. Translators: This refers to the cost of the course. In this case, the
-#. course costs nothing so it is free.
#: lms/djangoapps/courseware/views/views.py
-msgid "Free"
-msgstr "Gratuit"
+msgid "sign in"
+msgstr ""
+
+#: lms/djangoapps/courseware/views/views.py
+msgid "register"
+msgstr ""
+
+#: lms/djangoapps/courseware/views/views.py
+#, python-brace-format
+msgid ""
+"You must be enrolled in the course to see course content. {enroll_link}."
+msgstr ""
+
+#: lms/djangoapps/courseware/views/views.py
+msgid "Enroll now"
+msgstr ""
#: lms/djangoapps/courseware/views/views.py
msgid "Your enrollment: Audit track"
@@ -7335,6 +7382,14 @@ msgstr ""
msgid "This component cannot be rescored."
msgstr ""
+#: lms/djangoapps/instructor_task/api_helper.py
+msgid "This component does not support score override."
+msgstr ""
+
+#: lms/djangoapps/instructor_task/api_helper.py
+msgid "Scores must be between 0 and the value of the problem."
+msgstr ""
+
#: lms/djangoapps/instructor_task/api_helper.py
msgid "Not all problems in entrance exam support re-scoring."
msgstr ""
@@ -7345,6 +7400,12 @@ msgstr ""
msgid "rescored"
msgstr ""
+#. Translators: This is a past-tense verb that is inserted into task progress
+#. messages as {action}.
+#: lms/djangoapps/instructor_task/tasks.py
+msgid "overridden"
+msgstr ""
+
#. Translators: This is a past-tense verb that is inserted into task progress
#. messages as {action}.
#: lms/djangoapps/instructor_task/tasks.py
@@ -7637,10 +7698,25 @@ msgid ""
"configurations."
msgstr ""
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid ""
+"This unit's access settings refer to deleted or invalid group "
+"configurations."
+msgstr ""
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid "This component's access settings refer to deleted or invalid groups."
msgstr ""
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid "This unit's access settings refer to deleted or invalid groups."
+msgstr ""
+
+#: lms/djangoapps/lms_xblock/mixin.py
+msgid ""
+"This component's access settings contradict its parent's access settings."
+msgstr ""
+
#: lms/djangoapps/lms_xblock/mixin.py
msgid "Whether to display this module in the table of contents"
msgstr ""
@@ -9040,6 +9116,11 @@ msgid ""
"opportunities from the world's best universities."
msgstr ""
+#: lms/templates/emails/password_reset_subject.txt
+#, python-format
+msgid "Password reset on %(platform_name)s"
+msgstr ""
+
#: lms/templates/logout.html
msgid "Signed Out"
msgstr ""
@@ -9077,11 +9158,11 @@ msgid ""
"'Cancel' button."
msgstr ""
+#: lms/templates/oauth2_provider/authorize.html
#: cms/templates/course-create-rerun.html cms/templates/index.html
#: cms/templates/manage_users.html cms/templates/manage_users_lib.html
-#: lms/templates/modal/accessible_confirm.html
msgid "Cancel"
-msgstr "Annuler"
+msgstr ""
#: lms/templates/oauth2_provider/authorize.html
msgid "Allow"
@@ -9096,10 +9177,8 @@ msgstr "Erreur"
#, python-format
msgid ""
"You're receiving this e-mail because you requested a password reset for your"
-" user account at %(site_name)s."
+" user account at %(platform_name)s."
msgstr ""
-"Vous recevez cet email parce que vous avez demandé une réinitialisation de "
-"votre mot de passe pour votre compte %(site_name)s."
#: lms/templates/registration/password_reset_email.html
msgid "Please go to the following page and choose a new password:"
@@ -9221,7 +9300,6 @@ msgstr "Aperçu"
#: lms/templates/instructor/instructor_dashboard_2/metrics.html
#: lms/templates/instructor/instructor_dashboard_2/set_course_mode_price_modal.html
#: lms/templates/modal/_modal-settings-language.html
-#: lms/templates/modal/accessible_confirm.html
#: themes/edx.org/lms/templates/dashboard.html
msgid "Close"
msgstr "Fermer"
@@ -9491,6 +9569,8 @@ msgstr ""
#: lms/templates/courseware/courses.html
#: lms/templates/courseware/courseware.html
#: lms/templates/edxnotes/edxnotes.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
#: themes/edx.org/lms/templates/dashboard.html
#: themes/stanford-style/lms/templates/index.html
msgid "Search"
@@ -9886,6 +9966,22 @@ msgstr ""
"Langue réinitialisée selon la préférence de l'utilisateur : "
"{preview_language_code}"
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a test message"
+msgstr ""
+
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a success message"
+msgstr ""
+
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a test warning"
+msgstr ""
+
+#: openedx/core/djangoapps/debug/views.py
+msgid "This is a test error"
+msgstr ""
+
#: openedx/core/djangoapps/embargo/forms.py
#: openedx/core/djangoapps/verified_track_content/forms.py
msgid "COURSE NOT FOUND. Please check that the course ID is valid."
@@ -10013,6 +10109,25 @@ msgstr ""
msgid "Enable course home page improvements."
msgstr ""
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Site theme changed to {site_theme}"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+#, python-brace-format
+msgid "Theme {site_theme} does not exist"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+msgid "Site theme reverted to the default"
+msgstr ""
+
+#: openedx/core/djangoapps/theming/views.py
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Theming Administration"
+msgstr ""
+
#: openedx/core/djangoapps/user_api/accounts/api.py
#, python-brace-format
msgid "The '{field_name}' field cannot be edited."
@@ -10253,6 +10368,11 @@ msgstr ""
msgid "Review the Terms of Service"
msgstr "Voir les conditions d'utilisation"
+#: openedx/core/djangoapps/util/user_messages.py
+#, python-brace-format
+msgid "{header_open}{title}{header_close}{body}"
+msgstr ""
+
#: openedx/core/djangoapps/verified_track_content/models.py
msgid "The course key for the course we would like to be auto-cohorted."
msgstr ""
@@ -11013,7 +11133,7 @@ msgstr "Contenu"
#: lms/templates/courseware/courses.html lms/templates/edxnotes/edxnotes.html
#: lms/templates/instructor/instructor_dashboard_2/certificates.html
#: lms/templates/instructor/instructor_dashboard_2/metrics.html
-#: lms/templates/student_profile/learner_profile.html
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
msgid "Loading"
msgstr "Chargement en cours"
@@ -11030,6 +11150,16 @@ msgstr "Paramètres"
msgid "Course Number"
msgstr "Numéro du cours"
+#: cms/templates/course_outline.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Course Outline"
+msgstr ""
+
+#: cms/templates/course_outline.html cms/templates/index.html
+#: openedx/features/course_experience/templates/course_experience/welcome-message-fragment.html
+msgid "Dismiss"
+msgstr ""
+
#: cms/templates/course_outline.html
#: lms/templates/instructor/instructor_dashboard_2/course_info.html
msgid "Course Start Date:"
@@ -11057,7 +11187,6 @@ msgstr "Numéro du cours :"
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Courses"
msgstr "Cours"
@@ -11148,11 +11277,14 @@ msgstr "Voir"
#: cms/templates/darklang/preview_lang.html
#: lms/templates/darklang/preview_lang.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
msgid "Preview Language Setting"
msgstr ""
#: cms/templates/maintenance/_force_publish_course.html
#: lms/templates/problem.html lms/templates/shoppingcart/shopping_cart.html
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
msgid "Reset"
msgstr "Réinitialiser"
@@ -11162,6 +11294,11 @@ msgstr "Réinitialiser"
msgid "Legal"
msgstr "Légal"
+#: cms/templates/widgets/header.html
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "Updates"
+msgstr ""
+
#: cms/templates/widgets/header.html lms/templates/navigation/navigation.html
#: lms/templates/widgets/footer-language-selector.html
msgid "Choose Language"
@@ -11245,7 +11382,6 @@ msgid "Usermenu dropdown"
msgstr ""
#: cms/templates/widgets/user_dropdown.html lms/templates/user_dropdown.html
-#: themes/red-theme/lms/templates/header.html
msgid "Sign Out"
msgstr "Se déconnecter"
@@ -11443,12 +11579,10 @@ msgid "Go back to the {link_start}home page{link_end}."
msgstr "Retour à {link_start}l'accueil{link_end}"
#: lms/templates/email_change_successful.html
-#: lms/templates/emails_change_successful.html
msgid "E-mail change successful!"
msgstr "Adresse e-mail modifiée avec succès !"
#: lms/templates/email_change_successful.html
-#: lms/templates/emails_change_successful.html
msgid "You should see your new email in your {link_start}dashboard{link_end}."
msgstr ""
"Vous devez voir votre nouvelle adresse e-mail sur votre {link_start}Tableau "
@@ -12435,14 +12569,18 @@ msgid "Add comment"
msgstr "Ajouter un commentaire"
#: lms/templates/staff_problem_info.html
-msgid "Staff Debug"
-msgstr "Débogage équipe pédagogique"
+msgid "Staff Debug:"
+msgstr ""
#: lms/templates/staff_problem_info.html
#: lms/templates/instructor/instructor_dashboard_2/e-commerce.html
msgid "Actions"
msgstr "Actions"
+#: lms/templates/staff_problem_info.html
+msgid "Score (for override only)"
+msgstr ""
+
#: lms/templates/staff_problem_info.html
msgid "Reset Learner's Attempts to Zero"
msgstr ""
@@ -12462,6 +12600,10 @@ msgstr ""
msgid "Rescore Only If Score Improves"
msgstr ""
+#: lms/templates/staff_problem_info.html
+msgid "Override Score"
+msgstr ""
+
#: lms/templates/staff_problem_info.html
msgid "Module Fields"
msgstr "Champs Module"
@@ -12677,7 +12819,7 @@ msgid ""
" not mean to do this, {undo_link_start}you can re-subscribe{link_end}."
msgstr ""
-#: lms/templates/user_dropdown.html themes/red-theme/lms/templates/header.html
+#: lms/templates/user_dropdown.html
msgid "Dashboard for:"
msgstr "Tableau de bord pour :"
@@ -13577,12 +13719,14 @@ msgid "Auto Enroll"
msgstr "Inscription Automatique"
#: lms/templates/ccx/enrollment.html
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
"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 {em_start}unchecked{em_end}, users who have not yet "
"registered for {platform_name} will not be enrolled, but will be allowed to "
@@ -13600,6 +13744,7 @@ msgid "Notify users by email"
msgstr "Notifier les utilisateurs par email"
#: lms/templates/ccx/enrollment.html
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
"If this option is {em_start}checked{em_end}, users will receive an email "
"notification."
@@ -13969,6 +14114,7 @@ msgstr ""
#: lms/templates/courseware/accordion.html
#: lms/templates/courseware/progress.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "due {date}"
msgstr "Echéance le {date}"
@@ -13977,6 +14123,7 @@ msgid "{section_format} due {{date}}"
msgstr ""
#: lms/templates/courseware/accordion.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "This content is graded"
msgstr ""
@@ -14121,6 +14268,7 @@ msgstr "Affiner votre recherche"
#: lms/templates/courseware/courseware-chromeless.html
#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "{course_number} Courseware"
msgstr "Contenu du cours {course_number}"
@@ -14133,7 +14281,8 @@ msgstr "Utilitaires du cours"
msgid "Courseware"
msgstr "Cours"
-#: lms/templates/courseware/courseware.html lms/templates/courseware/info.html
+#: lms/templates/courseware/courseware.html
+#: openedx/features/course_bookmarks/templates/course_bookmarks/course-bookmarks.html
msgid "Bookmarks"
msgstr "Favoris"
@@ -14196,6 +14345,8 @@ msgid "Welcome to {org}'s {course_name}!"
msgstr "Bienvenue au cours {course_name} de {org} !"
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
msgid "Resume Course"
msgstr "Reprendre le cours"
@@ -14212,13 +14363,10 @@ msgid "Handout Navigation"
msgstr "Navigation des documents pédagogiques"
#: lms/templates/courseware/info.html
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
msgid "Course Tools"
msgstr ""
-#: lms/templates/courseware/info.html
-msgid "Reviews"
-msgstr ""
-
#: lms/templates/courseware/news.html
msgid "News - MITx 6.002x"
msgstr "Actualités - MITx 6.002x"
@@ -16939,32 +17087,6 @@ 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 "
@@ -17004,11 +17126,9 @@ msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
-"If this option is checked, users who have not enrolled in your "
-"course will be automatically enrolled."
+"If this option is {em_start}checked{em_end}, users who have not enrolled in "
+"your course will be automatically enrolled."
msgstr ""
-"Si cette option est cochée, les nouveaux étudiants seront "
-"automatiquement inscrits."
#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid "Checking this box has no effect if 'Remove beta testers' is selected."
@@ -17142,16 +17262,30 @@ msgid "Add Moderator"
msgstr "Ajouter un Modérateur"
#: lms/templates/instructor/instructor_dashboard_2/membership.html
-msgid "Discussion Community TAs"
-msgstr "Assistants"
+msgid "Group Community TA"
+msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid ""
-"Community TAs are members of the community whom you deem particularly "
-"helpful on the discussion boards. They can edit or delete any post, clear "
-"misuse flags, close and re-open threads, endorse responses, and see posts "
-"from all groups. Their posts are marked as 'Community TA'. Only enrolled "
-"users can be added as Community TAs."
+"Group Community TAs are members of the community who help course teams "
+"moderate discussions. Group Community TAs see only posts by learners in "
+"their assigned group. They can edit or delete posts, clear flags, close and "
+"re-open threads, and endorse responses, but only for posts by learners in "
+"their group. Their posts are marked as 'Community TA'. Only enrolled "
+"learners can be added as Group Community TAs."
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
+msgid "Add Group Community TA"
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
+msgid ""
+"Community TAs are members of the community who help course teams moderate "
+"discussions. They can see posts by all learners, and can edit or delete "
+"posts, clear flags, close or re-open threads, and endorse responses. Their "
+"posts are marked as 'Community TA'. Only enrolled learners can be added as "
+"Community TAs."
msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/membership.html
@@ -17393,7 +17527,7 @@ msgid "View a specific learner's grades and progress"
msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
-msgid "Learner's {platform_name} email address or username *"
+msgid "Learner's {platform_name} email address or username"
msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
@@ -17409,7 +17543,7 @@ msgid "Adjust a learner's grade for a specific problem"
msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
-msgid "Location of problem in course *"
+msgid "Location of problem in course"
msgstr ""
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
@@ -17444,6 +17578,23 @@ msgid ""
"improves in the learner's favor."
msgstr ""
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid "Score Override"
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid "For the specified problem, override the learner's score."
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid ""
+"New score for problem, out of the total points available for the problem"
+msgstr ""
+
+#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
+msgid "Override Learner's Score"
+msgstr ""
+
#: lms/templates/instructor/instructor_dashboard_2/student_admin.html
msgid "Problem History"
msgstr ""
@@ -17558,7 +17709,6 @@ msgstr ""
#: lms/templates/navigation/navbar-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Programs"
msgstr "Programmes"
@@ -17582,28 +17732,9 @@ msgstr ""
"Vous ne trouvez pas votre langue préférée ? {link_start}Proposez-vous comme "
"traducteur volontaire !{link_end}"
-#: lms/templates/modal/accessible_confirm.html
-msgid "Confirm"
-msgstr "Confirmer"
-
-#. Translators: this text gives status on if the modal interface (a menu or
-#. piece of UI that takes the full focus of the screen) is open or not
-#: lms/templates/modal/accessible_confirm.html
-msgid "modal open"
-msgstr "ouverture modale "
-
-#: lms/templates/modal/accessible_confirm.html
-msgid "OK"
-msgstr "OK"
-
-#: lms/templates/modal/accessible_confirm.html
-msgid "open"
-msgstr "ouvrir"
-
#. Translators: This is short for "System administration".
#: lms/templates/navigation/navbar-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
-#: themes/red-theme/lms/templates/header.html
msgid "Sysadmin"
msgstr "Administrateur système"
@@ -17611,27 +17742,23 @@ msgstr "Administrateur système"
#: lms/templates/navigation/bootstrap/navbar-authenticated.html
#: lms/templates/shoppingcart/shopping_cart.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Shopping Cart"
msgstr "Panier"
#: lms/templates/navigation/navbar-logo-header.html
#: lms/templates/navigation/bootstrap/navbar-logo-header.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "{platform_name} Home Page"
msgstr "{platform_name} Accueil"
#: lms/templates/navigation/navbar-not-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "How it Works"
msgstr "Comment ça marche"
#: lms/templates/navigation/navbar-not-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
-#: themes/red-theme/lms/templates/header.html
msgid "Schools"
msgstr "Écoles"
@@ -17642,12 +17769,10 @@ msgstr "Explorer les cours"
#: lms/templates/navigation/navbar-not-authenticated.html
#: lms/templates/navigation/bootstrap/navbar-not-authenticated.html
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Sign in"
msgstr "Connexion"
#: lms/templates/navigation/navigation.html
-#: themes/red-theme/lms/templates/header.html
msgid "Global"
msgstr "Mondial"
@@ -18441,7 +18566,6 @@ msgid "Currently the {platform_name} servers are overloaded"
msgstr "Les serveurs de {platform_name} sont actuellement surchargés"
#: lms/templates/student_account/account_settings.html
-#: themes/red-theme/lms/templates/header.html
msgid "Account Settings"
msgstr "Paramètres du compte"
@@ -18453,40 +18577,6 @@ msgstr "Veuillez patienter"
msgid "Sign in or Register"
msgstr "Se connecter ou s'inscrire"
-#: lms/templates/student_profile/learner_profile.html
-msgid "Learner Profile"
-msgstr "Profil de participant"
-
-#. Translators: this section lists all the third-party authentication
-#. providers
-#. (for example, Google and LinkedIn) the user can link with or unlink from
-#. their edX account.
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Connected Accounts"
-msgstr "Comptes connectés"
-
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Linked"
-msgstr "Lié"
-
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Not Linked"
-msgstr "Non lié"
-
-#. Translators: clicking on this removes the link between a user's edX account
-#. and their account with an external authentication provider (like Google or
-#. LinkedIn).
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Unlink"
-msgstr "Supprimer le lien"
-
-#. Translators: clicking on this creates a link between a user's edX account
-#. and their account with an external authentication provider (like Google or
-#. LinkedIn).
-#: lms/templates/student_profile/third_party_auth.html
-msgid "Link"
-msgstr "Lier"
-
#: lms/templates/support/certificates.html lms/templates/support/index.html
msgid "Student Support"
msgstr "Support Étudiant"
@@ -18683,7 +18773,8 @@ msgstr "Retour à votre tableau de bord"
#: lms/templates/widgets/cookie-consent.html
msgid ""
"This website uses cookies to ensure you get the best experience on our "
-"website."
+"website. If you continue browsing this site, we understand that you accept "
+"the use of cookies."
msgstr ""
#: lms/templates/widgets/cookie-consent.html
@@ -18714,6 +18805,134 @@ msgstr ""
msgid "Add article"
msgstr "Ajouter un article"
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Language Code"
+msgstr ""
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "For example use en for English"
+msgstr ""
+
+#: openedx/core/djangoapps/dark_lang/templates/dark_lang/preview_lang_include.html
+msgid "Please refresh the page to see the changes applied."
+msgstr ""
+
+#: openedx/core/djangoapps/theming/templates/theming/theming-admin-fragment.html
+msgid "Preview Theme"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "All Rights Reserved"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Attribution"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Noncommercial"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "No Derivatives"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Share Alike"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Creative Commons licensed content, with terms as follow:"
+msgstr ""
+
+#: openedx/core/lib/license/templates/license.html
+msgid "Some Rights Reserved"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Important Course Dates"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-dates-fragment.html
+msgid "Today is {date}"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search the course"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-home-fragment.html
+msgid "Start Course"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "{subsection_format} due {{date}}"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This is your last visited course section."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "This course has not started yet."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid "We're still working on course content."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-outline-fragment.html
+msgid ""
+"This course has not started yet, and will launch on {launch_date_html}."
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-reviews-fragment.html
+msgid "Reviews"
+msgstr ""
+
+#: openedx/features/course_experience/templates/course_experience/course-updates-fragment.html
+msgid "This course does not have any updates."
+msgstr ""
+
+#: openedx/features/course_search/templates/course_search/course-search-fragment.html
+msgid "Search Results"
+msgstr ""
+
+#. Translators: this section lists all the third-party authentication
+#. providers
+#. (for example, Google and LinkedIn) the user can link with or unlink from
+#. their edX account.
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Connected Accounts"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Linked"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Not Linked"
+msgstr ""
+
+#. Translators: clicking on this removes the link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Unlink"
+msgstr ""
+
+#. Translators: clicking on this creates a link between a user's edX account
+#. and their account with an external authentication provider (like Google or
+#. LinkedIn).
+#: openedx/features/learner_profile/static/learner_profile/templates/third_party_auth.html
+msgid "Link"
+msgstr ""
+
+#: openedx/features/learner_profile/templates/learner_profile/learner_profile.html
+msgid "Learner Profile"
+msgstr ""
+
#: themes/edx.org/cms/templates/widgets/sock.html
msgid ""
"Access Course Staff Support on the Partner Portal to submit or review "
@@ -18758,7 +18977,6 @@ msgid "Main"
msgstr ""
#: themes/edx.org/lms/templates/header.html
-#: themes/red-theme/lms/templates/header.html
msgid "Find Courses"
msgstr "Trouver un cours"
@@ -18790,18 +19008,6 @@ msgstr ""
"{tos_link_start}Conditions Générales d'Utilisation{tos_link_end} et "
"{honor_link_start}Code d'Honneur{honor_link_end}"
-#: themes/red-theme/lms/templates/header.html
-msgid "More options dropdown"
-msgstr "Liste déroulante d'options supplémentaires"
-
-#: themes/red-theme/lms/templates/header.html
-msgid "My Profile"
-msgstr "Mon profil"
-
-#: themes/red-theme/lms/templates/header.html
-msgid "Register Now"
-msgstr "Inscription"
-
#: themes/stanford-style/lms/templates/footer.html
#: themes/stanford-style/lms/templates/static_templates/tos.html
msgid "Copyright"
@@ -18990,19 +19196,14 @@ msgstr ""
msgid "Files & Uploads"
msgstr "Fichiers & téléchargements"
-#: cms/templates/asset_index.html cms/templates/container.html
-#: cms/templates/course-create-rerun.html cms/templates/course_info.html
-#: cms/templates/course_outline.html cms/templates/edit-tabs.html
-#: cms/templates/index.html cms/templates/library.html
-#: cms/templates/manage_users.html cms/templates/manage_users_lib.html
-#: cms/templates/textbooks.html cms/templates/videos_index.html
-msgid "Page Actions"
-msgstr "Actions de la Page"
-
#: cms/templates/asset_index.html cms/templates/videos_index.html
msgid "Upload New File"
msgstr "Téléverser un nouveau fichier"
+#: cms/templates/asset_index.html
+msgid "Help adding Files and Uploads"
+msgstr ""
+
#: cms/templates/asset_index.html
msgid "Adding Files for Your Course"
msgstr "Ajout de fichiers à votre cours"
@@ -19205,6 +19406,15 @@ msgstr "Supprimer ce composant"
msgid "Drag to reorder"
msgstr "Glissez pour modifier l'ordre"
+#: cms/templates/container.html cms/templates/course-create-rerun.html
+#: cms/templates/course_info.html cms/templates/course_outline.html
+#: cms/templates/edit-tabs.html cms/templates/index.html
+#: cms/templates/library.html cms/templates/manage_users.html
+#: cms/templates/manage_users_lib.html cms/templates/textbooks.html
+#: cms/templates/videos_index.html
+msgid "Page Actions"
+msgstr "Actions de la Page"
+
#: cms/templates/container.html
msgid "Open the courseware in the LMS"
msgstr "Ouvrir le cours dans le LMS"
@@ -19462,10 +19672,6 @@ msgstr ""
"et pour répondre aux questions des étudiants. Vous pouvez ajouter ou éditer "
"les mises à jour en HTML."
-#: cms/templates/course_outline.html
-msgid "Course Outline"
-msgstr "Plan du Cours"
-
#: cms/templates/course_outline.html
msgid ""
"This course was created as a re-run. Some manual configuration is needed."
@@ -19481,10 +19687,6 @@ msgid ""
"and seed the discussions and wiki."
msgstr ""
-#: cms/templates/course_outline.html cms/templates/index.html
-msgid "Dismiss"
-msgstr ""
-
#: cms/templates/course_outline.html
msgid "Warning"
msgstr "Attention"
@@ -20771,10 +20973,6 @@ msgstr ""
msgid "For example, MITx"
msgstr ""
-#: cms/templates/index.html
-msgid "Show content libraries"
-msgstr ""
-
#: cms/templates/index.html
msgid "Courses Being Processed"
msgstr "Cours en Cours de Traitement"
@@ -21410,6 +21608,14 @@ msgstr "Dernier jour d'activité de votre Cours"
msgid "Course End Time"
msgstr "Heure de fin du Cours"
+#: cms/templates/settings.html
+msgid "Certificates Available Date"
+msgstr ""
+
+#: cms/templates/settings.html
+msgid "By default, 48 hours after course end date"
+msgstr ""
+
#: cms/templates/settings.html
msgid "Enrollment Start Date"
msgstr "Date de début des inscriptions"
@@ -22043,18 +22249,35 @@ msgstr ""
msgid "Access is not restricted"
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"Access to this unit is not restricted, but visibility might be affected by "
+"inherited settings."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"Access to this component is not restricted, but visibility might be affected"
" by inherited settings."
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific enrollment "
+"tracks or content groups."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific enrollment"
" tracks or content groups."
msgstr ""
+#: cms/templates/visibility_editor.html
+msgid ""
+"You can restrict access to this unit to learners in specific content groups."
+msgstr ""
+
#: cms/templates/visibility_editor.html
msgid ""
"You can restrict access to this component to learners in specific content "
@@ -22096,8 +22319,8 @@ msgstr ""
#: cms/templates/visibility_editor.html
msgid ""
-"This group no longer exists. Choose another group or do not restrict access "
-"to this component."
+"This group no longer exists. Choose another group or remove the access "
+"restriction."
msgstr ""
#: cms/templates/emails/activation_email.txt
@@ -22248,10 +22471,6 @@ msgstr ""
msgid "Outline"
msgstr "Plan du Cours"
-#: cms/templates/widgets/header.html
-msgid "Updates"
-msgstr "Annonces"
-
#: cms/templates/widgets/header.html
msgid "Import"
msgstr "Importer"
diff --git a/conf/locale/fr/LC_MESSAGES/djangojs.mo b/conf/locale/fr/LC_MESSAGES/djangojs.mo
index 1d3eb1b15d..35d7693865 100644
Binary files a/conf/locale/fr/LC_MESSAGES/djangojs.mo and b/conf/locale/fr/LC_MESSAGES/djangojs.mo differ
diff --git a/conf/locale/fr/LC_MESSAGES/djangojs.po b/conf/locale/fr/LC_MESSAGES/djangojs.po
index fd8561e19e..50e2d1f198 100644
--- a/conf/locale/fr/LC_MESSAGES/djangojs.po
+++ b/conf/locale/fr/LC_MESSAGES/djangojs.po
@@ -18,7 +18,7 @@
# Encolpe Degoute , 2013
# Eric Fortin, 2014,2016
# Eric Fortin, 2014,2016
-# Florent Dijoux , 2016
+# Fox , 2016
# Françoise Docq, 2014
# Françoise Docq, 2014
# Gérard Vidal , 2014-2015
@@ -169,8 +169,8 @@ msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-06 15:20+0000\n"
-"PO-Revision-Date: 2017-07-06 15:25+0000\n"
+"POT-Creation-Date: 2017-08-01 18:55+0000\n"
+"PO-Revision-Date: 2017-07-20 11:59+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"
@@ -280,7 +280,7 @@ msgstr "Chargement en cours"
#: common/static/common/templates/discussion/alert-popup.underscore
#: common/static/common/templates/discussion/forum-action-close.underscore
#: common/static/common/templates/discussion/search-alert.underscore
-#: lms/templates/student_profile/share_modal.underscore
+#: openedx/features/learner_profile/static/learner_profile/templates/share_modal.underscore
msgid "Close"
msgstr "Fermer"
@@ -2708,7 +2708,6 @@ msgstr ""
"communiquer entre eux."
#: lms/djangoapps/teams/static/teams/js/views/edit_team.js
-#: lms/static/js/student_profile/views/learner_profile_factory.js
msgid "Country"
msgstr "Pays"
@@ -3801,7 +3800,6 @@ msgstr "Marquer le code d'inscription comme non utilisé"
#: lms/static/js/instructor_dashboard/membership.js
#: lms/static/js/student_account/views/account_settings_factory.js
-#: lms/static/js/student_profile/views/learner_profile_factory.js
#: lms/templates/financial-assistance/financial_assessment_form.underscore
msgid "Username"
msgstr "Nom d'utilisateur"
@@ -3814,6 +3812,10 @@ msgstr "Email"
msgid "Revoke access"
msgstr "Retirer l'accès"
+#: lms/static/js/instructor_dashboard/membership.js
+msgid "Group"
+msgstr ""
+
#: lms/static/js/instructor_dashboard/membership.js
msgid "Enter username or email"
msgstr ""
@@ -3822,6 +3824,10 @@ msgstr ""
msgid "Please enter a username or email."
msgstr "Veuillez saisir un nom d'utilisateur ou un email."
+#: lms/static/js/instructor_dashboard/membership.js
+msgid "This role requires a divided discussions scheme."
+msgstr ""
+
#: lms/static/js/instructor_dashboard/membership.js
msgid "Error changing user's permissions."
msgstr "Erreur lors du changement des permissions de l'utilisateur."
@@ -4223,6 +4229,24 @@ msgid ""
"are complete and correct."
msgstr ""
+#: lms/static/js/instructor_dashboard/student_admin.js
+msgid "Please enter a score."
+msgstr ""
+
+#: lms/static/js/instructor_dashboard/student_admin.js
+msgid ""
+"Started task to override the score for problem '<%- problem_id %>' and "
+"student '<%- student_id %>'. Click the 'Show Task Status' button to see the "
+"status of the task."
+msgstr ""
+
+#: lms/static/js/instructor_dashboard/student_admin.js
+msgid ""
+"Error starting a task to override score for problem '<%- problem_id %>' for "
+"student '<%- student_id %>'. Make sure that the the score and the problem "
+"and student identifiers are complete and correct."
+msgstr ""
+
#: lms/static/js/instructor_dashboard/student_admin.js
msgid ""
"Started entrance exam rescore task for student '{student_id}'. Click the "
@@ -4426,6 +4450,14 @@ msgstr ""
msgid "Failed to rescore problem to improve score for user."
msgstr ""
+#: lms/static/js/staff_debug_actions.js
+msgid "Successfully overrode problem score for {user}"
+msgstr ""
+
+#: lms/static/js/staff_debug_actions.js
+msgid "Could not override problem score for {user}."
+msgstr ""
+
#: lms/static/js/student_account/account.js
msgid "The data could not be saved."
msgstr "Les données n'ont pas pu être enregistrées"
@@ -4669,7 +4701,6 @@ msgid "Year of Birth"
msgstr "Année de naissance"
#: lms/static/js/student_account/views/account_settings_factory.js
-#: lms/static/js/student_profile/views/learner_profile_factory.js
msgid "Preferred Language"
msgstr "Langue préférée"
@@ -4788,84 +4819,6 @@ msgstr "Information du compte"
msgid "Order History"
msgstr "Historique des commandes"
-#: lms/static/js/student_profile/views/badge_list_container.js
-msgid "Accomplishments Pagination"
-msgstr "Paginations des réalisations"
-
-#: 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:"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Limited Profile"
-msgstr "Profil restreint"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Full Profile"
-msgstr "Profil complet"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Add Country"
-msgstr "Ajouter un Pays"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "Add language"
-msgstr "Ajouter une langue"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid "About me"
-msgstr "A propos de moi"
-
-#: lms/static/js/student_profile/views/learner_profile_factory.js
-msgid ""
-"Tell other learners a little about yourself: where you live, what your "
-"interests are, why you're taking courses, or what you hope to learn."
-msgstr ""
-"Parlez nous de vous : où habitez-vous, quels sont vos intérêts, pourquoi "
-"suivez-vous des cours ou ce que vous souhaitez apprendre."
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid "Account Settings page."
-msgstr "Paramètres du compte"
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid ""
-"You must specify your birth year before you can share your full profile. To "
-"specify your birth year, go to the {account_settings_page_link}"
-msgstr ""
-"Vous devez renseigner votre année de naissance avant de pouvoir partager "
-"votre profil complet. Pour renseigner votre année de naissance, allez sur "
-"{account_settings_page_link}"
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid ""
-"You must be over 13 to share a full profile. If you are over 13, make sure "
-"that you have specified a birth year on the {account_settings_page_link}"
-msgstr ""
-"Vous devez avoir plus de 13 ans pour partager un profil complet. Si vous "
-"avez plus de 13 ans, assurez-vous que votre année de naissance est correcte "
-"dans {account_settings_page_link}"
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-msgid "Profile Image"
-msgstr "Image du profil"
-
-#: lms/static/js/student_profile/views/learner_profile_fields.js
-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 "À propos de moi"
-
-#: lms/static/js/student_profile/views/learner_profile_view.js
-msgid "Accomplishments"
-msgstr "Accomplissements"
-
-#: lms/static/js/student_profile/views/learner_profile_view.js
-msgid "Profile"
-msgstr "Profil"
-
#: lms/static/js/verify_student/views/image_input_view.js
msgid "Image Upload Error"
msgstr "Erreur lors du téléversement de l'image"
@@ -5331,6 +5284,11 @@ msgstr ""
"La date de début de cours ne peut pas être antérieure à la date de début des"
" inscriptions."
+#: cms/static/js/models/settings/course_details.js
+msgid ""
+"The certificate available date must be later than the enrollment start date."
+msgstr ""
+
#: cms/static/js/models/settings/course_details.js
msgid "The enrollment start date cannot be after the enrollment end date."
msgstr ""
@@ -5411,6 +5369,10 @@ msgstr ""
msgid "or"
msgstr "ou"
+#: cms/static/js/models/xblock_validation.js
+msgid "This unit has validation issues."
+msgstr ""
+
#: cms/static/js/models/xblock_validation.js
msgid "This component has validation issues."
msgstr "Ce composant a des problèmes de validation."
@@ -5594,12 +5556,14 @@ msgstr "Non utilisé"
#. Translators: 'count' is number of units that the group
#. configuration is used in.
+#. Translators: 'count' is number of locations that the group
+#. configuration is used in.
#: cms/static/js/views/group_configuration_details.js
#: cms/static/js/views/partition_group_details.js
-msgid "Used in {count} unit"
-msgid_plural "Used in {count} units"
-msgstr[0] "Utilisé par {count} unités."
-msgstr[1] "Utilisés par {count} unités."
+msgid "Used in {count} location"
+msgid_plural "Used in {count} locations"
+msgstr[0] ""
+msgstr[1] ""
#. Translators: this refers to a collection of groups.
#: cms/static/js/views/group_configuration_item.js
@@ -5765,10 +5729,6 @@ msgstr ""
msgid "{display_name} Settings"
msgstr "Paramètres de {display_name}"
-#: cms/static/js/views/modals/course_outline_modals.js
-msgid "Change the settings for {display_name}"
-msgstr "Modifier les paramètres pour {display_name}"
-
#: cms/static/js/views/modals/course_outline_modals.js
msgid "Publish {display_name}"
msgstr "Publier {display_name}"
@@ -5783,6 +5743,10 @@ msgstr "Publier toutes les modifications non publiées pour cet {item} ?"
msgid "Publish"
msgstr "Publier"
+#: cms/static/js/views/modals/course_outline_modals.js
+msgid "All Learners and Staff"
+msgstr ""
+
#: cms/static/js/views/modals/course_outline_modals.js
msgid "Basic"
msgstr "Basique"
@@ -5796,6 +5760,10 @@ msgstr ""
msgid "Editing: %(title)s"
msgstr "Modification: %(title)s"
+#: lms/templates/ccx/schedule.underscore
+msgid "Unit"
+msgstr "Unité"
+
#: cms/static/js/views/modals/edit_xblock.js
msgid "Component"
msgstr "Composante"
@@ -5858,7 +5826,8 @@ msgstr ""
msgid "Date added"
msgstr "Date ajoutée"
-#. Translators: "title" is the name of the current component being edited.
+#. Translators: "title" is the name of the current component or unit being
+#. edited.
#: cms/static/js/views/pages/container.js
msgid "Editing access for: %(title)s"
msgstr ""
@@ -7043,10 +7012,6 @@ msgstr "Tout déplier"
msgid "Collapse All"
msgstr "Tout replier"
-#: lms/templates/ccx/schedule.underscore
-msgid "Unit"
-msgstr "Unité"
-
#: lms/templates/ccx/schedule.underscore
msgid "Start Date"
msgstr "Date de début"
@@ -7919,70 +7884,6 @@ msgstr "ou en créer un nouveau ici"
msgid "Create 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 "Vous partagez actuellement votre 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
msgid "Congratulations! You are now verified on %(platformName)s!"
@@ -8571,6 +8472,70 @@ msgstr "Désolé, aucun résultat trouvé."
msgid "Back to Dashboard"
msgstr "Retour au tableau de bord"
+#: openedx/features/learner_profile/static/learner_profile/templates/badge.underscore
+#, python-format
+msgid "Share your \"%(display_name)s\" award"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge.underscore
+msgid "Share"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge.underscore
+#, python-format
+msgid "Earned %(created)s."
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge_placeholder.underscore
+msgid "What's Your Next Accomplishment?"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge_placeholder.underscore
+msgid "Start working toward your next learning goal."
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/badge_placeholder.underscore
+msgid "Find a course"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/learner_profile.underscore
+msgid "An error occurred. Try loading the page again."
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/section_two.underscore
+msgid "You are currently sharing a limited profile."
+msgstr "Vous partagez actuellement votre profil restreint."
+
+#: openedx/features/learner_profile/static/learner_profile/templates/section_two.underscore
+msgid "This learner is currently sharing a limited profile."
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/share_modal.underscore
+msgid "Share on Mozilla Backpack"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/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 ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/share_modal.underscore
+#, python-format
+msgid ""
+"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to "
+"your existing account"
+msgstr ""
+
+#: openedx/features/learner_profile/static/learner_profile/templates/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 ""
+
#: cms/templates/js/access-editor.underscore
msgid "Limit Access"
msgstr "Accès Limité"
@@ -8816,6 +8781,20 @@ msgstr ""
msgid "Deactivate"
msgstr ""
+#: cms/templates/js/container-access.underscore
+msgid "component"
+msgstr ""
+
+#: cms/templates/js/container-access.underscore
+msgid "Access to this {blockType} is restricted to: {selectedGroupsLabel}"
+msgstr ""
+
+#: cms/templates/js/container-access.underscore
+msgid ""
+"Access to some content in this {blockType} is restricted to specific groups "
+"of learners."
+msgstr ""
+
#: cms/templates/js/container-message.underscore
msgid ""
"Caution: The last published version of this unit is live. By publishing "
@@ -8977,6 +8956,10 @@ msgstr "Les unités non publiées ne seront pas diffusées."
msgid "Unpublished changes to content that will release in the future"
msgstr ""
+#: cms/templates/js/course-outline.underscore
+msgid "Access to this unit is restricted to: {selectedGroupsLabel}"
+msgstr ""
+
#: cms/templates/js/course-outline.underscore
msgid ""
"Access to some content in this unit is restricted to specific groups of "
@@ -9513,12 +9496,6 @@ msgstr "avec %(section_or_subsection)s"
msgid "Staff and Learners"
msgstr ""
-#: cms/templates/js/publish-xblock.underscore
-msgid ""
-"Access to some content in this unit is restricted to specific groups of "
-"learners."
-msgstr ""
-
#: cms/templates/js/publish-xblock.underscore
#: cms/templates/js/staff-lock-editor.underscore
msgid "Hide from learners"
@@ -9791,6 +9768,32 @@ msgid ""
"specify that calculators are allowed."
msgstr ""
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Unit Access"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Restrict access to:"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Select a group type"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Select one or more groups:"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid "Deleted Group"
+msgstr ""
+
+#: cms/templates/js/unit-access-editor.underscore
+msgid ""
+"This group no longer exists. Choose another group or do not restrict access "
+"to this unit."
+msgstr ""
+
#: cms/templates/js/upload-dialog.underscore
msgid "File upload succeeded"
msgstr "Chargement du fichier réussi"
@@ -9828,9 +9831,9 @@ msgid ""
"should be {maxFileSize} and format must be one of {supportedImageFormats}."
msgstr ""
-#: cms/templates/js/xblock-string-field-editor.underscore
-msgid "Edit the name"
-msgstr "Modifier le nom"
+#: cms/templates/js/xblock-access-editor.underscore
+msgid "Set Access"
+msgstr ""
#: cms/templates/js/xblock-string-field-editor.underscore
#, python-format
diff --git a/conf/locale/he/LC_MESSAGES/django.mo b/conf/locale/he/LC_MESSAGES/django.mo
index 0fbba489bd..21331883ce 100644
Binary files a/conf/locale/he/LC_MESSAGES/django.mo and b/conf/locale/he/LC_MESSAGES/django.mo differ
diff --git a/conf/locale/he/LC_MESSAGES/django.po b/conf/locale/he/LC_MESSAGES/django.po
index bb403d984e..a155b82854 100644
--- a/conf/locale/he/LC_MESSAGES/django.po
+++ b/conf/locale/he/LC_MESSAGES/django.po
@@ -10,6 +10,7 @@
# e2f_HE c1 , 2016-2017
# e2f he_r1 , 2016
# Nadav Stark , 2015
+# Ned Batchelder , 2017
# qualityalltext , 2016
# Ron Rozen , 2016
# shay nativ, 2015
@@ -62,6 +63,7 @@
# Nadav Stark , 2015
# qualityalltext , 2016-2017
# Ron Rozen , 2016
+# Yoav Caspin , 2017
# #-#-#-#-# wiki.po (edx-platform) #-#-#-#-#
# edX translation file
# Copyright (C) 2017 edX
@@ -79,7 +81,7 @@ msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n"
-"POT-Creation-Date: 2017-07-06 15:21+0000\n"
+"POT-Creation-Date: 2017-08-01 18:56+0000\n"
"PO-Revision-Date: 2017-03-29 06:21+0000\n"
"Last-Translator: e2f_HE c1 \n"
"Language-Team: Hebrew (http://www.transifex.com/open-edx/edx-platform/language/he/)\n"
@@ -181,7 +183,7 @@ msgid ""
"photos for verification. This appies ONLY to modes that require "
"verification."
msgstr ""
-"אפשרות: לאחר תאריך/שעה אלו, לא יוכלו יותר המשתמשים לשלוח תמונות לאימות. "
+"אופציונלי: לאחר תאריך/שעה אלו, לא יוכלו יותר המשתמשים לשלוח תמונות לאימות. "
"אפשרות זו חלה אך ורק על מצבים הדורשים אימות."
#: common/djangoapps/course_modes/helpers.py
@@ -303,6 +305,28 @@ msgstr "לא ניתן להגדיר expiration_datetime במצבי חינוך מ
msgid "Verified modes cannot be free."
msgstr "מצבים מאומתים אינם יכולים להיות בחינם."
+#. #-#-#-#-# django-partial.po (edx-platform) #-#-#-#-#
+#. Translators: This will look like '$50', where {currency_symbol} is a symbol
+#. such as '$' and {price} is a
+#. numerical amount in that currency. Adjust this display as needed for your
+#. language.
+#. #-#-#-#-# mako.po (edx-platform) #-#-#-#-#
+#. Translators: currency_symbol is a symbol indicating type of currency, ex
+#. "$".
+#. This string would look like this when all variables are in:
+#. "$500.00"
+#: common/djangoapps/course_modes/models.py
+#: lms/templates/shoppingcart/shopping_cart.html
+#, python-brace-format
+msgid "{currency_symbol}{price}"
+msgstr "{currency_symbol}{price}"
+
+#. Translators: This refers to the cost of the course. In this case, the
+#. course costs nothing so it is free.
+#: common/djangoapps/course_modes/models.py
+msgid "Free"
+msgstr "חינם"
+
#: common/djangoapps/course_modes/models.py
msgid ""
"The time period before a course ends in which a course mode will expire"
@@ -311,7 +335,7 @@ msgstr "פרק הזמן לפני תום הקורס שבו יפוג תוקפו ש
#: common/djangoapps/course_modes/views.py
#, python-brace-format
msgid "Congratulations! You are now enrolled in {course_name}"
-msgstr ""
+msgstr "ברכות! אתה רשום כעת ב-{course_name}"
#: common/djangoapps/course_modes/views.py
#, python-brace-format
@@ -320,6 +344,9 @@ msgid ""
"{partner_names}, sponsored by {enterprise_name}. Please select your "
"enrollment information below."
msgstr ""
+"ברוכ/ה הבאה {username}! את/ה עומד/ת להרשם לקורס {course_name}, מ "
+"{partner_names}, ממומן על ידי {enterprise_name}. בבקשה בחר/י למטה את המידע "
+"שלך עבור הרישום."
#: common/djangoapps/course_modes/views.py
msgid "Enrollment is closed"
@@ -346,6 +373,11 @@ msgid "Moderator"
msgstr "מנחה"
#: common/djangoapps/django_comment_common/models.py
+msgid "Group Moderator"
+msgstr ""
+
+#: common/djangoapps/django_comment_common/models.py
+#: lms/templates/instructor/instructor_dashboard_2/membership.html
msgid "Community TA"
msgstr "עוזר הוראה קהילתי"
@@ -384,6 +416,7 @@ msgid ""
"Usernames can only contain letters, numerals, underscore (_), numbers and "
"@/./+/-/_ characters."
msgstr ""
+"שמות משתמשים יכולים להכיל רק אותיות,קו תחתון (_) מספרים ותווים @/./+/-/_"
#: common/djangoapps/student/forms.py
msgid ""
@@ -628,12 +661,12 @@ msgstr "בית ספר יסודי"
#. Translators: 'None' refers to the student's level of education
#: common/djangoapps/student/models.py
msgid "No formal education"
-msgstr ""
+msgstr "אין השכלה רשמית"
#. Translators: 'Other' refers to the student's level of education
#: common/djangoapps/student/models.py
msgid "Other education"
-msgstr ""
+msgstr "השכלה מסוג אחר"
#: common/djangoapps/student/models.py
#, python-brace-format
@@ -724,35 +757,35 @@ msgstr "הקורס שאתה מחפש סגור להרשמה החל מ-{date}."
#: common/djangoapps/student/views.py
msgid "Photos are mismatched"
-msgstr ""
+msgstr "התמונות אינן תואמות"
#: common/djangoapps/student/views.py
msgid "Name missing from ID photo"
-msgstr ""
+msgstr "חסר שם בתמונה מזהה"
#: common/djangoapps/student/views.py
msgid "ID photo not provided"
-msgstr ""
+msgstr "לא סופקה תמונה מזהה"
#: common/djangoapps/student/views.py
msgid "ID is invalid"
-msgstr ""
+msgstr "מזהה אינו תקין"
#: common/djangoapps/student/views.py
msgid "Learner photo is blurry"
-msgstr ""
+msgstr "תמונת הלומד מטושטשת"
#: common/djangoapps/student/views.py
msgid "Name on ID does not match name on account"
-msgstr ""
+msgstr "השם בתעודה המזהה אינו תואם את השם בחשבון"
#: common/djangoapps/student/views.py
msgid "Learner photo not provided"
-msgstr ""
+msgstr "תמונת הלומד לא סופקה"
#: common/djangoapps/student/views.py
msgid "ID photo is blurry"
-msgstr ""
+msgstr "תמונה מזהה מטושטשת"
#: common/djangoapps/student/views.py
msgid "Course id not specified"
@@ -790,6 +823,10 @@ msgid ""
"an email, check your spam folders or contact "
"{platform} Support."
msgstr ""
+"בכדי להתחבר, את/ה צריכ/ה להפעיל את החשבון שלך.
',
@@ -210,7 +226,7 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
'data-string="Today is {date}"',
'data-timezone="None"'
]
- url = reverse(url_name, args=(self.course.id,))
+ url = reverse(url_name, args=(course.id,))
response = self.client.get(url, follow=True)
for html in html_elements:
self.assertContains(response, html)
@@ -222,10 +238,11 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
@override_waffle_flag(UNIFIED_COURSE_TAB_FLAG, active=True)
def test_todays_date_timezone(self, url_name):
with freeze_time('2015-01-02'):
- self.setup_course_and_user()
- self.client.login(username=self.user.username, password=TEST_PASSWORD)
- set_user_preference(self.user, "time_zone", "America/Los_Angeles")
- url = reverse(url_name, args=(self.course.id,))
+ course = self.create_course_run()
+ user = self.create_user()
+ self.client.login(username=user.username, password=TEST_PASSWORD)
+ set_user_preference(user, 'time_zone', 'America/Los_Angeles')
+ url = reverse(url_name, args=(course.id,))
response = self.client.get(url, follow=True)
html_elements = [
@@ -242,9 +259,10 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
## Tests Course Start Date
def test_course_start_date(self):
- self.setup_course_and_user()
- block = CourseStartDate(self.course, self.user)
- self.assertEqual(block.date, self.course.start)
+ course = self.create_course_run()
+ user = self.create_user()
+ block = CourseStartDate(course, user)
+ self.assertEqual(block.date, course.start)
@ddt.data(
'info',
@@ -253,9 +271,10 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
@override_waffle_flag(UNIFIED_COURSE_TAB_FLAG, active=True)
def test_start_date_render(self, url_name):
with freeze_time('2015-01-02'):
- self.setup_course_and_user()
- self.client.login(username=self.user.username, password=TEST_PASSWORD)
- url = reverse(url_name, args=(self.course.id,))
+ course = self.create_course_run()
+ user = self.create_user()
+ self.client.login(username=user.username, password=TEST_PASSWORD)
+ url = reverse(url_name, args=(course.id,))
response = self.client.get(url, follow=True)
html_elements = [
'data-string="in 1 day - {date}"',
@@ -271,10 +290,11 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
@override_waffle_flag(UNIFIED_COURSE_TAB_FLAG, active=True)
def test_start_date_render_time_zone(self, url_name):
with freeze_time('2015-01-02'):
- self.setup_course_and_user()
- self.client.login(username=self.user.username, password=TEST_PASSWORD)
- set_user_preference(self.user, "time_zone", "America/Los_Angeles")
- url = reverse(url_name, args=(self.course.id,))
+ course = self.create_course_run()
+ user = self.create_user()
+ self.client.login(username=user.username, password=TEST_PASSWORD)
+ set_user_preference(user, 'time_zone', 'America/Los_Angeles')
+ url = reverse(url_name, args=(course.id,))
response = self.client.get(url, follow=True)
html_elements = [
'data-string="in 1 day - {date}"',
@@ -286,16 +306,20 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
## Tests Course End Date Block
def test_course_end_date_for_certificate_eligible_mode(self):
- self.setup_course_and_user(days_till_start=-1)
- block = CourseEndDate(self.course, self.user)
+ course = self.create_course_run(days_till_start=-1)
+ user = self.create_user()
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.VERIFIED)
+ block = CourseEndDate(course, user)
self.assertEqual(
block.description,
'To earn a certificate, you must complete all requirements before this date.'
)
def test_course_end_date_for_non_certificate_eligible_mode(self):
- self.setup_course_and_user(days_till_start=-1, enrollment_mode=CourseMode.AUDIT)
- block = CourseEndDate(self.course, self.user)
+ course = self.create_course_run(days_till_start=-1)
+ user = self.create_user()
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.AUDIT)
+ block = CourseEndDate(course, user)
self.assertEqual(
block.description,
'After this date, course content will be archived.'
@@ -303,8 +327,10 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
self.assertEqual(block.title, 'Course End')
def test_course_end_date_after_course(self):
- self.setup_course_and_user(days_till_start=-2, days_till_end=-1)
- block = CourseEndDate(self.course, self.user)
+ course = self.create_course_run(days_till_start=-2, days_till_end=-1)
+ user = self.create_user()
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.VERIFIED)
+ block = CourseEndDate(course, user)
self.assertEqual(
block.description,
'This course is archived, which means you can review course content but it is no longer active.'
@@ -315,25 +341,38 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
"""Verify the block link redirects to ecommerce checkout if it's enabled."""
sku = 'TESTSKU'
configuration = CommerceConfiguration.objects.create(checkout_on_ecommerce_service=True)
- self.setup_course_and_user(sku=sku)
- block = VerifiedUpgradeDeadlineDate(self.course, self.user)
+ course = self.create_course_run()
+ user = self.create_user()
+ course_mode = CourseMode.objects.get(course_id=course.id, mode_slug=CourseMode.VERIFIED)
+ course_mode.sku = sku
+ course_mode.save()
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.VERIFIED)
+
+ block = VerifiedUpgradeDeadlineDate(course, user)
self.assertEqual(block.link, '{}?sku={}'.format(configuration.MULTIPLE_ITEMS_BASKET_PAGE_URL, sku))
## VerificationDeadlineDate
def test_no_verification_deadline(self):
- self.setup_course_and_user(days_till_start=-1, days_till_verification_deadline=None)
- block = VerificationDeadlineDate(self.course, self.user)
+ course = self.create_course_run(days_till_start=-1, days_till_verification_deadline=None)
+ user = self.create_user()
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.VERIFIED)
+ block = VerificationDeadlineDate(course, user)
self.assertFalse(block.is_enabled)
def test_no_verified_enrollment(self):
- self.setup_course_and_user(days_till_start=-1, enrollment_mode=CourseMode.AUDIT)
- block = VerificationDeadlineDate(self.course, self.user)
+ course = self.create_course_run(days_till_start=-1)
+ user = self.create_user()
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.AUDIT)
+ block = VerificationDeadlineDate(course, user)
self.assertFalse(block.is_enabled)
def test_verification_deadline_date_upcoming(self):
with freeze_time('2015-01-02'):
- self.setup_course_and_user(days_till_start=-1)
- block = VerificationDeadlineDate(self.course, self.user)
+ course = self.create_course_run(days_till_start=-1)
+ user = self.create_user()
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.VERIFIED)
+
+ block = VerificationDeadlineDate(course, user)
self.assertEqual(block.css_class, 'verification-deadline-upcoming')
self.assertEqual(block.title, 'Verification Deadline')
self.assertEqual(block.date, datetime.now(utc) + timedelta(days=14))
@@ -342,12 +381,15 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
'You must successfully complete verification before this date to qualify for a Verified Certificate.'
)
self.assertEqual(block.link_text, 'Verify My Identity')
- self.assertEqual(block.link, reverse('verify_student_verify_now', args=(self.course.id,)))
+ self.assertEqual(block.link, reverse('verify_student_verify_now', args=(course.id,)))
def test_verification_deadline_date_retry(self):
with freeze_time('2015-01-02'):
- self.setup_course_and_user(days_till_start=-1, verification_status='denied')
- block = VerificationDeadlineDate(self.course, self.user)
+ course = self.create_course_run(days_till_start=-1)
+ user = self.create_user(verification_status='denied')
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.VERIFIED)
+
+ block = VerificationDeadlineDate(course, user)
self.assertEqual(block.css_class, 'verification-deadline-retry')
self.assertEqual(block.title, 'Verification Deadline')
self.assertEqual(block.date, datetime.now(utc) + timedelta(days=14))
@@ -360,12 +402,11 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
def test_verification_deadline_date_denied(self):
with freeze_time('2015-01-02'):
- self.setup_course_and_user(
- days_till_start=-10,
- verification_status='denied',
- days_till_verification_deadline=-1,
- )
- block = VerificationDeadlineDate(self.course, self.user)
+ course = self.create_course_run(days_till_start=-10, days_till_verification_deadline=-1)
+ user = self.create_user(verification_status='denied')
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.VERIFIED)
+
+ block = VerificationDeadlineDate(course, user)
self.assertEqual(block.css_class, 'verification-deadline-passed')
self.assertEqual(block.title, 'Missed Verification Deadline')
self.assertEqual(block.date, datetime.now(utc) + timedelta(days=-1))
@@ -383,69 +424,76 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase):
@ddt.unpack
def test_render_date_string_past(self, delta, expected_date_string):
with freeze_time('2015-01-02'):
- self.setup_course_and_user(
- days_till_start=-10,
- verification_status='denied',
- days_till_verification_deadline=delta,
- )
- block = VerificationDeadlineDate(self.course, self.user)
+ course = self.create_course_run(days_till_start=-10, days_till_verification_deadline=delta)
+ user = self.create_user(verification_status='denied')
+ CourseEnrollmentFactory(course_id=course.id, user=user, mode=CourseMode.VERIFIED)
+
+ block = VerificationDeadlineDate(course, user)
self.assertEqual(block.relative_datestring, expected_date_string)
def create_self_paced_course_run(self, **kwargs):
defaults = {
- 'enroll_user': False,
'days_till_upgrade_deadline': 100,
}
defaults.update(kwargs)
- self.setup_course_and_user(**defaults)
- self.course.self_paced = True
- self.store.update_item(self.course, self.user.id)
- overview = CourseOverview.get_from_id(self.course.id)
+
+ course = self.create_course_run(**defaults)
+ course.self_paced = True
+ self.store.update_item(course, None)
+ overview = CourseOverview.get_from_id(course.id)
self.assertTrue(overview.self_paced)
- def test_date_with_self_paced(self):
- """ The date returned for self-paced course runs should be dependent on the learner's enrollment date. """
- global_config = DynamicUpgradeDeadlineConfiguration.objects.create(enabled=True)
+ return course
- # Enrollments made before the course start should use the course start date as the content availability date
- self.create_self_paced_course_run(days_till_start=3)
- CourseEnrollmentFactory.create(course_id=self.course.id, user=self.user, mode=CourseMode.AUDIT)
- block = VerifiedUpgradeDeadlineDate(self.course, self.user)
- overview = CourseOverview.get_from_id(self.course.id)
- expected = overview.start + timedelta(days=global_config.deadline_days)
+ def assert_upgrade_deadline(self, course, expected):
+ """ Asserts the VerifiedUpgradeDeadlineDate block's date matches the expected value. """
+ enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT)
+ block = VerifiedUpgradeDeadlineDate(course, enrollment.user)
self.assertEqual(block.date, expected)
- # Enrollments made after the course start should use the enrollment date as the content availability date
- self.create_self_paced_course_run(days_till_start=-1)
- enrollment = CourseEnrollmentFactory.create(course_id=self.course.id, user=self.user, mode=CourseMode.AUDIT)
- block = VerifiedUpgradeDeadlineDate(self.course, self.user)
+ def test_date_with_self_paced_with_enrollment_before_course_start(self):
+ """ Enrolling before a course begins should result in the upgrade deadline being set relative to the
+ course start date. """
+ global_config = DynamicUpgradeDeadlineConfiguration.objects.create(enabled=True)
+ course = self.create_self_paced_course_run(days_till_start=3)
+ overview = CourseOverview.get_from_id(course.id)
+ expected = overview.start + timedelta(days=global_config.deadline_days)
+ self.assert_upgrade_deadline(course, expected)
+
+ def test_date_with_self_paced_with_enrollment_after_course_start(self):
+ """ Enrolling after a course begins should result in the upgrade deadline being set relative to the
+ enrollment date. """
+ global_config = DynamicUpgradeDeadlineConfiguration.objects.create(enabled=True)
+ course = self.create_self_paced_course_run(days_till_start=-1)
+ enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT)
+ block = VerifiedUpgradeDeadlineDate(course, enrollment.user)
expected = enrollment.created + timedelta(days=global_config.deadline_days)
self.assertEqual(block.date, expected)
# Courses should be able to override the deadline
course_config = CourseDynamicUpgradeDeadlineConfiguration.objects.create(
- enabled=True, course_id=self.course.id, opt_out=False, deadline_days=3
+ enabled=True, course_id=course.id, opt_out=False, deadline_days=3
)
- block = VerifiedUpgradeDeadlineDate(self.course, self.user)
+ enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT)
+ block = VerifiedUpgradeDeadlineDate(course, enrollment.user)
expected = enrollment.created + timedelta(days=course_config.deadline_days)
self.assertEqual(block.date, expected)
- # Disabling the functionality should result in the verified mode's expiration date being returned.
- global_config.enabled = False
- global_config.save()
- block = VerifiedUpgradeDeadlineDate(self.course, self.user)
- expected = CourseMode.objects.get(course_id=self.course.id, mode_slug=CourseMode.VERIFIED).expiration_datetime
- self.assertEqual(block.date, expected)
+ def test_date_with_self_paced_without_dynamic_upgrade_deadline(self):
+ """ Disabling the dynamic upgrade deadline functionality should result in the verified mode's
+ expiration date being returned. """
+ DynamicUpgradeDeadlineConfiguration.objects.create(enabled=False)
+ course = self.create_self_paced_course_run()
+ expected = CourseMode.objects.get(course_id=course.id, mode_slug=CourseMode.VERIFIED).expiration_datetime
+ self.assert_upgrade_deadline(course, expected)
def test_date_with_self_paced_with_course_opt_out(self):
""" If the course run has opted out of the dynamic deadline, the course mode's deadline should be used. """
- self.create_self_paced_course_run(days_till_start=-1)
+ course = self.create_self_paced_course_run(days_till_start=-1)
DynamicUpgradeDeadlineConfiguration.objects.create(enabled=True)
- CourseEnrollmentFactory.create(course_id=self.course.id, user=self.user, mode=CourseMode.AUDIT)
+ CourseDynamicUpgradeDeadlineConfiguration.objects.create(enabled=True, course_id=course.id, opt_out=True)
+ enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT)
- # Opt the course out of the dynamic upgrade deadline
- CourseDynamicUpgradeDeadlineConfiguration.objects.create(enabled=True, course_id=self.course.id, opt_out=True)
-
- block = VerifiedUpgradeDeadlineDate(self.course, self.user)
- expected = CourseMode.objects.get(course_id=self.course.id, mode_slug=CourseMode.VERIFIED).expiration_datetime
+ block = VerifiedUpgradeDeadlineDate(course, enrollment.user)
+ expected = CourseMode.objects.get(course_id=course.id, mode_slug=CourseMode.VERIFIED).expiration_datetime
self.assertEqual(block.date, expected)
diff --git a/lms/djangoapps/courseware/tests/test_draft_modulestore.py b/lms/djangoapps/courseware/tests/test_draft_modulestore.py
index c2985e4057..dac9675b73 100644
--- a/lms/djangoapps/courseware/tests/test_draft_modulestore.py
+++ b/lms/djangoapps/courseware/tests/test_draft_modulestore.py
@@ -1,6 +1,6 @@
from django.test import TestCase
from nose.plugins.attrib import attr
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from xmodule.modulestore.django import modulestore
@@ -14,7 +14,7 @@ class TestDraftModuleStore(TestCase):
store = modulestore()
# fix was to allow get_items() to take the course_id parameter
- store.get_items(SlashSeparatedCourseKey('a', 'b', 'c'), qualifiers={'category': 'vertical'})
+ store.get_items(CourseKey.from_string('a/b/c'), qualifiers={'category': 'vertical'})
# test success is just getting through the above statement.
# The bug was that 'course_id' argument was
diff --git a/lms/djangoapps/courseware/tests/test_module_render.py b/lms/djangoapps/courseware/tests/test_module_render.py
index 24f39fd900..3c215bbff2 100644
--- a/lms/djangoapps/courseware/tests/test_module_render.py
+++ b/lms/djangoapps/courseware/tests/test_module_render.py
@@ -24,7 +24,6 @@ from milestones.tests.utils import MilestonesTestCaseMixin
from mock import MagicMock, Mock, patch
from nose.plugins.attrib import attr
from opaque_keys.edx.keys import CourseKey, UsageKey
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
from pyquery import PyQuery
from xblock.core import XBlock, XBlockAside
from xblock.field_data import FieldData
@@ -1650,14 +1649,14 @@ class TestAnonymousStudentId(SharedModuleStoreTestCase, LoginEnrollmentTestCase)
# This value is set by observation, so that later changes to the student
# id computation don't break old data
'e3b0b940318df9c14be59acb08e78af5',
- self._get_anonymous_id(SlashSeparatedCourseKey('MITx', '6.00x', '2012_Fall'), descriptor_class)
+ self._get_anonymous_id(CourseKey.from_string('MITx/6.00x/2012_Fall'), descriptor_class)
)
self.assertEquals(
# This value is set by observation, so that later changes to the student
# id computation don't break old data
'f82b5416c9f54b5ce33989511bb5ef2e',
- self._get_anonymous_id(SlashSeparatedCourseKey('MITx', '6.00x', '2013_Spring'), descriptor_class)
+ self._get_anonymous_id(CourseKey.from_string('MITx/6.00x/2013_Spring'), descriptor_class)
)
diff --git a/lms/djangoapps/courseware/tests/test_views.py b/lms/djangoapps/courseware/tests/test_views.py
index 4f10ce7677..845256f9b2 100644
--- a/lms/djangoapps/courseware/tests/test_views.py
+++ b/lms/djangoapps/courseware/tests/test_views.py
@@ -41,7 +41,8 @@ from lms.djangoapps.grades.config.waffle import ASSUME_ZERO_GRADE_IF_ABSENT
from milestones.tests.utils import MilestonesTestCaseMixin
from mock import MagicMock, PropertyMock, create_autospec, patch
from nose.plugins.attrib import attr
-from opaque_keys.edx.locations import Location, SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
+from opaque_keys.edx.locations import Location
from openedx.core.djangoapps.catalog.tests.factories import CourseFactory as CatalogCourseFactory
from openedx.core.djangoapps.catalog.tests.factories import CourseRunFactory, ProgramFactory
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
@@ -86,7 +87,7 @@ class TestJumpTo(ModuleStoreTestCase):
def setUp(self):
super(TestJumpTo, self).setUp()
# Use toy course from XML
- self.course_key = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ self.course_key = CourseKey.from_string('edX/toy/2012_Fall')
def test_jumpto_invalid_location(self):
location = self.course_key.make_usage_key(None, 'NoSuchPlace')
@@ -211,8 +212,8 @@ class IndexQueryTestCase(ModuleStoreTestCase):
NUM_PROBLEMS = 20
@ddt.data(
- (ModuleStoreEnum.Type.mongo, 10, 144),
- (ModuleStoreEnum.Type.split, 4, 144),
+ (ModuleStoreEnum.Type.mongo, 10, 146),
+ (ModuleStoreEnum.Type.split, 4, 146),
)
@ddt.unpack
def test_index_query_counts(self, store_type, expected_mongo_query_count, expected_mysql_query_count):
@@ -577,26 +578,6 @@ class ViewsTestCase(ModuleStoreTestCase):
response = self.client.get(request_url)
self.assertEqual(response.status_code, 404)
- @override_settings(PAID_COURSE_REGISTRATION_CURRENCY=["USD", "$"])
- def test_get_cosmetic_display_price(self):
- """
- Check that get_cosmetic_display_price() returns the correct price given its inputs.
- """
- registration_price = 99
- self.course.cosmetic_display_price = 10
- with patch('course_modes.models.CourseMode.min_course_price_for_currency', return_value=registration_price):
- # Since registration_price is set, it overrides the cosmetic_display_price and should be returned
- self.assertEqual(views.get_cosmetic_display_price(self.course), "$99")
-
- registration_price = 0
- with patch('course_modes.models.CourseMode.min_course_price_for_currency', return_value=registration_price):
- # Since registration_price is not set, cosmetic_display_price should be returned
- self.assertEqual(views.get_cosmetic_display_price(self.course), "$10")
-
- self.course.cosmetic_display_price = 0
- # Since both prices are not set, there is no price, thus "Free"
- self.assertEqual(views.get_cosmetic_display_price(self.course), "Free")
-
def test_jump_to_invalid(self):
# TODO add a test for invalid location
# TODO add a test for no data *
@@ -1207,7 +1188,7 @@ class StartDateTests(ModuleStoreTestCase):
)
@unittest.skip
def test_format_localized_in_xml_course(self):
- response = self.get_about_response(SlashSeparatedCourseKey('edX', 'toy', 'TT_2012_Fall'))
+ response = self.get_about_response(CourseKey.fron_string('edX/toy/TT_2012_Fall'))
# The start date is set in common/test/data/two_toys/policies/TT_2012_Fall/policy.json
self.assertContains(response, "2015-JULY-17")
@@ -1464,12 +1445,12 @@ class ProgressPageTests(ProgressPageBaseTests):
"""Test that query counts remain the same for self-paced and instructor-paced courses."""
SelfPacedConfiguration(enabled=self_paced_enabled).save()
self.setup_course(self_paced=self_paced)
- with self.assertNumQueries(40, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST), check_mongo_calls(1):
+ with self.assertNumQueries(42, table_blacklist=QUERY_COUNT_TABLE_BLACKLIST), check_mongo_calls(1):
self._get_progress_page()
@ddt.data(
- (False, 40, 26),
- (True, 33, 22)
+ (False, 42, 28),
+ (True, 35, 24)
)
@ddt.unpack
def test_progress_queries(self, enable_waffle, initial, subsequent):
diff --git a/lms/djangoapps/courseware/tests/tests.py b/lms/djangoapps/courseware/tests/tests.py
index cd964dab14..9489ba60f8 100644
--- a/lms/djangoapps/courseware/tests/tests.py
+++ b/lms/djangoapps/courseware/tests/tests.py
@@ -7,7 +7,7 @@ from unittest import TestCase
import mock
from django.core.urlresolvers import reverse
from nose.plugins.attrib import attr
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from courseware.tests.helpers import LoginEnrollmentTestCase
from lms.djangoapps.lms_xblock.field_data import LmsFieldData
@@ -151,7 +151,7 @@ class TestDraftModuleStore(ModuleStoreTestCase):
store = modulestore()
# fix was to allow get_items() to take the course_id parameter
- store.get_items(SlashSeparatedCourseKey('abc', 'def', 'ghi'), qualifiers={'category': 'vertical'})
+ store.get_items(CourseKey.from_string('abc/def/ghi'), qualifiers={'category': 'vertical'})
# test success is just getting through the above statement.
# The bug was that 'course_id' argument was
diff --git a/lms/djangoapps/courseware/testutils.py b/lms/djangoapps/courseware/testutils.py
index 1374e50a27..91ba8d813a 100644
--- a/lms/djangoapps/courseware/testutils.py
+++ b/lms/djangoapps/courseware/testutils.py
@@ -148,9 +148,9 @@ class RenderXBlockTestMixin(object):
return response
@ddt.data(
- ('vertical_block', ModuleStoreEnum.Type.mongo, 14),
+ ('vertical_block', ModuleStoreEnum.Type.mongo, 10),
('vertical_block', ModuleStoreEnum.Type.split, 6),
- ('html_block', ModuleStoreEnum.Type.mongo, 15),
+ ('html_block', ModuleStoreEnum.Type.mongo, 11),
('html_block', ModuleStoreEnum.Type.split, 6),
)
@ddt.unpack
diff --git a/lms/djangoapps/courseware/views/index.py b/lms/djangoapps/courseware/views/index.py
index c088ae3106..444a6c8531 100644
--- a/lms/djangoapps/courseware/views/index.py
+++ b/lms/djangoapps/courseware/views/index.py
@@ -22,6 +22,7 @@ from web_fragments.fragment import Fragment
from edxmako.shortcuts import render_to_response, render_to_string
from lms.djangoapps.courseware.exceptions import CourseAccessRedirect
+from lms.djangoapps.experiments.utils import get_experiment_user_metadata_context
from lms.djangoapps.gating.api import get_entrance_exam_score_ratio, get_entrance_exam_usage_key
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
from openedx.core.djangoapps.crawlers.models import CrawlersConfig
@@ -34,6 +35,7 @@ from openedx.features.course_experience.views.course_sock import CourseSockFragm
from openedx.features.enterprise_support.api import data_sharing_consent_required
from shoppingcart.models import CourseRegistrationCode
from student.views import is_course_blocked
+from student.models import CourseEnrollment
from util.views import ensure_valid_course_key
from xmodule.modulestore.django import modulestore
from xmodule.x_module import STUDENT_VIEW
@@ -52,8 +54,6 @@ from ..model_data import FieldDataCache
from ..module_render import get_module_for_descriptor, toc_for_course
from .views import (
CourseTabView,
- check_and_get_upgrade_link,
- get_cosmetic_verified_display_price
)
log = logging.getLogger("edx.courseware.views.index")
@@ -325,6 +325,7 @@ class CoursewareIndex(View):
"""
course_url_name = default_course_url_name(self.course.id)
course_url = reverse(course_url_name, kwargs={'course_id': unicode(self.course.id)})
+
courseware_context = {
'csrf': csrf(self.request)['csrf_token'],
'course': self.course,
@@ -344,11 +345,14 @@ class CoursewareIndex(View):
'section_title': None,
'sequence_title': None,
'disable_accordion': COURSE_OUTLINE_PAGE_FLAG.is_enabled(self.course.id),
- # TODO: (Experimental Code). See https://openedx.atlassian.net/wiki/display/RET/2.+In-course+Verification+Prompts
- 'upgrade_link': check_and_get_upgrade_link(request, self.effective_user, self.course.id),
- 'upgrade_price': get_cosmetic_verified_display_price(self.course),
- # ENDTODO
}
+ courseware_context.update(
+ get_experiment_user_metadata_context(
+ request,
+ self.course,
+ self.effective_user,
+ )
+ )
table_of_contents = toc_for_course(
self.effective_user,
self.request,
diff --git a/lms/djangoapps/courseware/views/views.py b/lms/djangoapps/courseware/views/views.py
index d48f50a088..691792de19 100644
--- a/lms/djangoapps/courseware/views/views.py
+++ b/lms/djangoapps/courseware/views/views.py
@@ -14,11 +14,12 @@ import waffle
from certificates import api as certs_api
from certificates.models import CertificateStatuses
from commerce.utils import EcommerceService
-from course_modes.models import CourseMode
+from course_modes.models import (CourseMode, get_course_prices)
from courseware.access import has_access, has_ccx_coach_role
from courseware.access_utils import check_course_open_for_learner
from courseware.courses import (
can_self_enroll_in_course,
+ course_open_for_self_enrollment,
get_course,
get_course_overview_with_access,
get_course_with_access,
@@ -61,6 +62,7 @@ from ipware.ip import get_ip
from lms.djangoapps.ccx.custom_exception import CCXLocatorValidationException
from lms.djangoapps.ccx.utils import prep_course_for_grading
from lms.djangoapps.courseware.exceptions import CourseAccessRedirect, Redirect
+from lms.djangoapps.experiments.utils import get_experiment_user_metadata_context
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
from lms.djangoapps.instructor.enrollment import uses_shib
from lms.djangoapps.instructor.views.api import require_global_staff
@@ -311,6 +313,7 @@ def course_info(request, course_id):
'request': request,
'masquerade_user': user,
'course_id': course_key.to_deprecated_string(),
+ 'url_to_enroll': CourseTabView.url_to_enroll(course_key),
'cache': None,
'course': course,
'staff_access': staff_access,
@@ -320,15 +323,15 @@ def course_info(request, course_id):
'show_enroll_banner': show_enroll_banner,
'user_is_enrolled': user_is_enrolled,
'dates_fragment': dates_fragment,
- 'url_to_enroll': CourseTabView.url_to_enroll(course_key),
'course_tools': course_tools,
-
- # TODO: (Experimental Code). See https://openedx.atlassian.net/wiki/display/RET/2.+In-course+Verification+Prompts
- 'upgrade_link': check_and_get_upgrade_link(request, user, course.id),
- 'upgrade_price': get_cosmetic_verified_display_price(course),
- 'course_tools': course_tools,
- # ENDTODO
}
+ context.update(
+ get_experiment_user_metadata_context(
+ request,
+ course,
+ user,
+ )
+ )
# Get the URL of the user's last position in order to display the 'where you were last' message
context['resume_course_url'] = None
@@ -348,20 +351,6 @@ def course_info(request, course_id):
UPGRADE_COOKIE_NAME = 'show_upgrade_notification'
-# TODO: (Experimental Code). See https://openedx.atlassian.net/wiki/display/RET/2.+In-course+Verification+Prompts
-def check_and_get_upgrade_link(request, user, course_id):
- upgrade_link = None
-
- if request.user.is_authenticated():
- upgrade_data = VerifiedUpgradeDeadlineDate(None, user, course_id=course_id)
- if upgrade_data.is_enabled:
- upgrade_link = upgrade_data.link
- request.need_to_set_upgrade_cookie = True
-
- return upgrade_link
-# ENDTODO
-
-
class StaticCourseTabView(EdxFragmentView):
"""
View that displays a static course tab with a given name.
@@ -461,15 +450,22 @@ class CourseTabView(EdxFragmentView):
)
)
elif not is_enrolled and not is_staff:
- PageLevelMessages.register_warning_message(
- request,
- Text(_('You must be enrolled in the course to see course content. {enroll_link}.')).format(
- enroll_link=HTML('{enroll_link_label}').format(
- url_to_enroll=CourseTabView.url_to_enroll(course_key),
- enroll_link_label=_("Enroll now"),
+ # Only show enroll button if course is open for enrollment.
+ if course_open_for_self_enrollment(course_key):
+ enroll_message = _('You must be enrolled in the course to see course content. \
+ {enroll_link_start}Enroll now{enroll_link_end}.')
+ PageLevelMessages.register_warning_message(
+ request,
+ Text(enroll_message).format(
+ enroll_link_start=HTML('')
)
)
- )
+ else:
+ PageLevelMessages.register_warning_message(
+ request,
+ Text(_('You must be enrolled in the course to see course content.'))
+ )
@staticmethod
def handle_exceptions(request, course, exception):
@@ -521,7 +517,8 @@ class CourseTabView(EdxFragmentView):
# Disable student view button if user is staff and
# course is not yet visible to students.
supports_preview_menu = False
- return {
+
+ context = {
'course': course,
'tab': tab,
'active_page': tab.get('type', None),
@@ -530,11 +527,15 @@ class CourseTabView(EdxFragmentView):
'supports_preview_menu': supports_preview_menu,
'uses_pattern_library': True,
'disable_courseware_js': True,
- # TODO: (Experimental Code). See https://openedx.atlassian.net/wiki/display/RET/2.+In-course+Verification+Prompts
- 'upgrade_link': check_and_get_upgrade_link(request, request.user, course.id),
- 'upgrade_price': get_cosmetic_verified_display_price(course),
- # ENDTODO
}
+ context.update(
+ get_experiment_user_metadata_context(
+ request,
+ course,
+ request.user,
+ )
+ )
+ return context
def render_to_fragment(self, request, course=None, page_context=None, **kwargs):
"""
@@ -585,59 +586,6 @@ def registered_for_course(course, user):
return False
-def get_cosmetic_verified_display_price(course):
- """
- Returns the minimum verified cert course price as a string preceded by correct currency, or 'Free'.
- """
- return get_course_prices(course, verified_only=True)[1]
-
-
-def get_cosmetic_display_price(course):
- """
- Returns the course price as a string preceded by correct currency, or 'Free'.
- """
- return get_course_prices(course)[1]
-
-
-def get_course_prices(course, verified_only=False):
- """
- Return registration_price and cosmetic_display_prices.
- registration_price is the minimum price for the course across all course modes.
- cosmetic_display_prices is the course price as a string preceded by correct currency, or 'Free'.
- """
- # Find the
- if verified_only:
- registration_price = CourseMode.min_course_price_for_verified_for_currency(
- course.id,
- settings.PAID_COURSE_REGISTRATION_CURRENCY[0]
- )
- else:
- registration_price = CourseMode.min_course_price_for_currency(
- course.id,
- settings.PAID_COURSE_REGISTRATION_CURRENCY[0]
- )
-
- currency_symbol = settings.PAID_COURSE_REGISTRATION_CURRENCY[1]
-
- if registration_price > 0:
- price = registration_price
- # Handle course overview objects which have no cosmetic_display_price
- elif hasattr(course, 'cosmetic_display_price'):
- price = course.cosmetic_display_price
- else:
- price = None
-
- if price:
- # Translators: This will look like '$50', where {currency_symbol} is a symbol such as '$' and {price} is a
- # numerical amount in that currency. Adjust this display as needed for your language.
- cosmetic_display_price = _("{currency_symbol}{price}").format(currency_symbol=currency_symbol, price=price)
- else:
- # Translators: This refers to the cost of the course. In this case, the course costs nothing so it is free.
- cosmetic_display_price = _('Free')
-
- return registration_price, cosmetic_display_price
-
-
class EnrollStaffView(View):
"""
Displays view for registering in the course to a global staff user.
@@ -927,7 +875,6 @@ def _progress(request, course_key, student_id):
grade_summary = course_grade.summary
studio_url = get_studio_url(course, 'settings/grading')
-
# checking certificate generation configuration
enrollment_mode, is_active = CourseEnrollment.enrollment_mode_for_user(student, course_key)
@@ -943,11 +890,14 @@ def _progress(request, course_key, student_id):
'passed': is_course_passed(course, grade_summary),
'credit_course_requirements': _credit_course_requirements(course_key, student),
'certificate_data': _get_cert_data(student, course, course_key, is_active, enrollment_mode),
- # TODO: (Experimental Code). See https://openedx.atlassian.net/wiki/display/RET/2.+In-course+Verification+Prompts
- 'upgrade_link': check_and_get_upgrade_link(request, student, course.id),
- 'upgrade_price': get_cosmetic_verified_display_price(course),
- # ENDTODO
}
+ context.update(
+ get_experiment_user_metadata_context(
+ request,
+ course,
+ student,
+ )
+ )
with outer_atomic():
response = render_to_response('courseware/progress.html', context)
diff --git a/lms/djangoapps/dashboard/management/commands/tests/test_git_add_course.py b/lms/djangoapps/dashboard/management/commands/tests/test_git_add_course.py
index f45e1d94e7..9bb05a4693 100644
--- a/lms/djangoapps/dashboard/management/commands/tests/test_git_add_course.py
+++ b/lms/djangoapps/dashboard/management/commands/tests/test_git_add_course.py
@@ -14,7 +14,7 @@ from django.core.management import call_command
from django.core.management.base import CommandError
from django.test.utils import override_settings
from nose.plugins.attrib import attr
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
import dashboard.git_import as git_import
from dashboard.git_import import (
@@ -57,7 +57,7 @@ class TestGitAddCourse(SharedModuleStoreTestCase):
TEST_REPO = 'https://github.com/mitocw/edx4edx_lite.git'
TEST_COURSE = 'MITx/edx4edx/edx4edx'
TEST_BRANCH = 'testing_do_not_delete'
- TEST_BRANCH_COURSE = SlashSeparatedCourseKey('MITx', 'edx4edx_branch', 'edx4edx')
+ TEST_BRANCH_COURSE = CourseKey.from_string('MITx/edx4edx_branch/edx4edx')
ENABLED_CACHES = ['default', 'mongo_metadata_inheritance', 'loc_cache']
@@ -183,7 +183,7 @@ class TestGitAddCourse(SharedModuleStoreTestCase):
repo_dir / 'edx4edx_lite',
'master')
self.assertIsNone(def_ms.get_course(self.TEST_BRANCH_COURSE))
- self.assertIsNotNone(def_ms.get_course(SlashSeparatedCourseKey.from_deprecated_string(self.TEST_COURSE)))
+ self.assertIsNotNone(def_ms.get_course(CourseKey.from_string(self.TEST_COURSE)))
def test_branch_exceptions(self):
"""
diff --git a/lms/djangoapps/dashboard/tests/test_sysadmin.py b/lms/djangoapps/dashboard/tests/test_sysadmin.py
index 0d3322edfe..5ae1eeba19 100644
--- a/lms/djangoapps/dashboard/tests/test_sysadmin.py
+++ b/lms/djangoapps/dashboard/tests/test_sysadmin.py
@@ -16,7 +16,7 @@ from django.test.client import Client
from django.test.utils import override_settings
from django.utils.timezone import utc as UTC
from nose.plugins.attrib import attr
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from dashboard.git_import import GitImportErrorNoDir
from dashboard.models import CourseImportLog
@@ -46,7 +46,7 @@ class SysadminBaseTestCase(SharedModuleStoreTestCase):
TEST_REPO = 'https://github.com/mitocw/edx4edx_lite.git'
TEST_BRANCH = 'testing_do_not_delete'
- TEST_BRANCH_COURSE = SlashSeparatedCourseKey('MITx', 'edx4edx_branch', 'edx4edx')
+ TEST_BRANCH_COURSE = CourseKey.from_string('MITx/edx4edx_branch/edx4edx')
def setUp(self):
"""Setup test case by adding primary user."""
@@ -78,7 +78,7 @@ class SysadminBaseTestCase(SharedModuleStoreTestCase):
course = def_ms.courses.get(course_path, None)
except AttributeError:
# Using mongo store
- course = def_ms.get_course(SlashSeparatedCourseKey('MITx', 'edx4edx', 'edx4edx'))
+ course = def_ms.get_course(CourseKey.from_string('MITx/edx4edx/edx4edx'))
# Delete git loaded course
response = self.client.post(
@@ -168,11 +168,11 @@ class TestSysAdminMongoCourseImport(SysadminBaseTestCase):
self.assertNotEqual('xml', def_ms.get_modulestore_type(None))
self._add_edx4edx()
- course = def_ms.get_course(SlashSeparatedCourseKey('MITx', 'edx4edx', 'edx4edx'))
+ course = def_ms.get_course(CourseKey.from_string('MITx/edx4edx/edx4edx'))
self.assertIsNotNone(course)
self._rm_edx4edx()
- course = def_ms.get_course(SlashSeparatedCourseKey('MITx', 'edx4edx', 'edx4edx'))
+ course = def_ms.get_course(CourseKey.from_string('MITx/edx4edx/edx4edx'))
self.assertIsNone(course)
def test_course_info(self):
@@ -301,7 +301,7 @@ class TestSysAdminMongoCourseImport(SysadminBaseTestCase):
for _ in xrange(15):
CourseImportLog(
- course_id=SlashSeparatedCourseKey("test", "test", "test"),
+ course_id=CourseKey.from_string("test/test/test"),
location="location",
import_log="import_log",
git_log="git_log",
@@ -347,7 +347,7 @@ class TestSysAdminMongoCourseImport(SysadminBaseTestCase):
# Add user as staff in course team
def_ms = modulestore()
- course = def_ms.get_course(SlashSeparatedCourseKey('MITx', 'edx4edx', 'edx4edx'))
+ course = def_ms.get_course(CourseKey.from_string('MITx/edx4edx/edx4edx'))
CourseStaffRole(course.id).add_users(self.user)
self.assertTrue(CourseStaffRole(course.id).has_user(self.user))
diff --git a/lms/djangoapps/discussion/views.py b/lms/djangoapps/discussion/views.py
index 4a0f126e18..44fc1ef0d1 100644
--- a/lms/djangoapps/discussion/views.py
+++ b/lms/djangoapps/discussion/views.py
@@ -24,6 +24,7 @@ from rest_framework import status
from web_fragments.fragment import Fragment
import django_comment_client.utils as utils
+from lms.djangoapps.experiments.utils import get_experiment_user_metadata_context
import lms.lib.comment_client as cc
from courseware.access import has_access
from courseware.courses import get_course_with_access
@@ -44,7 +45,6 @@ from django_comment_client.utils import (
strip_none
)
from django_comment_common.utils import ThreadContext, get_course_discussion_settings, set_course_discussion_settings
-from lms.djangoapps.courseware.views.views import check_and_get_upgrade_link, get_cosmetic_verified_display_price
from openedx.core.djangoapps.plugin_api.views import EdxFragmentView
from student.models import CourseEnrollment
from util.json_request import JsonResponse, expect_json
@@ -481,13 +481,16 @@ def _create_discussion_board_context(request, base_context, thread=None):
'category_map': course_settings["category_map"],
'course_settings': course_settings,
'is_commentable_divided': is_commentable_divided(course_key, discussion_id, course_discussion_settings),
- # TODO: (Experimental Code). See https://openedx.atlassian.net/wiki/display/RET/2.+In-course+Verification+Prompts
- 'upgrade_link': check_and_get_upgrade_link(request, user, course.id),
- 'upgrade_price': get_cosmetic_verified_display_price(course),
- # ENDTODO
# If the default topic id is None the front-end code will look for a topic that contains "General"
'discussion_default_topic_id': _get_discussion_default_topic_id(course),
})
+ context.update(
+ get_experiment_user_metadata_context(
+ request,
+ course,
+ user,
+ )
+ )
return context
diff --git a/lms/djangoapps/email_marketing/migrations/0007_auto_20170809_0653.py b/lms/djangoapps/email_marketing/migrations/0007_auto_20170809_0653.py
new file mode 100644
index 0000000000..e99d25e163
--- /dev/null
+++ b/lms/djangoapps/email_marketing/migrations/0007_auto_20170809_0653.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('email_marketing', '0006_auto_20170711_0615'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='emailmarketingconfiguration',
+ name='sailthru_welcome_template',
+ field=models.CharField(help_text='Sailthru template to use on welcome send.', max_length=20, blank=True),
+ ),
+ migrations.AlterField(
+ model_name='emailmarketingconfiguration',
+ name='sailthru_activation_template',
+ field=models.CharField(help_text='DEPRECATED: use sailthru_welcome_template instead.', max_length=20, blank=True),
+ ),
+ migrations.AlterField(
+ model_name='emailmarketingconfiguration',
+ name='welcome_email_send_delay',
+ field=models.IntegerField(default=600, help_text='Number of seconds to delay the sending of User Welcome email after user has been created'),
+ ),
+ ]
diff --git a/lms/djangoapps/email_marketing/migrations/0008_auto_20170809_0539.py b/lms/djangoapps/email_marketing/migrations/0008_auto_20170809_0539.py
new file mode 100644
index 0000000000..c4c580b867
--- /dev/null
+++ b/lms/djangoapps/email_marketing/migrations/0008_auto_20170809_0539.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+def migrate_data_forwards(apps, schema_editor):
+ EmailMarketingConfiguration = apps.get_model('email_marketing', 'EmailMarketingConfiguration')
+ EmailMarketingConfiguration.objects.all().update(
+ sailthru_welcome_template=models.F('sailthru_activation_template')
+ )
+
+
+def migrate_data_backwards(apps, schema_editor):
+ # Just copying old field's value to new one in forward migration, so nothing needed here.
+ pass
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('email_marketing', '0007_auto_20170809_0653'),
+ ]
+
+ operations = [
+ migrations.RunPython(migrate_data_forwards, migrate_data_backwards)
+ ]
diff --git a/lms/djangoapps/email_marketing/models.py b/lms/djangoapps/email_marketing/models.py
index 8aa182047d..224fcfebbd 100644
--- a/lms/djangoapps/email_marketing/models.py
+++ b/lms/djangoapps/email_marketing/models.py
@@ -51,7 +51,15 @@ class EmailMarketingConfiguration(ConfigurationModel):
max_length=20,
blank=True,
help_text=_(
- "Sailthru template to use on activation send. "
+ "DEPRECATED: use sailthru_welcome_template instead."
+ )
+ )
+
+ sailthru_welcome_template = models.fields.CharField(
+ max_length=20,
+ blank=True,
+ help_text=_(
+ "Sailthru template to use on welcome send."
)
)
@@ -132,7 +140,7 @@ class EmailMarketingConfiguration(ConfigurationModel):
welcome_email_send_delay = models.fields.IntegerField(
default=600,
help_text=_(
- "Number of seconds to delay the sending of User Welcome email after user has been activated"
+ "Number of seconds to delay the sending of User Welcome email after user has been created"
)
)
@@ -145,5 +153,5 @@ class EmailMarketingConfiguration(ConfigurationModel):
)
def __unicode__(self):
- return u"Email marketing configuration: New user list %s, Activation template: %s" % \
- (self.sailthru_new_user_list, self.sailthru_activation_template)
+ return u"Email marketing configuration: New user list %s, Welcome template: %s" % \
+ (self.sailthru_new_user_list, self.sailthru_welcome_template)
diff --git a/lms/djangoapps/email_marketing/signals.py b/lms/djangoapps/email_marketing/signals.py
index 80a29f0bfe..745de42748 100644
--- a/lms/djangoapps/email_marketing/signals.py
+++ b/lms/djangoapps/email_marketing/signals.py
@@ -149,9 +149,9 @@ def email_marketing_user_field_changed(sender, user=None, table=None, setting=No
if not email_config.enabled:
return
- # perform update asynchronously, flag if activation
+ # perform update asynchronously
update_user.delay(_create_sailthru_user_vars(user, user.profile), user.email, site=_get_current_site(),
- new_user=False, activation=(setting == 'is_active') and new_value is True)
+ new_user=False)
elif setting == 'email':
# email update is special case
diff --git a/lms/djangoapps/email_marketing/tasks.py b/lms/djangoapps/email_marketing/tasks.py
index a6e952e515..a0d4b254b4 100644
--- a/lms/djangoapps/email_marketing/tasks.py
+++ b/lms/djangoapps/email_marketing/tasks.py
@@ -59,14 +59,13 @@ def get_email_cookies_via_sailthru(self, user_email, post_parms):
# pylint: disable=not-callable
@task(bind=True, default_retry_delay=3600, max_retries=24)
-def update_user(self, sailthru_vars, email, site=None, new_user=False, activation=False):
+def update_user(self, sailthru_vars, email, site=None, new_user=False):
"""
Adds/updates Sailthru profile information for a user.
Args:
sailthru_vars(dict): User profile information to pass as 'vars' to Sailthru
email(str): User email address
new_user(boolean): True if new registration
- activation(boolean): True if activation request
Returns:
None
"""
@@ -95,15 +94,15 @@ def update_user(self, sailthru_vars, email, site=None, new_user=False, activatio
max_retries=email_config.sailthru_max_retries)
return
- # if activating user, send welcome email
- if activation and email_config.sailthru_activation_template:
+ # if new user, send welcome email
+ if new_user and email_config.sailthru_welcome_template:
scheduled_datetime = datetime.utcnow() + timedelta(seconds=email_config.welcome_email_send_delay)
try:
sailthru_response = sailthru_client.api_post(
"send",
{
"email": email,
- "template": email_config.sailthru_activation_template,
+ "template": email_config.sailthru_welcome_template,
"schedule_time": scheduled_datetime.strftime('%Y-%m-%dT%H:%M:%SZ')
}
)
diff --git a/lms/djangoapps/email_marketing/tests/test_signals.py b/lms/djangoapps/email_marketing/tests/test_signals.py
index 2bf28791a6..62b44ccabc 100644
--- a/lms/djangoapps/email_marketing/tests/test_signals.py
+++ b/lms/djangoapps/email_marketing/tests/test_signals.py
@@ -41,7 +41,7 @@ TEST_EMAIL = "test@edx.org"
def update_email_marketing_config(enabled=True, key='badkey', secret='badsecret', new_user_list='new list',
- template='Activation', enroll_cost=100, lms_url_override='http://testserver'):
+ template='Welcome', enroll_cost=100, lms_url_override='http://testserver'):
"""
Enable / Disable Sailthru integration
"""
@@ -50,7 +50,7 @@ def update_email_marketing_config(enabled=True, key='badkey', secret='badsecret'
sailthru_key=key,
sailthru_secret=secret,
sailthru_new_user_list=new_user_list,
- sailthru_activation_template=template,
+ sailthru_welcome_template=template,
sailthru_enroll_template='enroll_template',
sailthru_lms_url_override=lms_url_override,
sailthru_get_tags_from_sailthru=False,
@@ -175,7 +175,7 @@ class EmailMarketingTests(TestCase):
@patch('email_marketing.tasks.SailthruClient.api_get')
def test_add_user(self, mock_sailthru_get, mock_sailthru_post, mock_log_error):
"""
- test async method in tasks that actually updates Sailthru
+ test async method in tasks that actually updates Sailthru and send Welcome template.
"""
site_dict = {'id': self.site.id, 'domain': self.site.domain, 'name': self.site.name}
mock_sailthru_post.return_value = SailthruResponse(JsonResponse({'ok': True}))
@@ -183,15 +183,13 @@ class EmailMarketingTests(TestCase):
update_user.delay(
{'gender': 'm', 'username': 'test', 'activated': 1}, TEST_EMAIL, site_dict, new_user=True
)
+ expected_schedule = datetime.datetime.utcnow() + datetime.timedelta(seconds=600)
self.assertFalse(mock_log_error.called)
- self.assertEquals(mock_sailthru_post.call_args[0][0], "user")
+ self.assertEquals(mock_sailthru_post.call_args[0][0], "send")
userparms = mock_sailthru_post.call_args[0][1]
- self.assertEquals(userparms['key'], "email")
- self.assertEquals(userparms['id'], TEST_EMAIL)
- self.assertEquals(userparms['vars']['gender'], "m")
- self.assertEquals(userparms['vars']['username'], "test")
- self.assertEquals(userparms['vars']['activated'], 1)
- self.assertEquals(userparms['lists']['new list'], 1)
+ self.assertEquals(userparms['email'], TEST_EMAIL)
+ self.assertEquals(userparms['template'], "Welcome")
+ self.assertEquals(userparms['schedule_time'], expected_schedule.strftime('%Y-%m-%dT%H:%M:%SZ'))
@patch('email_marketing.tasks.SailthruClient.api_post')
@patch('email_marketing.tasks.SailthruClient.api_get')
@@ -199,6 +197,8 @@ class EmailMarketingTests(TestCase):
"""
test non existing domain name updates Sailthru user lists with default list
"""
+ # Set template to empty string to disable 2nd post call to Sailthru
+ update_email_marketing_config(template='')
existing_site = Site.objects.create(domain='testing.com', name='testing.com')
site_dict = {'id': existing_site.id, 'domain': existing_site.domain, 'name': existing_site.name}
mock_sailthru_post.return_value = SailthruResponse(JsonResponse({'ok': True}))
@@ -216,18 +216,16 @@ class EmailMarketingTests(TestCase):
@patch('email_marketing.tasks.SailthruClient.api_get')
def test_user_activation(self, mock_sailthru_get, mock_sailthru_post):
"""
- test send of activation template
+ Test that welcome template not sent if not new user.
"""
mock_sailthru_post.return_value = SailthruResponse(JsonResponse({'ok': True}))
mock_sailthru_get.return_value = SailthruResponse(JsonResponse({'lists': [{'name': 'new list'}], 'ok': True}))
- expected_schedule = datetime.datetime.utcnow() + datetime.timedelta(seconds=600)
- update_user.delay({}, self.user.email, new_user=True, activation=True)
+ update_user.delay({}, self.user.email, new_user=False)
# look for call args for 2nd call
- self.assertEquals(mock_sailthru_post.call_args[0][0], "send")
+ self.assertEquals(mock_sailthru_post.call_args[0][0], "user")
userparms = mock_sailthru_post.call_args[0][1]
- self.assertEquals(userparms['email'], TEST_EMAIL)
- self.assertEquals(userparms['template'], "Activation")
- self.assertEquals(userparms['schedule_time'], expected_schedule.strftime('%Y-%m-%dT%H:%M:%SZ'))
+ self.assertIsNone(userparms.get('email'))
+ self.assertIsNone(userparms.get('template'))
@patch('email_marketing.tasks.log.error')
@patch('email_marketing.tasks.SailthruClient.api_post')
@@ -248,14 +246,14 @@ class EmailMarketingTests(TestCase):
# force Sailthru API exception on 2nd call
mock_log_error.reset_mock()
mock_sailthru.side_effect = [SailthruResponse(JsonResponse({'ok': True})), SailthruClientError]
- update_user.delay({}, self.user.email, activation=True)
+ update_user.delay({}, self.user.email, new_user=True)
self.assertTrue(mock_log_error.called)
# force Sailthru API error return on 2nd call
mock_log_error.reset_mock()
mock_sailthru.side_effect = [SailthruResponse(JsonResponse({'ok': True})),
SailthruResponse(JsonResponse({'error': 100, 'errormsg': 'Got an error'}))]
- update_user.delay({}, self.user.email, activation=True)
+ update_user.delay({}, self.user.email, new_user=True)
self.assertTrue(mock_log_error.called)
@patch('email_marketing.tasks.update_user.retry')
diff --git a/lms/djangoapps/experiments/utils.py b/lms/djangoapps/experiments/utils.py
new file mode 100644
index 0000000000..cbd45b238d
--- /dev/null
+++ b/lms/djangoapps/experiments/utils.py
@@ -0,0 +1,50 @@
+from student.models import CourseEnrollment
+from course_modes.models import (
+ get_cosmetic_verified_display_price
+)
+from courseware.date_summary import (
+ VerifiedUpgradeDeadlineDate
+)
+
+
+def check_and_get_upgrade_link(request, user, course_id):
+ """
+ For an authenticated user, return a link to allow them to upgrade
+ in the specified course.
+ """
+ if request.user.is_authenticated():
+ upgrade_data = VerifiedUpgradeDeadlineDate(None, user, course_id=course_id)
+ if upgrade_data.is_enabled:
+ request.need_to_set_upgrade_cookie = True
+ return upgrade_data
+
+ return None
+
+
+def get_experiment_user_metadata_context(request, course, user):
+ """
+ Return a context dictionary with the keys used by the user_metadata.html.
+ """
+ enrollment_mode = None
+ enrollment_time = None
+ try:
+ enrollment = CourseEnrollment.objects.get(user_id=user.id, course_id=course.id)
+ if enrollment.is_active:
+ enrollment_mode = enrollment.mode
+ enrollment_time = enrollment.created
+ except CourseEnrollment.DoesNotExist:
+ pass # Not enrolled, used the default None values
+
+ upgrade_data = check_and_get_upgrade_link(request, user, course.id)
+
+ return {
+ 'upgrade_link': upgrade_data and upgrade_data.link,
+ 'upgrade_price': get_cosmetic_verified_display_price(course),
+ 'enrollment_mode': enrollment_mode,
+ 'enrollment_time': enrollment_time,
+ 'pacing_type': 'self_paced' if course.self_paced else 'instructor_paced',
+ 'upgrade_deadline': upgrade_data and upgrade_data.date,
+ 'course_key': course.id,
+ 'course_start': course.start,
+ 'course_end': course.end,
+ }
diff --git a/lms/djangoapps/grades/config/waffle.py b/lms/djangoapps/grades/config/waffle.py
index 6453a75e97..5029ff3c88 100644
--- a/lms/djangoapps/grades/config/waffle.py
+++ b/lms/djangoapps/grades/config/waffle.py
@@ -11,6 +11,7 @@ WAFFLE_NAMESPACE = u'grades'
WRITE_ONLY_IF_ENGAGED = u'write_only_if_engaged'
ASSUME_ZERO_GRADE_IF_ABSENT = u'assume_zero_grade_if_absent'
ESTIMATE_FIRST_ATTEMPTED = u'estimate_first_attempted'
+DISABLE_REGRADE_ON_POLICY_CHANGE = u'disable_regrade_on_policy_change'
# Course Flags
REJECTED_EXAM_OVERRIDES_GRADE = u'rejected_exam_overrides_grade'
diff --git a/lms/djangoapps/grades/new/course_grade_factory.py b/lms/djangoapps/grades/new/course_grade_factory.py
index 4ffe091b79..68ea2bd3d7 100644
--- a/lms/djangoapps/grades/new/course_grade_factory.py
+++ b/lms/djangoapps/grades/new/course_grade_factory.py
@@ -154,7 +154,7 @@ class CourseGradeFactory(object):
"""
Returns a ZeroCourseGrade object for the given user and course.
"""
- log.info(u'Grades: CreateZero, %s, User: %s', unicode(course_data), user.id)
+ log.debug(u'Grades: CreateZero, %s, User: %s', unicode(course_data), user.id)
return ZeroCourseGrade(user, course_data)
@staticmethod
diff --git a/lms/djangoapps/grades/new/subsection_grade.py b/lms/djangoapps/grades/new/subsection_grade.py
index ff767bf5f7..13fa42149f 100644
--- a/lms/djangoapps/grades/new/subsection_grade.py
+++ b/lms/djangoapps/grades/new/subsection_grade.py
@@ -33,9 +33,6 @@ class SubsectionGradeBase(object):
self.course_version = getattr(subsection, 'course_version', None)
self.subtree_edited_timestamp = getattr(subsection, 'subtree_edited_on', None)
- self.graded_total = None # aggregated grade for all graded problems
- self.all_total = None # aggregated grade for all problems, regardless of whether they are graded
-
self.override = None
@property
@@ -65,10 +62,20 @@ class ZeroSubsectionGrade(SubsectionGradeBase):
def __init__(self, subsection, course_data):
super(ZeroSubsectionGrade, self).__init__(subsection)
- self.graded_total = AggregatedScore(tw_earned=0, tw_possible=None, graded=False, first_attempted=None)
- self.all_total = AggregatedScore(tw_earned=0, tw_possible=None, graded=self.graded, first_attempted=None)
self.course_data = course_data
+ @property
+ def all_total(self):
+ return self._aggregate_scores[0]
+
+ @property
+ def graded_total(self):
+ return self._aggregate_scores[1]
+
+ @lazy
+ def _aggregate_scores(self):
+ return graders.aggregate_scores(self.problem_scores.values())
+
@lazy
def problem_scores(self):
"""
diff --git a/lms/djangoapps/grades/signals/handlers.py b/lms/djangoapps/grades/signals/handlers.py
index 59874b6b00..84bec121f3 100644
--- a/lms/djangoapps/grades/signals/handlers.py
+++ b/lms/djangoapps/grades/signals/handlers.py
@@ -233,12 +233,6 @@ def enqueue_subsection_update(sender, **kwargs): # pylint: disable=unused-argum
),
countdown=RECALCULATE_GRADE_DELAY,
)
- log.info(
- u'Grades: Request async calculation of subsection grades with args: {}. Task [{}]'.format(
- ', '.join('{}:{}'.format(arg, kwargs[arg]) for arg in sorted(kwargs)),
- getattr(result, 'id', 'N/A'),
- )
- )
@receiver(SUBSECTION_SCORE_CHANGED)
diff --git a/lms/djangoapps/grades/tasks.py b/lms/djangoapps/grades/tasks.py
index b107a847cb..073065068a 100644
--- a/lms/djangoapps/grades/tasks.py
+++ b/lms/djangoapps/grades/tasks.py
@@ -26,7 +26,7 @@ from track.event_transaction_utils import set_event_transaction_id, set_event_tr
from util.date_utils import from_timestamp
from xmodule.modulestore.django import modulestore
-from .config.waffle import ESTIMATE_FIRST_ATTEMPTED, waffle
+from .config.waffle import ESTIMATE_FIRST_ATTEMPTED, DISABLE_REGRADE_ON_POLICY_CHANGE, waffle
from .constants import ScoreDatabaseTableEnum
from .exceptions import DatabaseNotReadyError
from .new.course_grade_factory import CourseGradeFactory
@@ -59,14 +59,19 @@ def compute_all_grades_for_course(**kwargs):
Kicks off a series of compute_grades_for_course_v2 tasks
to cover all of the students in the course.
"""
- course_key = CourseKey.from_string(kwargs.pop('course_key'))
- for course_key_string, offset, batch_size in _course_task_args(course_key=course_key, **kwargs):
- kwargs.update({
- 'course_key': course_key_string,
- 'offset': offset,
- 'batch_size': batch_size,
- })
- compute_grades_for_course_v2.apply_async(kwargs=kwargs, routing_key=settings.POLICY_CHANGE_GRADES_ROUTING_KEY)
+ if waffle().is_enabled(DISABLE_REGRADE_ON_POLICY_CHANGE):
+ log.debug('Grades: ignoring policy change regrade due to waffle switch')
+ else:
+ course_key = CourseKey.from_string(kwargs.pop('course_key'))
+ for course_key_string, offset, batch_size in _course_task_args(course_key=course_key, **kwargs):
+ kwargs.update({
+ 'course_key': course_key_string,
+ 'offset': offset,
+ 'batch_size': batch_size,
+ })
+ compute_grades_for_course_v2.apply_async(
+ kwargs=kwargs, routing_key=settings.POLICY_CHANGE_GRADES_ROUTING_KEY
+ )
@task(base=_BaseTask, bind=True, default_retry_delay=30, max_retries=1)
diff --git a/lms/djangoapps/grades/tests/test_new.py b/lms/djangoapps/grades/tests/test_new.py
index 5c1d07ce01..cd4d405724 100644
--- a/lms/djangoapps/grades/tests/test_new.py
+++ b/lms/djangoapps/grades/tests/test_new.py
@@ -727,10 +727,6 @@ class TestCourseGradeLogging(ProblemSubmissionTestMixin, SharedModuleStoreTestCa
enabled_for_course=True
):
with patch('lms.djangoapps.grades.new.course_grade_factory.log') as log_mock:
- # returns Zero when no grade, with ASSUME_ZERO_GRADE_IF_ABSENT
- with waffle().override(ASSUME_ZERO_GRADE_IF_ABSENT, active=True):
- self._create_course_grade_and_check_logging(grade_factory.create, log_mock.info, u'CreateZero')
-
# read, but not persisted
self._create_course_grade_and_check_logging(grade_factory.create, log_mock.info, u'Update')
@@ -742,3 +738,48 @@ class TestCourseGradeLogging(ProblemSubmissionTestMixin, SharedModuleStoreTestCa
# read from persistence, using read
self._create_course_grade_and_check_logging(grade_factory.read, log_mock.debug, u'Read')
+
+
+class TestCourseGradeFactory(GradeTestBase):
+ def test_course_grade_summary(self):
+ with mock_get_score(1, 2):
+ self.subsection_grade_factory.update(self.course_structure[self.sequence.location])
+ course_grade = CourseGradeFactory().update(self.request.user, self.course)
+
+ actual_summary = course_grade.summary
+
+ # We should have had a zero subsection grade for sequential 2, since we never
+ # gave it a mock score above.
+ expected_summary = {
+ 'grade': None,
+ 'grade_breakdown': {
+ 'Homework': {
+ 'category': 'Homework',
+ 'percent': 0.25,
+ 'detail': 'Homework = 25.00% of a possible 100.00%',
+ }
+ },
+ 'percent': 0.25,
+ 'section_breakdown': [
+ {
+ 'category': 'Homework',
+ 'detail': u'Homework 1 - Test Sequential 1 - 50% (1/2)',
+ 'label': u'HW 01',
+ 'percent': 0.5
+ },
+ {
+ 'category': 'Homework',
+ 'detail': u'Homework 2 - Test Sequential 2 - 0% (0/1)',
+ 'label': u'HW 02',
+ 'percent': 0.0
+ },
+ {
+ 'category': 'Homework',
+ 'detail': u'Homework Average = 25%',
+ 'label': u'HW Avg',
+ 'percent': 0.25,
+ 'prominent': True
+ },
+ ]
+ }
+ self.assertEqual(expected_summary, actual_summary)
diff --git a/lms/djangoapps/grades/tests/test_signals.py b/lms/djangoapps/grades/tests/test_signals.py
index dfaca5dd4c..58890f8276 100644
--- a/lms/djangoapps/grades/tests/test_signals.py
+++ b/lms/djangoapps/grades/tests/test_signals.py
@@ -197,28 +197,6 @@ class ScoreChangedSignalRelayTest(TestCase):
expected_set_kwargs['score_deleted'] = False
self.signal_mock.assert_called_with(**expected_set_kwargs)
- @patch('lms.djangoapps.grades.signals.handlers.log.info')
- def test_subsection_update_logging(self, mocklog):
- enqueue_subsection_update(
- sender='test',
- user_id=1,
- course_id=u'course-v1:edX+Demo_Course+DemoX',
- usage_id=u'block-v1:block-key',
- modified=FROZEN_NOW_DATETIME,
- score_db_table=ScoreDatabaseTableEnum.courseware_student_module,
- )
- log_statement = mocklog.call_args[0][0]
- log_statement = UUID_REGEX.sub(u'*UUID*', log_statement)
- self.assertEqual(
- log_statement,
- (
- u'Grades: Request async calculation of subsection grades with args: '
- u'course_id:course-v1:edX+Demo_Course+DemoX, modified:{time}, '
- u'score_db_table:csm, '
- u'usage_id:block-v1:block-key, user_id:1. Task [*UUID*]'
- ).format(time=FROZEN_NOW_DATETIME)
- )
-
@ddt.data(
[score_set, 'lms.djangoapps.grades.signals.handlers.submissions_score_set_handler', SUBMISSION_SET_KWARGS],
[score_reset, 'lms.djangoapps.grades.signals.handlers.submissions_score_reset_handler', SUBMISSION_RESET_KWARGS]
diff --git a/lms/djangoapps/instructor/tests/test_api.py b/lms/djangoapps/instructor/tests/test_api.py
index ba07cbade0..f731629620 100644
--- a/lms/djangoapps/instructor/tests/test_api.py
+++ b/lms/djangoapps/instructor/tests/test_api.py
@@ -25,7 +25,7 @@ from django.utils.translation import ugettext as _
from mock import Mock, patch
from nose.plugins.attrib import attr
from nose.tools import raises
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locator import UsageKey
import lms.djangoapps.instructor.views.api
@@ -52,7 +52,11 @@ from lms.djangoapps.instructor.views.api import (
generate_unique_password,
require_finance_admin
)
-from lms.djangoapps.instructor_task.api_helper import AlreadyRunningError
+from lms.djangoapps.instructor_task.api_helper import (
+ AlreadyRunningError,
+ QueueConnectionError,
+ generate_already_running_error_message
+)
from openedx.core.djangoapps.course_groups.cohorts import set_course_cohorted
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin
@@ -143,6 +147,7 @@ REPORTS_DATA = (
EXECUTIVE_SUMMARY_DATA = (
{
'report_type': 'executive summary',
+ 'task_type': 'exec_summary_report',
'instructor_api_endpoint': 'get_exec_summary_report',
'task_api_endpoint': 'lms.djangoapps.instructor_task.api.submit_executive_summary_report',
'extra_instructor_api_kwargs': {}
@@ -244,7 +249,16 @@ def view_alreadyrunningerror(request): # pylint: disable=unused-argument
raise AlreadyRunningError()
+@common_exceptions_400
+def view_queue_connection_error(request): # pylint: disable=unused-argument
+ """
+ A dummy view that raises a QueueConnectionError exception.
+ """
+ raise QueueConnectionError()
+
+
@attr(shard=1)
+@ddt.ddt
class TestCommonExceptions400(TestCase):
"""
Testing the common_exceptions_400 decorator.
@@ -269,21 +283,29 @@ class TestCommonExceptions400(TestCase):
self.request.is_ajax.return_value = True
resp = view_user_doesnotexist(self.request) # pylint: disable=assignment-from-no-return
self.assertEqual(resp.status_code, 400)
- result = json.loads(resp.content)
- self.assertIn("User does not exist", result["error"])
+ self.assertIn("User does not exist", resp.content)
def test_alreadyrunningerror(self):
self.request.is_ajax.return_value = False
resp = view_alreadyrunningerror(self.request) # pylint: disable=assignment-from-no-return
self.assertEqual(resp.status_code, 400)
- self.assertIn("Task is already running", resp.content)
+ self.assertIn("Requested task is already running", resp.content)
def test_alreadyrunningerror_ajax(self):
self.request.is_ajax.return_value = True
resp = view_alreadyrunningerror(self.request) # pylint: disable=assignment-from-no-return
self.assertEqual(resp.status_code, 400)
- result = json.loads(resp.content)
- self.assertIn("Task is already running", result["error"])
+ self.assertIn("Requested task is already running", resp.content)
+
+ @ddt.data(True, False)
+ def test_queue_connection_error(self, is_ajax):
+ """
+ Tests that QueueConnectionError exception is handled in common_exception_400.
+ """
+ self.request.is_ajax.return_value = is_ajax
+ resp = view_queue_connection_error(self.request) # pylint: disable=assignment-from-no-return
+ self.assertEqual(resp.status_code, 400)
+ self.assertIn('Error occured. Please try again later', resp.content)
@attr(shard=1)
@@ -401,6 +423,7 @@ class TestInstructorAPIDenyLevels(SharedModuleStoreTestCase, LoginEnrollmentTest
('get_proctored_exam_results', {}),
('get_problem_responses', {}),
('export_ora2_data', {}),
+
]
# Endpoints that only Instructors can access
self.instructor_level_endpoints = [
@@ -2680,14 +2703,15 @@ class TestInstructorAPILevelsDataDump(SharedModuleStoreTestCase, LoginEnrollment
'get_problem_responses',
kwargs={'course_id': unicode(self.course.id)}
)
-
+ task_type = 'problem_responses_csv'
+ already_running_status = generate_already_running_error_message(task_type)
with patch('lms.djangoapps.instructor_task.api.submit_calculate_problem_responses_csv') as submit_task_function:
- error = AlreadyRunningError()
+ error = AlreadyRunningError(already_running_status)
submit_task_function.side_effect = error
response = self.client.post(url, {})
- res_json = json.loads(response.content)
- self.assertIn('status', res_json)
- self.assertIn('already in progress', res_json['status'])
+
+ self.assertEqual(response.status_code, 400)
+ self.assertIn(already_running_status, response.content)
def test_get_students_features(self):
"""
@@ -2757,17 +2781,16 @@ class TestInstructorAPILevelsDataDump(SharedModuleStoreTestCase, LoginEnrollment
)
# Successful case:
response = self.client.post(url, {})
- res_json = json.loads(response.content)
- self.assertIn('status', res_json)
- self.assertNotIn('currently being created', res_json['status'])
+ self.assertEqual(response.status_code, 200)
# CSV generation already in progress:
+ task_type = 'may_enroll_info_csv'
+ already_running_status = generate_already_running_error_message(task_type)
with patch('lms.djangoapps.instructor_task.api.submit_calculate_may_enroll_csv') as submit_task_function:
- error = AlreadyRunningError()
+ error = AlreadyRunningError(already_running_status)
submit_task_function.side_effect = error
response = self.client.post(url, {})
- res_json = json.loads(response.content)
- self.assertIn('status', res_json)
- self.assertIn('currently being created', res_json['status'])
+ self.assertEqual(response.status_code, 400)
+ self.assertIn(already_running_status, response.content)
def test_get_student_exam_results(self):
"""
@@ -2778,19 +2801,19 @@ class TestInstructorAPILevelsDataDump(SharedModuleStoreTestCase, LoginEnrollment
'get_proctored_exam_results',
kwargs={'course_id': unicode(self.course.id)}
)
+
# Successful case:
response = self.client.post(url, {})
- res_json = json.loads(response.content)
- self.assertIn('status', res_json)
- self.assertNotIn('currently being created', res_json['status'])
+ self.assertEqual(response.status_code, 200)
# CSV generation already in progress:
+ task_type = 'proctored_exam_results_report'
+ already_running_status = generate_already_running_error_message(task_type)
with patch('lms.djangoapps.instructor_task.api.submit_proctored_exam_results_report') as submit_task_function:
- error = AlreadyRunningError()
+ error = AlreadyRunningError(already_running_status)
submit_task_function.side_effect = error
response = self.client.post(url, {})
- res_json = json.loads(response.content)
- self.assertIn('status', res_json)
- self.assertIn('currently being created', res_json['status'])
+ self.assertEqual(response.status_code, 400)
+ self.assertIn(already_running_status, response.content)
def test_access_course_finance_admin_with_invalid_course_key(self):
"""
@@ -3045,10 +3068,11 @@ class TestInstructorAPILevelsDataDump(SharedModuleStoreTestCase, LoginEnrollment
def test_executive_summary_report_success(
self,
report_type,
+ task_type,
instructor_api_endpoint,
task_api_endpoint,
extra_instructor_api_kwargs
- ):
+ ): # pylint: disable=unused-argument
kwargs = {'course_id': unicode(self.course.id)}
kwargs.update(extra_instructor_api_kwargs)
url = reverse(instructor_api_endpoint, kwargs=kwargs)
@@ -3066,6 +3090,7 @@ class TestInstructorAPILevelsDataDump(SharedModuleStoreTestCase, LoginEnrollment
def test_executive_summary_report_already_running(
self,
report_type,
+ task_type,
instructor_api_endpoint,
task_api_endpoint,
extra_instructor_api_kwargs
@@ -3075,14 +3100,12 @@ class TestInstructorAPILevelsDataDump(SharedModuleStoreTestCase, LoginEnrollment
url = reverse(instructor_api_endpoint, kwargs=kwargs)
CourseFinanceAdminRole(self.course.id).add_users(self.instructor)
+ already_running_status = generate_already_running_error_message(task_type)
with patch(task_api_endpoint) as mock:
- mock.side_effect = AlreadyRunningError()
+ mock.side_effect = AlreadyRunningError(already_running_status)
response = self.client.post(url, {})
- already_running_status = "The {report_type} report is currently being created." \
- " To view the status of the report, see Pending Tasks below." \
- " You will be able to download the report" \
- " when it is" \
- " complete.".format(report_type=report_type)
+
+ self.assertEqual(response.status_code, 400)
self.assertIn(already_running_status, response.content)
def test_get_ora2_responses_success(self):
@@ -3091,16 +3114,19 @@ class TestInstructorAPILevelsDataDump(SharedModuleStoreTestCase, LoginEnrollment
with patch('lms.djangoapps.instructor_task.api.submit_export_ora2_data') as mock_submit_ora2_task:
mock_submit_ora2_task.return_value = True
response = self.client.post(url, {})
- success_status = "The ORA data report is being generated."
+ success_status = "The ORA data report is being created."
self.assertIn(success_status, response.content)
def test_get_ora2_responses_already_running(self):
url = reverse('export_ora2_data', kwargs={'course_id': unicode(self.course.id)})
+ task_type = 'export_ora2_data'
+ already_running_status = generate_already_running_error_message(task_type)
with patch('lms.djangoapps.instructor_task.api.submit_export_ora2_data') as mock_submit_ora2_task:
- mock_submit_ora2_task.side_effect = AlreadyRunningError()
+ mock_submit_ora2_task.side_effect = AlreadyRunningError(already_running_status)
response = self.client.post(url, {})
- already_running_status = "An ORA data report generation task is already in progress."
+
+ self.assertEqual(response.status_code, 400)
self.assertIn(already_running_status, response.content)
def test_get_student_progress_url(self):
@@ -4049,10 +4075,10 @@ class TestInstructorAPIHelpers(TestCase):
self.assertEqual(_split_input_list(scary_unistuff), [scary_unistuff])
def test_msk_from_problem_urlname(self):
- course_id = SlashSeparatedCourseKey('MITx', '6.002x', '2013_Spring')
+ course_id = CourseKey.from_string('MITx/6.002x/2013_Spring')
name = 'L2Node1'
output = 'i4x://MITx/6.002x/problem/L2Node1'
- self.assertEqual(msk_from_problem_urlname(course_id, name).to_deprecated_string(), output)
+ self.assertEqual(unicode(msk_from_problem_urlname(course_id, name)), output)
@raises(ValueError)
def test_msk_from_problem_urlname_error(self):
diff --git a/lms/djangoapps/instructor/tests/test_email.py b/lms/djangoapps/instructor/tests/test_email.py
index fb18334b0d..4a0b89ffd4 100644
--- a/lms/djangoapps/instructor/tests/test_email.py
+++ b/lms/djangoapps/instructor/tests/test_email.py
@@ -7,7 +7,7 @@ that the view is conditionally available when Course Auth is turned on.
from django.core.urlresolvers import reverse
from nose.plugins.attrib import attr
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from bulk_email.models import BulkEmailFlag, CourseAuthorization
from student.tests.factories import AdminFactory
@@ -119,10 +119,10 @@ class TestNewInstructorDashboardEmailViewXMLBacked(SharedModuleStoreTestCase):
@classmethod
def setUpClass(cls):
super(TestNewInstructorDashboardEmailViewXMLBacked, cls).setUpClass()
- cls.course_key = SlashSeparatedCourseKey('edX', 'toy', '2012_Fall')
+ cls.course_key = CourseKey.from_string('edX/toy/2012_Fall')
# URL for instructor dash
- cls.url = reverse('instructor_dashboard', kwargs={'course_id': cls.course_key.to_deprecated_string()})
+ cls.url = reverse('instructor_dashboard', kwargs={'course_id': unicode(cls.course_key)})
# URL for email view
cls.email_link = ''
diff --git a/lms/djangoapps/instructor/tests/test_enrollment.py b/lms/djangoapps/instructor/tests/test_enrollment.py
index af8a5604ab..3593ad5d38 100644
--- a/lms/djangoapps/instructor/tests/test_enrollment.py
+++ b/lms/djangoapps/instructor/tests/test_enrollment.py
@@ -13,7 +13,7 @@ from django.utils.translation import override as override_language
from django.utils.translation import get_language
from mock import patch
from nose.plugins.attrib import attr
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from capa.tests.response_xml_factory import MultipleChoiceResponseXMLFactory
from courseware.models import StudentModule
@@ -44,7 +44,7 @@ class TestSettableEnrollmentState(CacheIsolationTestCase):
""" Test the basis class for enrollment tests. """
def setUp(self):
super(TestSettableEnrollmentState, self).setUp()
- self.course_key = SlashSeparatedCourseKey('Robot', 'fAKE', 'C-%-se-%-ID')
+ self.course_key = CourseLocator('Robot', 'fAKE', 'C--se--ID')
def test_mes_create(self):
"""
@@ -75,7 +75,7 @@ class TestEnrollmentChangeBase(CacheIsolationTestCase):
def setUp(self):
super(TestEnrollmentChangeBase, self).setUp()
- self.course_key = SlashSeparatedCourseKey('Robot', 'fAKE', 'C-%-se-%-ID')
+ self.course_key = CourseLocator('Robot', 'fAKE', 'C--se--ID')
def _run_state_change_test(self, before_ideal, after_ideal, action):
"""
diff --git a/lms/djangoapps/instructor/views/api.py b/lms/djangoapps/instructor/views/api.py
index f9911ddb4e..cb9e2852b8 100644
--- a/lms/djangoapps/instructor/views/api.py
+++ b/lms/djangoapps/instructor/views/api.py
@@ -71,7 +71,7 @@ from lms.djangoapps.instructor.enrollment import (
from lms.djangoapps.instructor.views import INVOICE_KEY
from lms.djangoapps.instructor.views.instructor_task_helpers import extract_email_features, extract_task_features
from lms.djangoapps.instructor_task.api import submit_override_score
-from lms.djangoapps.instructor_task.api_helper import AlreadyRunningError
+from lms.djangoapps.instructor_task.api_helper import AlreadyRunningError, QueueConnectionError
from lms.djangoapps.instructor_task.models import ReportStore
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.djangoapps.course_groups.cohorts import is_course_cohorted
@@ -133,29 +133,31 @@ log = logging.getLogger(__name__)
TASK_SUBMISSION_OK = 'created'
+SUCCESS_MESSAGE_TEMPLATE = _("The {report_type} report is being created. "
+ "To view the status of the report, see Pending Tasks below.")
+
def common_exceptions_400(func):
"""
Catches common exceptions and renders matching 400 errors.
(decorator without arguments)
"""
+
def wrapped(request, *args, **kwargs): # pylint: disable=missing-docstring
use_json = (request.is_ajax() or
request.META.get("HTTP_ACCEPT", "").startswith("application/json"))
try:
return func(request, *args, **kwargs)
except User.DoesNotExist:
- message = _("User does not exist.")
- if use_json:
- return JsonResponse({"error": message}, 400)
- else:
- return HttpResponseBadRequest(message)
- except AlreadyRunningError:
- message = _("Task is already running.")
- if use_json:
- return JsonResponse({"error": message}, 400)
- else:
- return HttpResponseBadRequest(message)
+ message = _('User does not exist.')
+ except (AlreadyRunningError, QueueConnectionError) as err:
+ message = str(err)
+
+ if use_json:
+ return JsonResponseBadRequest(message)
+ else:
+ return HttpResponseBadRequest(message)
+
return wrapped
@@ -829,12 +831,12 @@ def bulk_beta_modify_access(request, course_id):
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('instructor')
-@common_exceptions_400
@require_post_params(
unique_student_identifier="email or username of user to change access",
rolename="'instructor', 'staff', 'beta', or 'ccx_coach'",
action="'allow' or 'revoke'"
)
+@common_exceptions_400
def modify_access(request, course_id):
"""
Modify staff/instructor access of other user.
@@ -964,6 +966,7 @@ def list_course_role_members(request, course_id):
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
+@common_exceptions_400
def get_problem_responses(request, course_id):
"""
Initiate generation of a CSV file containing all student answers
@@ -978,6 +981,7 @@ def get_problem_responses(request, course_id):
"""
course_key = CourseKey.from_string(course_id)
problem_location = request.POST.get('problem_location', '')
+ report_type = _('problem responses')
try:
problem_key = UsageKey.from_string(problem_location)
@@ -990,20 +994,10 @@ def get_problem_responses(request, course_id):
except InvalidKeyError:
return JsonResponseBadRequest(_("Could not find problem with this location."))
- try:
- lms.djangoapps.instructor_task.api.submit_calculate_problem_responses_csv(request, course_key, problem_location)
- success_status = _(
- "The problem responses report is being created."
- " To view the status of the report, see Pending Tasks below."
- )
- return JsonResponse({"status": success_status})
- except AlreadyRunningError:
- already_running_status = _(
- "A problem responses report generation task is already in progress. "
- "Check the 'Pending Tasks' table for the status of the task. "
- "When completed, the report will be available for download in the table below."
- )
- return JsonResponse({"status": already_running_status})
+ lms.djangoapps.instructor_task.api.submit_calculate_problem_responses_csv(request, course_key, problem_location)
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
+
+ return JsonResponse({"status": success_status})
@require_POST
@@ -1209,6 +1203,7 @@ def get_issued_certificates(request, course_id):
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
+@common_exceptions_400
def get_students_features(request, course_id, csv=False): # pylint: disable=redefined-outer-name
"""
Respond with json which contains a summary of all enrolled students profile information.
@@ -1220,7 +1215,7 @@ def get_students_features(request, course_id, csv=False): # pylint: disable=red
"""
course_key = CourseKey.from_string(course_id)
course = get_course_by_id(course_key)
-
+ report_type = _('enrolled learner profile')
available_features = instructor_analytics.basic.AVAILABLE_FEATURES
# Allow for sites to be able to define additional columns.
@@ -1285,22 +1280,16 @@ def get_students_features(request, course_id, csv=False): # pylint: disable=red
'available_features': available_features,
}
return JsonResponse(response_payload)
+
else:
- try:
- lms.djangoapps.instructor_task.api.submit_calculate_students_features_csv(
- request,
- course_key,
- query_features
- )
- success_status = _("The enrolled learner profile report is being created."
- " To view the status of the report, see Pending Tasks below.")
- return JsonResponse({"status": success_status})
- except AlreadyRunningError:
- already_running_status = _(
- "This enrollment report is currently being created."
- " To view the status of the report, see Pending Tasks below."
- " You will be able to download the report when it is complete.")
- return JsonResponse({"status": already_running_status})
+ lms.djangoapps.instructor_task.api.submit_calculate_students_features_csv(
+ request,
+ course_key,
+ query_features
+ )
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
+
+ return JsonResponse({"status": success_status})
@transaction.non_atomic_requests
@@ -1308,6 +1297,7 @@ def get_students_features(request, course_id, csv=False): # pylint: disable=red
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
+@common_exceptions_400
def get_students_who_may_enroll(request, course_id):
"""
Initiate generation of a CSV file containing information about
@@ -1319,21 +1309,11 @@ def get_students_who_may_enroll(request, course_id):
"""
course_key = CourseKey.from_string(course_id)
query_features = ['email']
- try:
- lms.djangoapps.instructor_task.api.submit_calculate_may_enroll_csv(request, course_key, query_features)
- success_status = _(
- "The enrollment report is being created. This report contains"
- " information about learners who can enroll in the course."
- " To view the status of the report, see Pending Tasks below."
- )
- return JsonResponse({"status": success_status})
- except AlreadyRunningError:
- already_running_status = _(
- "This enrollment report is currently being created."
- " To view the status of the report, see Pending Tasks below."
- " You will be able to download the report when it is complete."
- )
- return JsonResponse({"status": already_running_status})
+ report_type = _('enrollment')
+ lms.djangoapps.instructor_task.api.submit_calculate_may_enroll_csv(request, course_key, query_features)
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
+
+ return JsonResponse({"status": success_status})
@transaction.non_atomic_requests
@@ -1341,6 +1321,7 @@ def get_students_who_may_enroll(request, course_id):
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_POST
@require_level('staff')
+@common_exceptions_400
def add_users_to_cohorts(request, course_id):
"""
View method that accepts an uploaded file (using key "uploaded-file")
@@ -1417,23 +1398,17 @@ def get_coupon_codes(request, course_id): # pylint: disable=unused-argument
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
@require_finance_admin
+@common_exceptions_400
def get_enrollment_report(request, course_id):
"""
get the enrollment report for the particular course.
"""
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
- try:
- lms.djangoapps.instructor_task.api.submit_detailed_enrollment_features_csv(request, course_key)
- success_status = _("The detailed enrollment report is being created."
- " To view the status of the report, see Pending Tasks below.")
- return JsonResponse({"status": success_status})
- except AlreadyRunningError:
- already_running_status = _("The detailed enrollment report is being created."
- " To view the status of the report, see Pending Tasks below."
- " You will be able to download the report when it is complete.")
- return JsonResponse({
- "status": already_running_status
- })
+ report_type = _('detailed enrollment')
+ lms.djangoapps.instructor_task.api.submit_detailed_enrollment_features_csv(request, course_key)
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
+
+ return JsonResponse({"status": success_status})
@transaction.non_atomic_requests
@@ -1442,24 +1417,17 @@ def get_enrollment_report(request, course_id):
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
@require_finance_admin
+@common_exceptions_400
def get_exec_summary_report(request, course_id):
"""
get the executive summary report for the particular course.
"""
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
- try:
- lms.djangoapps.instructor_task.api.submit_executive_summary_report(request, course_key)
- status_response = _("The executive summary report is being created."
- " To view the status of the report, see Pending Tasks below.")
- except AlreadyRunningError:
- status_response = _(
- "The executive summary report is currently being created."
- " To view the status of the report, see Pending Tasks below."
- " You will be able to download the report when it is complete."
- )
- return JsonResponse({
- "status": status_response
- })
+ report_type = _('executive summary')
+ lms.djangoapps.instructor_task.api.submit_executive_summary_report(request, course_key)
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
+
+ return JsonResponse({"status": success_status})
@transaction.non_atomic_requests
@@ -1467,24 +1435,17 @@ def get_exec_summary_report(request, course_id):
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
+@common_exceptions_400
def get_course_survey_results(request, course_id):
"""
get the survey results report for the particular course.
"""
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
- try:
- lms.djangoapps.instructor_task.api.submit_course_survey_report(request, course_key)
- status_response = _("The survey report is being created."
- " To view the status of the report, see Pending Tasks below.")
- except AlreadyRunningError:
- status_response = _(
- "The survey report is currently being created."
- " To view the status of the report, see Pending Tasks below."
- " You will be able to download the report when it is complete."
- )
- return JsonResponse({
- "status": status_response
- })
+ report_type = _('survey')
+ lms.djangoapps.instructor_task.api.submit_course_survey_report(request, course_key)
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
+
+ return JsonResponse({"status": success_status})
@transaction.non_atomic_requests
@@ -1492,6 +1453,7 @@ def get_course_survey_results(request, course_id):
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
+@common_exceptions_400
def get_proctored_exam_results(request, course_id):
"""
get the proctored exam resultsreport for the particular course.
@@ -1508,19 +1470,11 @@ def get_proctored_exam_results(request, course_id):
]
course_key = CourseKey.from_string(course_id)
- try:
- lms.djangoapps.instructor_task.api.submit_proctored_exam_results_report(request, course_key, query_features)
- status_response = _("The proctored exam results report is being created."
- " To view the status of the report, see Pending Tasks below.")
- except AlreadyRunningError:
- status_response = _(
- "The proctored exam results report is currently being created."
- " To view the status of the report, see Pending Tasks below."
- " You will be able to download the report when it is complete."
- )
- return JsonResponse({
- "status": status_response
- })
+ report_type = _('proctored exam results')
+ lms.djangoapps.instructor_task.api.submit_proctored_exam_results_report(request, course_key, query_features)
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
+
+ return JsonResponse({"status": success_status})
def save_registration_code(user, course_id, mode_slug, invoice=None, order=None, invoice_item=None):
@@ -1901,11 +1855,11 @@ def get_anon_ids(request, course_id): # pylint: disable=unused-argument
@require_POST
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
-@common_exceptions_400
@require_level('staff')
@require_post_params(
unique_student_identifier="email or username of student for whom to get progress url"
)
+@common_exceptions_400
def get_student_progress_url(request, course_id):
"""
Get the progress url of a student.
@@ -2147,6 +2101,7 @@ def rescore_problem(request, course_id):
)
except NotImplementedError as exc:
return HttpResponseBadRequest(exc.message)
+
elif all_students:
try:
lms.djangoapps.instructor_task.api.submit_rescore_problem_for_all_students(
@@ -2453,25 +2408,17 @@ def list_financial_report_downloads(_request, course_id):
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
+@common_exceptions_400
def export_ora2_data(request, course_id):
"""
Pushes a Celery task which will aggregate ora2 responses for a course into a .csv
"""
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
- try:
- lms.djangoapps.instructor_task.api.submit_export_ora2_data(request, course_key)
- success_status = _("The ORA data report is being generated.")
+ report_type = _('ORA data')
+ lms.djangoapps.instructor_task.api.submit_export_ora2_data(request, course_key)
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
- return JsonResponse({"status": success_status})
- except AlreadyRunningError:
- already_running_status = _(
- "An ORA data report generation task is already in "
- "progress. Check the 'Pending Tasks' table "
- "for the status of the task. When completed, the report "
- "will be available for download in the table below."
- )
-
- return JsonResponse({"status": already_running_status})
+ return JsonResponse({"status": success_status})
@transaction.non_atomic_requests
@@ -2479,21 +2426,17 @@ def export_ora2_data(request, course_id):
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
+@common_exceptions_400
def calculate_grades_csv(request, course_id):
"""
AlreadyRunningError is raised if the course's grades are already being updated.
"""
+ report_type = _('grade')
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
- try:
- lms.djangoapps.instructor_task.api.submit_calculate_grades_csv(request, course_key)
- success_status = _("The grade report is being created."
- " To view the status of the report, see Pending Tasks below.")
- return JsonResponse({"status": success_status})
- except AlreadyRunningError:
- already_running_status = _("The grade report is currently being created."
- " To view the status of the report, see Pending Tasks below."
- " You will be able to download the report when it is complete.")
- return JsonResponse({"status": already_running_status})
+ lms.djangoapps.instructor_task.api.submit_calculate_grades_csv(request, course_key)
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
+
+ return JsonResponse({"status": success_status})
@transaction.non_atomic_requests
@@ -2501,6 +2444,7 @@ def calculate_grades_csv(request, course_id):
@ensure_csrf_cookie
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
+@common_exceptions_400
def problem_grade_report(request, course_id):
"""
Request a CSV showing students' grades for all problems in the
@@ -2510,18 +2454,11 @@ def problem_grade_report(request, course_id):
updated.
"""
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
- try:
- lms.djangoapps.instructor_task.api.submit_problem_grade_report(request, course_key)
- success_status = _("The problem grade report is being created."
- " To view the status of the report, see Pending Tasks below.")
- return JsonResponse({"status": success_status})
- except AlreadyRunningError:
- already_running_status = _("A problem grade report is already being generated."
- " To view the status of the report, see Pending Tasks below."
- " You will be able to download the report when it is complete.")
- return JsonResponse({
- "status": already_running_status
- })
+ report_type = _('problem grade')
+ lms.djangoapps.instructor_task.api.submit_problem_grade_report(request, course_key)
+ success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type)
+
+ return JsonResponse({"status": success_status})
@require_POST
@@ -2601,6 +2538,7 @@ def list_forum_members(request, course_id):
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_level('staff')
@require_post_params(send_to="sending to whom", subject="subject line", message="message text")
+@common_exceptions_400
def send_email(request, course_id):
"""
Send an email to self, staff, cohorts, or everyone involved in a course.
@@ -2667,6 +2605,7 @@ def send_email(request, course_id):
'course_id': course_id.to_deprecated_string(),
'success': True,
}
+
return JsonResponse(response_payload)
@@ -2944,6 +2883,7 @@ def mark_student_can_skip_entrance_exam(request, course_id): # pylint: disable=
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_global_staff
@require_POST
+@common_exceptions_400
def start_certificate_generation(request, course_id):
"""
Start generating certificates for all students enrolled in given course.
@@ -2956,6 +2896,7 @@ def start_certificate_generation(request, course_id):
'message': message,
'task_id': task.task_id
}
+
return JsonResponse(response_payload)
@@ -2964,6 +2905,7 @@ def start_certificate_generation(request, course_id):
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_global_staff
@require_POST
+@common_exceptions_400
def start_certificate_regeneration(request, course_id):
"""
Start regenerating certificates for students whose certificate statuses lie with in 'certificate_statuses'
@@ -2990,11 +2932,8 @@ def start_certificate_regeneration(request, course_id):
{'message': _('Please select certificate statuses from the list only.')},
status=400
)
- try:
- lms.djangoapps.instructor_task.api.regenerate_certificates(request, course_key, certificates_statuses)
- except AlreadyRunningError as error:
- return JsonResponse({'message': error.message}, status=400)
+ lms.djangoapps.instructor_task.api.regenerate_certificates(request, course_key, certificates_statuses)
response_payload = {
'message': _('Certificate regeneration task has been started. '
'You can view the status of the generation task in the "Pending Tasks" section.'),
@@ -3183,6 +3122,7 @@ def get_student(username_or_email, course_key):
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@require_global_staff
@require_POST
+@common_exceptions_400
def generate_certificate_exceptions(request, course_id, generate_for=None):
"""
Generate Certificate for students in the Certificate White List.
@@ -3213,7 +3153,6 @@ def generate_certificate_exceptions(request, course_id, generate_for=None):
)
lms.djangoapps.instructor_task.api.generate_certificates_for_students(request, course_key, student_set=students)
-
response_payload = {
'success': True,
'message': _('Certificate generation started for white listed students.'),
@@ -3401,6 +3340,7 @@ def invalidate_certificate(request, generated_certificate, certificate_invalidat
}
+@common_exceptions_400
def re_validate_certificate(request, course_key, generated_certificate):
"""
Remove certificate invalidation from db and start certificate generation task for this student.
@@ -3421,6 +3361,7 @@ def re_validate_certificate(request, course_key, generated_certificate):
# We need to generate certificate only for a single student here
student = certificate_invalidation.generated_certificate.user
+
lms.djangoapps.instructor_task.api.generate_certificates_for_students(
request, course_key, student_set="specific_student", specific_student_id=student.id
)
diff --git a/lms/djangoapps/instructor_analytics/tests/test_distributions.py b/lms/djangoapps/instructor_analytics/tests/test_distributions.py
index 0a91a04ba1..80923d5baf 100644
--- a/lms/djangoapps/instructor_analytics/tests/test_distributions.py
+++ b/lms/djangoapps/instructor_analytics/tests/test_distributions.py
@@ -2,7 +2,7 @@
from django.test import TestCase
from nose.tools import raises
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from instructor_analytics.distributions import AVAILABLE_PROFILE_FEATURES, profile_distribution
from student.models import CourseEnrollment
@@ -14,7 +14,7 @@ class TestAnalyticsDistributions(TestCase):
def setUp(self):
super(TestAnalyticsDistributions, self).setUp()
- self.course_id = SlashSeparatedCourseKey('robot', 'course', 'id')
+ self.course_id = CourseLocator('robot', 'course', 'id')
self.users = [UserFactory(
profile__gender=['m', 'f', 'o'][i % 3],
@@ -77,7 +77,7 @@ class TestAnalyticsDistributionsNoData(TestCase):
def setUp(self):
super(TestAnalyticsDistributionsNoData, self).setUp()
- self.course_id = SlashSeparatedCourseKey('robot', 'course', 'id')
+ self.course_id = CourseLocator('robot', 'course', 'id')
self.users = [UserFactory(
profile__year_of_birth=i + 1930,
diff --git a/lms/djangoapps/instructor_task/api_helper.py b/lms/djangoapps/instructor_task/api_helper.py
index 3996af339a..c49a9be1d8 100644
--- a/lms/djangoapps/instructor_task/api_helper.py
+++ b/lms/djangoapps/instructor_task/api_helper.py
@@ -25,7 +25,26 @@ log = logging.getLogger(__name__)
class AlreadyRunningError(Exception):
"""Exception indicating that a background task is already running"""
- pass
+
+ message = _('Requested task is already running')
+
+ def __init__(self, message=None):
+
+ if not message:
+ message = self.message
+ super(AlreadyRunningError, self).__init__(message)
+
+
+class QueueConnectionError(Exception):
+ """
+ Exception indicating that celery task was not created successfully.
+ """
+ message = _('Error occured. Please try again later.')
+
+ def __init__(self, message=None):
+ if not message:
+ message = self.message
+ super(QueueConnectionError, self).__init__(message)
def _task_is_running(course_id, task_type, task_key):
@@ -57,7 +76,8 @@ def _reserve_task(course_id, task_type, task_key, task_input, requester):
if _task_is_running(course_id, task_type, task_key):
log.warning("Duplicate task found for task_type %s and task_key %s", task_type, task_key)
- raise AlreadyRunningError("requested task is already running")
+ error_message = generate_already_running_error_message(task_type)
+ raise AlreadyRunningError(error_message)
try:
most_recent_id = InstructorTask.objects.latest('id').id
@@ -75,6 +95,37 @@ def _reserve_task(course_id, task_type, task_key, task_input, requester):
return InstructorTask.create(course_id, task_type, task_key, task_input, requester)
+def generate_already_running_error_message(task_type):
+ """
+ Returns already running error message for given task type.
+ """
+
+ message = ''
+ report_types = {
+ 'grade_problems': _('problem grade'),
+ 'problem_responses_csv': _('problem responses'),
+ 'profile_info_csv': _('enrolled learner profile'),
+ 'may_enroll_info_csv': _('enrollment'),
+ 'detailed_enrollment_report': _('detailed enrollment'),
+ 'exec_summary_report': _('executive summary'),
+ 'course_survey_report': _('survey'),
+ 'proctored_exam_results_report': _('proctored exam results'),
+ 'export_ora2_data': _('ORA data'),
+ 'grade_course': _('grade'),
+
+ }
+
+ if report_types.get(task_type):
+
+ message = _(
+ "The {report_type} report is being created. "
+ "To view the status of the report, see Pending Tasks below. "
+ "You will be able to download the report when it is complete."
+ ).format(report_type=report_types.get(task_type))
+
+ return message
+
+
def _get_xmodule_instance_args(request, task_id):
"""
Calculate parameters needed for instantiating xmodule instances.
@@ -190,6 +241,27 @@ def _update_instructor_task(instructor_task, task_result):
instructor_task.save()
+def _update_instructor_task_state(instructor_task, task_state, message=None):
+ """
+ Update state and output of InstructorTask object.
+ """
+ instructor_task.task_state = task_state
+ if message:
+ instructor_task.task_output = message
+
+ instructor_task.save()
+
+
+def _handle_instructor_task_failure(instructor_task, error):
+ """
+ Do required operations if task creation was not complete.
+ """
+ log.info("instructor task (%s) failed, result: %s", instructor_task.task_id, error.message)
+ _update_instructor_task_state(instructor_task, FAILURE, error.message)
+
+ raise QueueConnectionError()
+
+
def get_updated_instructor_task(task_id):
"""
Returns InstructorTask object corresponding to a given `task_id`.
@@ -365,6 +437,10 @@ def submit_task(request, task_type, task_class, course_key, task_input, task_key
task_id = instructor_task.task_id
task_args = [instructor_task.id, _get_xmodule_instance_args(request, task_id)]
- task_class.apply_async(task_args, task_id=task_id)
+ try:
+ task_class.apply_async(task_args, task_id=task_id)
+
+ except Exception as error:
+ _handle_instructor_task_failure(instructor_task, error)
return instructor_task
diff --git a/lms/djangoapps/instructor_task/tests/factories.py b/lms/djangoapps/instructor_task/tests/factories.py
index 9be5423dce..c194e46d7e 100644
--- a/lms/djangoapps/instructor_task/tests/factories.py
+++ b/lms/djangoapps/instructor_task/tests/factories.py
@@ -3,7 +3,7 @@ import json
import factory
from celery.states import PENDING
from factory.django import DjangoModelFactory
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.locator import CourseLocator
from lms.djangoapps.instructor_task.models import InstructorTask
from student.tests.factories import UserFactory as StudentUserFactory
@@ -14,7 +14,7 @@ class InstructorTaskFactory(DjangoModelFactory):
model = InstructorTask
task_type = 'rescore_problem'
- course_id = SlashSeparatedCourseKey("MITx", "999", "Robot_Super_Course")
+ course_id = CourseLocator("MITx", "999", "Robot_Super_Course")
task_input = json.dumps({})
task_key = None
task_id = None
diff --git a/lms/djangoapps/instructor_task/tests/test_api.py b/lms/djangoapps/instructor_task/tests/test_api.py
index 741de82f4c..e010455ff5 100644
--- a/lms/djangoapps/instructor_task/tests/test_api.py
+++ b/lms/djangoapps/instructor_task/tests/test_api.py
@@ -32,7 +32,7 @@ from lms.djangoapps.instructor_task.api import (
submit_reset_problem_attempts_for_all_students,
submit_reset_problem_attempts_in_entrance_exam
)
-from lms.djangoapps.instructor_task.api_helper import AlreadyRunningError
+from lms.djangoapps.instructor_task.api_helper import AlreadyRunningError, QueueConnectionError
from lms.djangoapps.instructor_task.models import PROGRESS, InstructorTask
from lms.djangoapps.instructor_task.tasks import export_ora2_data
from lms.djangoapps.instructor_task.tests.test_base import (
@@ -43,6 +43,7 @@ from lms.djangoapps.instructor_task.tests.test_base import (
TestReportMixin
)
from xmodule.modulestore.exceptions import ItemNotFoundError
+from celery.states import FAILURE
class InstructorTaskReportTest(InstructorTaskTestCase):
@@ -164,15 +165,31 @@ class InstructorTaskModuleSubmitTest(InstructorTaskModuleTestCase):
)
@ddt.unpack
def test_submit_task(self, task_function, expected_task_type, params=None):
+ """
+ Tests submission of instructor task.
+ """
if params is None:
params = {}
if params.get('student'):
params['student'] = self.student
- # tests submit, and then tests a second identical submission.
problem_url_name = 'H1P1'
self.define_option_problem(problem_url_name)
location = InstructorTaskModuleTestCase.problem_location(problem_url_name)
+
+ # unsuccessful submission, exception raised while submitting.
+ with patch('lms.djangoapps.instructor_task.tasks_base.BaseInstructorTask.apply_async') as apply_async:
+
+ error = Exception()
+ apply_async.side_effect = error
+
+ with self.assertRaises(QueueConnectionError):
+ instructor_task = task_function(self.create_task_request(self.instructor), location, **params)
+
+ most_recent_task = InstructorTask.objects.latest('id')
+ self.assertEquals(most_recent_task.task_state, FAILURE)
+
+ # successful submission
instructor_task = task_function(self.create_task_request(self.instructor), location, **params)
self.assertEquals(instructor_task.task_type, expected_task_type)
diff --git a/lms/djangoapps/instructor_task/tests/test_base.py b/lms/djangoapps/instructor_task/tests/test_base.py
index d9be20925a..3bc4a6baad 100644
--- a/lms/djangoapps/instructor_task/tests/test_base.py
+++ b/lms/djangoapps/instructor_task/tests/test_base.py
@@ -14,7 +14,8 @@ from celery.states import FAILURE, SUCCESS
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from mock import Mock, patch
-from opaque_keys.edx.locations import Location, SlashSeparatedCourseKey
+from opaque_keys.edx.locations import Location
+from opaque_keys.edx.keys import CourseKey
from capa.tests.response_xml_factory import OptionResponseXMLFactory
from courseware.model_data import StudentModule
@@ -34,7 +35,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory
TEST_COURSE_ORG = 'edx'
TEST_COURSE_NAME = 'test_course'
TEST_COURSE_NUMBER = '1.23x'
-TEST_COURSE_KEY = SlashSeparatedCourseKey(TEST_COURSE_ORG, TEST_COURSE_NUMBER, TEST_COURSE_NAME)
+TEST_COURSE_KEY = CourseKey.from_string('/'.join([TEST_COURSE_ORG, TEST_COURSE_NUMBER, TEST_COURSE_NAME]))
TEST_CHAPTER_NAME = "Section"
TEST_SECTION_NAME = "Subsection"
diff --git a/lms/djangoapps/lms_xblock/test/test_runtime.py b/lms/djangoapps/lms_xblock/test/test_runtime.py
index aa6331d969..73e4db3026 100644
--- a/lms/djangoapps/lms_xblock/test/test_runtime.py
+++ b/lms/djangoapps/lms_xblock/test/test_runtime.py
@@ -9,7 +9,7 @@ from django.conf import settings
from django.test import TestCase
from mock import Mock, patch
from opaque_keys.edx.keys import CourseKey
-from opaque_keys.edx.locations import BlockUsageLocator, CourseLocator, SlashSeparatedCourseKey
+from opaque_keys.edx.locations import BlockUsageLocator, CourseLocator
from xblock.exceptions import NoSuchServiceError
from xblock.fields import ScopeIds
@@ -56,7 +56,7 @@ class TestHandlerUrl(TestCase):
def setUp(self):
super(TestHandlerUrl, self).setUp()
self.block = BlockMock(name='block', scope_ids=ScopeIds(None, None, None, 'dummy'))
- self.course_key = SlashSeparatedCourseKey("org", "course", "run")
+ self.course_key = CourseLocator("org", "course", "run")
self.runtime = LmsModuleSystem(
static_url='/static',
track_function=Mock(),
@@ -120,7 +120,7 @@ class TestUserServiceAPI(TestCase):
def setUp(self):
super(TestUserServiceAPI, self).setUp()
- self.course_id = SlashSeparatedCourseKey("org", "course", "run")
+ self.course_id = CourseLocator("org", "course", "run")
self.user = UserFactory.create()
def mock_get_real_user(_anon_id):
diff --git a/lms/djangoapps/shoppingcart/admin.py b/lms/djangoapps/shoppingcart/admin.py
index e40646302d..75569c8db3 100644
--- a/lms/djangoapps/shoppingcart/admin.py
+++ b/lms/djangoapps/shoppingcart/admin.py
@@ -1,5 +1,5 @@
"""Django admin interface for the shopping cart models. """
-from ratelimitbackend import admin
+from django.contrib import admin
from shoppingcart.models import (
Coupon,
diff --git a/lms/djangoapps/student_account/test/test_views.py b/lms/djangoapps/student_account/test/test_views.py
index e82d4b4ab0..0944ebc49c 100644
--- a/lms/djangoapps/student_account/test/test_views.py
+++ b/lms/djangoapps/student_account/test/test_views.py
@@ -36,7 +36,6 @@ from openedx.core.djangoapps.oauth_dispatch.tests import factories as dot_factor
from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin
from openedx.core.djangoapps.site_configuration.tests.mixins import SiteMixin
from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme_context
-from openedx.core.djangoapps.user_api.accounts import EMAIL_MAX_LENGTH
from openedx.core.djangoapps.user_api.accounts.api import activate_account, create_account
from openedx.core.djangolib.js_utils import dump_js_escaped_json
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase
@@ -62,24 +61,6 @@ class StudentAccountUpdateTest(CacheIsolationTestCase, UrlResetMixin):
NEW_EMAIL = u"walt@savewalterwhite.com"
INVALID_ATTEMPTS = 100
-
- INVALID_EMAILS = [
- None,
- u"",
- u"a",
- "no_domain",
- "no+domain",
- "@",
- "@domain.com",
- "test@no_extension",
-
- # Long email -- subtract the length of the @domain
- # except for one character (so we exceed the max length limit)
- u"{user}@example.com".format(
- user=(u'e' * (EMAIL_MAX_LENGTH - 11))
- )
- ]
-
INVALID_KEY = u"123abc"
URLCONF_MODULES = ['student_accounts.urls']
@@ -610,6 +591,7 @@ class StudentAccountLoginAndRegistrationTest(ThirdPartyAuthTestMixin, UrlResetMi
"secondaryProviders": [],
"finishAuthUrl": finish_auth_url,
"errorMessage": None,
+ "registerFormSubmitButtonText": "Create Account",
}
if expected_ec is not None:
# If we set an EnterpriseCustomer, third-party auth providers ought to be hidden.
diff --git a/lms/djangoapps/student_account/views.py b/lms/djangoapps/student_account/views.py
index 6351a405af..4825f2d2d2 100644
--- a/lms/djangoapps/student_account/views.py
+++ b/lms/djangoapps/student_account/views.py
@@ -198,7 +198,7 @@ def password_change_request_handler(request):
if email:
try:
- request_password_change(email, request.get_host(), request.is_secure())
+ request_password_change(email, request.is_secure())
user = user if user.is_authenticated() else User.objects.get(email=email)
destroy_oauth_tokens(user)
except UserNotFound:
@@ -316,6 +316,7 @@ def _third_party_auth_context(request, redirect_to, tpa_hint=None):
"secondaryProviders": [],
"finishAuthUrl": None,
"errorMessage": None,
+ "registerFormSubmitButtonText": _("Create Account"),
}
if third_party_auth.is_enabled():
@@ -361,6 +362,7 @@ def _third_party_auth_context(request, redirect_to, tpa_hint=None):
).format(
configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME)
)
+ context["registerFormSubmitButtonText"] = _("Continue")
# Check for any error messages we may want to display:
for msg in messages.get_messages(request):
diff --git a/lms/djangoapps/verify_student/admin.py b/lms/djangoapps/verify_student/admin.py
index a454712e0d..0a53729184 100644
--- a/lms/djangoapps/verify_student/admin.py
+++ b/lms/djangoapps/verify_student/admin.py
@@ -4,7 +4,7 @@ Admin site configurations for verify_student.
"""
from config_models.admin import ConfigurationModelAdmin
-from ratelimitbackend import admin
+from django.contrib import admin
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
diff --git a/lms/djangoapps/verify_student/tests/test_views.py b/lms/djangoapps/verify_student/tests/test_views.py
index bb7f67ad61..c72c4de518 100644
--- a/lms/djangoapps/verify_student/tests/test_views.py
+++ b/lms/djangoapps/verify_student/tests/test_views.py
@@ -24,7 +24,7 @@ from django.test.client import Client, RequestFactory
from django.test.utils import override_settings
from mock import Mock, patch
from nose.plugins.attrib import attr
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
+from opaque_keys.edx.keys import CourseKey
from opaque_keys.edx.locator import CourseLocator
from waffle.testutils import override_switch
@@ -35,6 +35,7 @@ from course_modes.models import CourseMode
from course_modes.tests.factories import CourseModeFactory
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification, VerificationDeadline
from lms.djangoapps.verify_student.views import PayAndVerifyView, checkout_with_ecommerce_service, render_to_response
+from commerce.utils import EcommerceService
from openedx.core.djangoapps.embargo.test_utils import restrict_course
from openedx.core.djangoapps.theming.tests.test_util import with_comprehensive_theme
from openedx.core.djangoapps.user_api.accounts.api import get_account_settings
@@ -141,12 +142,17 @@ class TestPayAndVerifyView(UrlResetMixin, ModuleStoreTestCase, XssTestMixin):
)
configuration = CommerceConfiguration.objects.create(checkout_on_ecommerce_service=True)
checkout_page = configuration.MULTIPLE_ITEMS_BASKET_PAGE_URL
+ checkout_page += "?utm_source=test"
httpretty.register_uri(httpretty.GET, "{}{}".format(TEST_PUBLIC_URL_ROOT, checkout_page))
course = self._create_course('verified', sku=sku)
self._enroll(course.id)
- response = self._get_page('verify_student_start_flow', course.id, expected_status_code=302)
- expected_page = '{}{}?sku={}'.format(TEST_PUBLIC_URL_ROOT, checkout_page, sku)
+
+ # Verify that utm params are included in the url used for redirect
+ url_with_utm = 'http://www.example.com/basket/add/?utm_source=test&sku=TESTSKU'
+ with mock.patch.object(EcommerceService, 'get_checkout_page_url', return_value=url_with_utm):
+ response = self._get_page('verify_student_start_flow', course.id, expected_status_code=302)
+ expected_page = '{}{}&sku={}'.format(TEST_PUBLIC_URL_ROOT, checkout_page, sku)
self.assertRedirects(response, expected_page, fetch_redirect_response=False)
@ddt.data(
@@ -1304,7 +1310,7 @@ class TestCreateOrderView(ModuleStoreTestCase):
self.course_id = 'Robot/999/Test_Course'
self.course = CourseFactory.create(org='Robot', number='999', display_name='Test Course')
verified_mode = CourseMode(
- course_id=SlashSeparatedCourseKey("Robot", "999", 'Test_Course'),
+ course_id=CourseKey.from_string("Robot/999/Test_Course"),
mode_slug="verified",
mode_display_name="Verified Certificate",
min_price=50
diff --git a/lms/djangoapps/verify_student/views.py b/lms/djangoapps/verify_student/views.py
index ea2819ba31..5c305873b1 100644
--- a/lms/djangoapps/verify_student/views.py
+++ b/lms/djangoapps/verify_student/views.py
@@ -520,8 +520,7 @@ class PayAndVerifyView(View):
# Redirect if necessary, otherwise implicitly return None
if url is not None:
- if waffle.switch_is_active('add-utm-params'):
- url = self.add_utm_params_to_url(url)
+ url = self.add_utm_params_to_url(url)
return redirect(url)
def _get_paid_mode(self, course_key):
diff --git a/lms/envs/aws.py b/lms/envs/aws.py
index 63d28a9767..69bbf05107 100644
--- a/lms/envs/aws.py
+++ b/lms/envs/aws.py
@@ -842,6 +842,10 @@ PROFILE_IMAGE_SECRET_KEY = AUTH_TOKENS.get('PROFILE_IMAGE_SECRET_KEY', PROFILE_I
PROFILE_IMAGE_MAX_BYTES = ENV_TOKENS.get('PROFILE_IMAGE_MAX_BYTES', PROFILE_IMAGE_MAX_BYTES)
PROFILE_IMAGE_MIN_BYTES = ENV_TOKENS.get('PROFILE_IMAGE_MIN_BYTES', PROFILE_IMAGE_MIN_BYTES)
PROFILE_IMAGE_DEFAULT_FILENAME = 'images/profiles/default'
+PROFILE_IMAGE_SIZES_MAP = ENV_TOKENS.get(
+ 'PROFILE_IMAGE_SIZES_MAP',
+ PROFILE_IMAGE_SIZES_MAP
+)
# EdxNotes config
@@ -1012,9 +1016,11 @@ ICP_LICENSE = ENV_TOKENS.get('ICP_LICENSE', None)
############## Settings for CourseGraph ############################
COURSEGRAPH_JOB_QUEUE = ENV_TOKENS.get('COURSEGRAPH_JOB_QUEUE', LOW_PRIORITY_QUEUE)
-############## Settings for Profile Image Size ######################
+########################## Parental controls config #######################
-PROFILE_IMAGE_SIZES_MAP = ENV_TOKENS.get(
- 'PROFILE_IMAGE_SIZES_MAP',
- PROFILE_IMAGE_SIZES_MAP
+# The age at which a learner no longer requires parental consent, or None
+# if parental consent is never required.
+PARENTAL_CONSENT_AGE_LIMIT = ENV_TOKENS.get(
+ 'PARENTAL_CONSENT_AGE_LIMIT',
+ PARENTAL_CONSENT_AGE_LIMIT
)
diff --git a/lms/envs/bok_choy_docker.env.json b/lms/envs/bok_choy_docker.env.json
index 7858095afa..137ebfa4aa 100644
--- a/lms/envs/bok_choy_docker.env.json
+++ b/lms/envs/bok_choy_docker.env.json
@@ -56,7 +56,7 @@
}
},
"COMMENTS_SERVICE_KEY": "password",
- "COMMENTS_SERVICE_URL": "http://localhost:4567",
+ "COMMENTS_SERVICE_URL": "http://edx.devstack.forum:4567",
"CONTACT_EMAIL": "info@example.com",
"DEFAULT_FEEDBACK_EMAIL": "feedback@example.com",
"DEFAULT_FROM_EMAIL": "registration@example.com",
diff --git a/lms/envs/common.py b/lms/envs/common.py
index d87c336fc1..ed92ba16ca 100644
--- a/lms/envs/common.py
+++ b/lms/envs/common.py
@@ -2241,8 +2241,8 @@ INSTALLED_APPS = (
# Unusual migrations
'database_fixups',
- # Waffle related utilities
'openedx.core.djangoapps.waffle_utils',
+ 'openedx.core.djangoapps.schedules',
# Features
'openedx.features.course_bookmarks',
@@ -2251,7 +2251,6 @@ INSTALLED_APPS = (
'openedx.features.enterprise_support',
'openedx.features.learner_profile',
- # Experiments
'experiments',
# DRF filters
@@ -3005,6 +3004,12 @@ PROFILE_IMAGE_DEFAULT_FILE_EXTENSION = 'png'
PROFILE_IMAGE_SECRET_KEY = 'placeholder secret key'
PROFILE_IMAGE_MAX_BYTES = 1024 * 1024
PROFILE_IMAGE_MIN_BYTES = 100
+PROFILE_IMAGE_SIZES_MAP = {
+ 'full': 500,
+ 'large': 120,
+ 'medium': 50,
+ 'small': 30
+}
# Sets the maximum number of courses listed on the homepage
# If set to None, all courses will be listed on the homepage
@@ -3246,12 +3251,3 @@ COURSES_API_CACHE_TIMEOUT = 3600 # Value is in seconds
############## Settings for CourseGraph ############################
COURSEGRAPH_JOB_QUEUE = LOW_PRIORITY_QUEUE
-
-############## Settings for Profile Image Size ######################
-
-PROFILE_IMAGE_SIZES_MAP = {
- 'full': 500,
- 'large': 120,
- 'medium': 50,
- 'small': 30
-}
diff --git a/lms/envs/devstack.py b/lms/envs/devstack.py
index c817cae8a8..9169f9a308 100644
--- a/lms/envs/devstack.py
+++ b/lms/envs/devstack.py
@@ -83,7 +83,6 @@ DEBUG_TOOLBAR_PANELS = (
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': 'lms.envs.devstack.should_show_debug_toolbar',
- 'JQUERY_URL': None,
}
@@ -91,9 +90,6 @@ def should_show_debug_toolbar(request):
# We always want the toolbar on devstack unless running tests from another Docker container
if request.get_host().startswith('edx.devstack.lms:'):
return False
- # Only display for non-ajax requests.
- if request.is_ajax():
- return False
return True
########################### PIPELINE #################################
diff --git a/lms/envs/devstack_docker.py b/lms/envs/devstack_docker.py
index c8db837fcd..60737aba0d 100644
--- a/lms/envs/devstack_docker.py
+++ b/lms/envs/devstack_docker.py
@@ -17,6 +17,8 @@ LMS_ROOT_URL = 'http://{}'.format(LMS_BASE)
ECOMMERCE_PUBLIC_URL_ROOT = 'http://localhost:18130'
ECOMMERCE_API_URL = 'http://edx.devstack.ecommerce:18130/api/v2'
+COMMENTS_SERVICE_URL = 'http://edx.devstack.forum:4567'
+
ENTERPRISE_API_URL = '{}/enterprise/api/v1/'.format(LMS_ROOT_URL)
ENABLE_ENTERPRISE_INTEGRATION = False
diff --git a/lms/static/js/i18n/ar/djangojs.js b/lms/static/js/i18n/ar/djangojs.js
index a78d5f919e..e7b40d6342 100644
--- a/lms/static/js/i18n/ar/djangojs.js
+++ b/lms/static/js/i18n/ar/djangojs.js
@@ -193,15 +193,10 @@
"A valid email address is required": "\u064a\u062c\u0628 \u0625\u062f\u062e\u0627\u0644 \u0639\u0646\u0648\u0627\u0646 \u0635\u062d\u064a\u062d \u0644\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a.",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "\u0623 \u0628 \u062a \u062b \u062c \u062d \u062e \u062f \u0630 \u0631 \u0632 \u0633 \u0634 \u0635 \u0636 \u0637 \u0638 \u0639 \u063a \u0641 \u0642 \u0643 \u0644 \u0645 \u0646 \u0647\u0640 \u0648 \u064a",
"Abbreviation": "\u0627\u0644\u0627\u062e\u062a\u0635\u0627\u0631",
- "About Me": "\u0646\u0628\u0630\u0629 \u0639\u0646\u0651\u064a",
"About You": "\u0646\u0628\u0630\u0629 \u0639\u0646\u0643",
- "About me": "\u0646\u0628\u0630\u0629 \u0639\u0646\u064a",
- "Accomplishments": "\u0627\u0644\u0625\u0646\u062c\u0627\u0632\u0627\u062a",
- "Accomplishments Pagination": "\u062a\u0631\u0642\u064a\u0645 \u0635\u0641\u062d\u0627\u062a \u0627\u0644\u0625\u0646\u062c\u0627\u0632\u0627\u062a",
"Account Information": "\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0628",
"Account Not Activated": "\u0627\u0644\u062d\u0633\u0627\u0628 \u063a\u064a\u0631 \u0645\u0641\u0639\u0651\u0644",
"Account Settings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0628",
- "Account Settings page.": "\u0635\u0641\u062d\u0629 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0628",
"Action": "\u0627\u0644\u0625\u062c\u0631\u0627\u0621",
"Action required: Enter a valid date.": "\u0625\u062c\u0631\u0627\u0621 \u0644\u0627\u0632\u0645: \u0623\u062f\u062e\u0644 \u062a\u0627\u0631\u064a\u062e\u0627\u064b \u0635\u0627\u0644\u062d\u0627\u064b.",
"Actions": "\u0627\u0644\u0625\u062c\u0631\u0627\u0621\u0627\u062a",
@@ -213,7 +208,6 @@
"Add Additional Signatory": "\u0625\u0636\u0627\u0641\u0629 \u0645\u064f\u0648\u064e\u0642\u0651\u0639 \u0625\u0636\u0627\u0641\u064a",
"Add Cohort": "\u0625\u0636\u0627\u0641\u0629 \u0634\u0639\u0628\u0629",
"Add Component:": "\u0625\u0636\u0627\u0641\u0629 \u0645\u0643\u0648\u0651\u0650\u0646:",
- "Add Country": "\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0628\u0644\u062f",
"Add New Component": "\u0625\u0636\u0627\u0641\u0629 \u0645\u0643\u0648\u0651\u0650\u0646 \u062c\u062f\u064a\u062f",
"Add URLs for additional versions": "\u0625\u0636\u0627\u0641\u0629 \u0631\u0648\u0627\u0628\u0637 \u0644\u0644\u0646\u0633\u062e\u0627\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u064a\u0629",
"Add a Chapter": "\u0625\u0636\u0627\u0641\u0629 \u0641\u0635\u0644",
@@ -224,7 +218,6 @@
"Add a learning outcome here": "\u0625\u0636\u0627\u0641\u0629 \u0646\u062a\u064a\u062c\u0629 \u062a\u0639\u0644\u064a\u0645\u064a\u0629 \u0647\u0646\u0627",
"Add a response:": "\u0623\u0636\u0641 \u0631\u062f\u0627\u064b:",
"Add another group": "\u0625\u0636\u0627\u0641\u0629 \u0645\u062c\u0645\u0648\u0639\u0629 \u0623\u062e\u0631\u0649",
- "Add language": "\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0644\u063a\u0629",
"Add notes about this learner": "\u0623\u0636\u0641 \u0645\u0644\u0627\u062d\u0638\u0627\u062a \u062a\u062e\u0635\u0651 \u0647\u0630\u0627 \u0627\u0644\u0645\u062a\u0639\u0644\u0651\u0645",
"Add to Dictionary": "\u0623\u0636\u0641 \u0625\u0644\u0649 \u0627\u0644\u0642\u0627\u0645\u0648\u0633",
"Add to Exception List": "\u0625\u0636\u0641 \u0625\u0644\u0649 \u0644\u0627\u0626\u062d\u0629 \u0627\u0644\u0627\u0633\u062a\u062b\u0646\u0627\u0621\u0627\u062a",
@@ -376,7 +369,6 @@
"Change Manually": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631 \u064a\u062f\u0648\u064a\u0651\u064b\u0627 ",
"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}": "\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0644\u0640 {display_name}",
"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",
@@ -606,7 +598,6 @@
"Edit Membership": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0639\u0636\u0648\u064a\u0651\u0629",
"Edit Team": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0641\u0631\u064a\u0642",
"Edit Your Name": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0633\u0645\u0643 ",
- "Edit the name": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0627\u0633\u0645",
"Edit this certificate?": "\u0647\u0644 \u062a\u0631\u064a\u062f \u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0634\u0647\u0627\u062f\u0629\u061f",
"Edit your post below.": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0646\u0634\u0648\u0631 \u0623\u062f\u0646\u0627\u0647.",
"Editable": "\u0642\u0627\u0628\u0644 \u0644\u0644\u062a\u0639\u062f\u064a\u0644",
@@ -736,7 +727,6 @@
"Free text notes": "\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0645\u0643\u062a\u0648\u0628\u0629 \u062d\u0631\u0629",
"Frequently Asked Questions": "\u0627\u0644\u0623\u0633\u0626\u0644\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629",
"Full Name": "\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0643\u0627\u0645\u0644",
- "Full Profile": "\u0643\u0627\u0645\u0644 \u0645\u0644\u0641\u0651\u064a \u0627\u0644\u0634\u062e\u0635\u064a",
"Fullscreen": "\u0639\u0631\u0636 \u0628\u0634\u0627\u0634\u0629 \u0643\u0627\u0645\u0644\u0629",
"Fully Supported": "\u0645\u062f\u0639\u0648\u0645 \u062a\u0645\u0627\u0645\u0627\u064b",
"Gender": "\u0627\u0644\u062c\u0646\u0633",
@@ -898,7 +888,6 @@
"License Display": "\u0639\u0631\u0636 \u0627\u0644\u0625\u062c\u0627\u0632\u0629",
"License Type": "\u0646\u0648\u0639 \u0627\u0644\u0625\u062c\u0627\u0632\u0629",
"Limit Access": "\u0627\u0644\u062d\u062f\u0651 \u0645\u0646 \u0635\u0644\u0627\u062d\u064a\u0629 \u0627\u0644\u0648\u0635\u0648\u0644",
- "Limited Profile": "\u0645\u0644\u0641\u0651\u064a \u0627\u0644\u0634\u062e\u0635\u064a \u0627\u0644\u0645\u062d\u062f\u0648\u062f",
"Link Description": "\u0648\u0635\u0641 \u0627\u0644\u0631\u0627\u0628\u0637",
"Link Your Account": "\u0627\u0631\u0628\u0637 \u062d\u0633\u0627\u0628\u0643",
"Link types should be unique.": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u0643\u0648\u0646 \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0631\u0648\u0627\u0628\u0637 \u0641\u0631\u064a\u062f\u0629.",
@@ -1134,9 +1123,6 @@
"Professional Certificate for {courseName}": "\u0634\u0647\u0627\u062f\u0629 \u0627\u062d\u062a\u0631\u0627\u0641\u064a\u0629 \u0644\u0640 {courseName}",
"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": "\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a",
- "Profile Image": "\u0635\u0648\u0631\u0629 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a",
- "Profile image for {username}": "\u0635\u0648\u0631\u0629 \u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645 {username}",
"Promote another member to Admin to remove your admin rights": "\u064a\u064f\u0631\u062c\u0649 \u062a\u0631\u0642\u064a\u0629 \u0639\u0636\u0648 \u0622\u062e\u0631 \u0625\u0644\u0649 \u062f\u0631\u062c\u0629 \u0645\u0634\u0631\u0650\u0641 \u0644\u062a\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u0625\u0644\u063a\u0627\u0621 \u062d\u0642\u0648\u0642\u0643 \u0643\u0645\u0634\u0631\u0650\u0641.",
"Provisional": "\u0645\u0624\u0642\u062a",
"Provisionally Supported": "\u0645\u062f\u0639\u0648\u0645 \u0645\u0624\u0642\u062a\u0627\u064b",
@@ -1400,7 +1386,6 @@
"Team name cannot have more than 255 characters.": "\u064a\u062c\u0628 \u0623\u0644\u0627 \u064a\u062a\u062c\u0627\u0648\u0632 \u0627\u0633\u0645 \u0627\u0644\u0641\u0631\u064a\u0642 255 \u062d\u0631\u0641\u064b\u0627.",
"Teams": "\u0627\u0644\u0641\u0650\u0631\u064e\u0642",
"Teams Pagination": "\u062a\u0631\u0642\u064a\u0645 \u0635\u0641\u062d\u0627\u062a \u0627\u0644\u0641\u0650\u0631\u0642",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\u062a\u0641\u0636\u0651\u0644 \u0628\u0625\u0639\u0637\u0627\u0621 \u0627\u0644\u0645\u062a\u0639\u0644\u0651\u0645\u064a\u0646 \u0627\u0644\u0622\u062e\u0631\u064a\u0646 \u0641\u0643\u0631\u0629 \u0639\u0627\u0645\u0629 \u0639\u0646\u0643: \u0645\u0643\u0627\u0646 \u0633\u0643\u0646\u0643\u060c \u0627\u0647\u062a\u0645\u0627\u0645\u0627\u062a\u0643\u060c \u0633\u0628\u0628 \u0627\u0644\u062a\u062d\u0627\u0642\u0643 \u0628\u0647\u0630\u0647 \u0627\u0644\u0645\u0633\u0627\u0642\u0627\u062a\u060c \u0623\u0648 \u0645\u0627 \u062a\u0631\u063a\u0628 \u0641\u064a \u062a\u0639\u0644\u0651\u0645\u0647.",
"Templates": "\u0646\u0645\u0627\u0630\u062c",
"Text": "\u0646\u0635\u0651",
"Text color": "\u0644\u0648\u0646 \u0627\u0644\u0646\u0635",
@@ -1640,14 +1625,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "\u064a\u064f\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0643\u0627\u0645\u064a\u0631\u062a\u0643 \u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0644\u0648\u062c\u0647\u0643. \u062b\u0645\u0651 \u0633\u0646\u0637\u0627\u0628\u0642 \u0647\u0630\u0647 \u0627\u0644\u0635\u0648\u0631\u0629 \u0645\u0639 \u0635\u0648\u0631\u0629 \u0648\u062c\u0647\u0643 \u0648\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0645\u0648\u062c\u0648\u062f\u064a\u0646 \u0641\u064a \u062d\u0633\u0627\u0628\u0643. ",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "\u0627\u0633\u062a\u062e\u062f\u0645 \u0643\u0627\u0645\u064a\u0631\u062a\u0643 \u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0644\u0648\u062c\u0647\u0643. \u062b\u0645\u0651 \u0633\u0646\u0637\u0627\u0628\u0642 \u0647\u0630\u0647 \u0627\u0644\u0635\u0648\u0631\u0629 \u0645\u0639 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0645\u0648\u062c\u0648\u062f\u0629 \u0639\u0644\u0649 \u0628\u0637\u0627\u0642\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629. ",
"Used": "\u0645\u0633\u062a\u062e\u062f\u064e\u0645",
- "Used in {count} unit": [
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629",
- "\u0645\u0633\u062a\u062e\u062f\u0645 \u0641\u064a {count} \u0648\u062d\u062f\u0629"
- ],
"User": "\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645",
"User Email": "\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0627\u0644\u062e\u0627\u0635 \u0628\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645",
"Username": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645",
@@ -1772,12 +1749,10 @@
"You haven't added any assets to this course yet.": "\u0644\u0645 \u062a\u064f\u0636\u0650\u0641 \u0623\u064a \u0645\u0648\u0627\u062f \u0645\u0644\u062d\u0642\u0629 \u0628\u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0642 \u0628\u0639\u062f. ",
"You haven't added any content to this course yet.": "\u0644\u0645 \u062a\u064f\u0636\u0650\u0641 \u0623\u064a \u0645\u062d\u062a\u0648\u0649 \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0642 \u0628\u0639\u062f.",
"You haven't added any textbooks to this course yet.": "\u0644\u0645 \u062a\u064f\u0636\u0650\u0641 \u0628\u0639\u062f \u0623\u064a \u0643\u062a\u0628 \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0642.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0639\u0645\u0631\u0643 \u0645\u0627 \u0641\u0648\u0642 13 \u0633\u0646\u0629 \u0644\u062a\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u0645\u0634\u0627\u0631\u0643\u0629 \u0635\u0641\u062d\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u0628\u0623\u0643\u0645\u0644\u0647\u0627. \u0641\u0625\u0630\u0627 \u0643\u0627\u0646 \u0639\u0645\u0631\u0643 \u0645\u0627 \u0641\u0648\u0642 13 \u0633\u0646\u0629\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u062a\u0623\u0643\u0651\u062f \u0645\u0646 \u0623\u0646\u0651\u0643 \u062d\u062f\u0651\u062f\u062a \u0633\u0646\u0629 \u0645\u064a\u0644\u0627\u062f\u0643 \u0641\u064a \u0635\u0641\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a {account_settings_page_link}.",
"You must enter a valid email address in order to add a new team member": "\u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u0623\u0646 \u062a\u064f\u062f\u062e\u0650\u0644 \u0639\u0646\u0648\u0627\u0646 \u0635\u062d\u064a\u062d \u0644\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u062a\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u0625\u0636\u0627\u0641\u0629 \u0639\u0636\u0648 \u062c\u062f\u064a\u062f \u0625\u0644\u0649 \u0627\u0644\u0641\u0631\u064a\u0642.",
"You must sign out and sign back in before your language changes take effect.": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u0633\u062c\u0651\u0644 \u062e\u0631\u0648\u062c\u0643 \u062b\u0645\u0651 \u062a\u064f\u0639\u064a\u062f \u062a\u0633\u062c\u064a\u0644 \u062f\u062e\u0648\u0644\u0643 \u0644\u064a\u062c\u0631\u064a \u062a\u0641\u0639\u064a\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u062a\u064a \u0623\u062f\u062e\u0644\u062a\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0644\u063a\u0629.",
"You must specify a name": "\u0639\u0644\u064a\u0643 \u0623\u0646 \u062a\u062d\u062f\u0651\u062f \u0627\u0633\u0645\u064b\u0627.",
"You must specify a name for the cohort": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u062d\u062f\u0651\u062f \u0627\u0633\u0645\u064b\u0627 \u0644\u0644\u0634\u0639\u0628\u0629.",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\u064a\u062c\u0628 \u0623\u0646 \u062a\u062d\u062f\u0651\u062f \u0633\u0646\u0629 \u0645\u064a\u0644\u0627\u062f\u0643 \u0642\u0628\u0644 \u0623\u0646 \u062a\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u0645\u0634\u0627\u0631\u0643\u0629 \u0635\u0641\u062d\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u0628\u0623\u0643\u0645\u0644\u0647\u0627. \u0648\u0644\u062a\u062d\u062f\u0651\u062f \u0633\u0646\u0629 \u0645\u064a\u0644\u0627\u062f\u0643\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u0625\u0644\u0649 \u0635\u0641\u062d\u0629 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0628 {account_settings_page_link}.",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062c\u0647\u0627\u0632 \u0643\u0648\u0645\u0628\u064a\u0648\u062a\u0631 \u0645\u0632\u0648\u0651\u064e\u062f \u0628\u0643\u0627\u0645\u064a\u0631\u0627. \u0648\u0639\u0646\u062f \u0627\u0633\u062a\u0644\u0627\u0645\u0643 \u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0633\u062a\u0639\u062f\u0627\u062f \u0645\u0646 \u0627\u0644\u0645\u062a\u0635\u0641\u0651\u062d\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u062a\u0623\u0643\u0651\u062f \u0645\u0646 \u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0631\u062e\u0635\u0629 \u0642\u064a\u0627\u062f\u0629 \u0623\u0648 \u062c\u0648\u0627\u0632 \u0633\u0641\u0631 \u0623\u0648 \u063a\u064a\u0631\u0647\u0627 \u0645\u0646 \u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0627\u0644\u0634\u062e\u0635\u064a\u0629 \u0627\u0644\u0635\u0627\u062f\u0631\u0629 \u0639\u0646 \u0627\u0644\u062d\u0643\u0648\u0645\u0629 \u0648\u0627\u0644\u062a\u064a \u062a\u062d\u0645\u0644 \u0627\u0633\u0645\u0643 \u0648\u0635\u0648\u0631\u062a\u0643.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0628\u0637\u0627\u0642\u0629 \u0634\u062e\u0635\u064a\u0629 \u062a\u062d\u0645\u0644 \u0627\u0633\u0645\u0643 \u0648\u0635\u0648\u0631\u062a\u0643. \u0648\u064a\u0645\u0643\u0646 \u062a\u0642\u062f\u064a\u0645 \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 \u0623\u062e\u0631\u0649 \u0635\u0627\u062f\u0631\u0629 \u0639\u0646 \u0627\u0644\u062d\u0643\u0648\u0645\u0629\u060c \u0641\u062c\u0645\u064a\u0639 \u0647\u0630\u0647 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0645\u0642\u0628\u0648\u0644\u0629. ",
@@ -1944,7 +1919,6 @@
"{numVotes} \u0635\u0648\u062a"
],
"{organization}\\'s logo": "\u0634\u0639\u0627\u0631 \u0627\u0644{organization}",
- "{platform_name} learners can see my:": "\u064a\u0645\u0643\u0646 \u0644\u0644\u0645\u062a\u0639\u0644\u0651\u0645\u064a\u0646 \u0641\u064a \u0645\u0646\u0635\u0651\u0629 {platform_name} \u0631\u0624\u064a\u0629:",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}\u062a\u062d\u0630\u064a\u0631:{screen_reader_end} \u062a\u0639\u0630\u0651\u0631 \u0625\u064a\u062c\u0627\u062f \u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0645\u062d\u062a\u0648\u0649.",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}\u062a\u062d\u0630\u064a\u0631:{screen_reader_end} \u062d\u0651\u0630\u0641\u062a \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0627\u0644\u0645\u062d\u062f\u0651\u062f\u0629 \u0633\u0627\u0628\u0642\u064b\u0627. \u064a\u064f\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062d\u062a\u0648\u0649 \u0623\u062e\u0631\u0649.",
"{start_strong}{total}{end_strong} words submitted in total.": "\u0625\u062c\u0645\u0627\u0644\u064a \u0639\u062f\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u062a\u064a \u062a\u0645 \u0627\u0631\u0633\u0627\u0644\u0647\u0627 {start_strong}{total}{end_strong}.",
diff --git a/lms/static/js/i18n/eo/djangojs.js b/lms/static/js/i18n/eo/djangojs.js
index ef58f0bf45..964edd9576 100644
--- a/lms/static/js/i18n/eo/djangojs.js
+++ b/lms/static/js/i18n/eo/djangojs.js
@@ -1451,6 +1451,7 @@
"Thanks for returning to verify your ID in: {courseName}": "Th\u00e4nks f\u00f6r r\u00e9t\u00fcrn\u00efng t\u00f6 v\u00e9r\u00eff\u00fd \u00fd\u00f6\u00fcr \u00ccD \u00efn: {courseName} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Th\u00e9 \u00dbRL \u00fd\u00f6\u00fc \u00e9nt\u00e9r\u00e9d s\u00e9\u00e9ms t\u00f6 \u00df\u00e9 \u00e4n \u00e9m\u00e4\u00efl \u00e4ddr\u00e9ss. D\u00f6 \u00fd\u00f6\u00fc w\u00e4nt t\u00f6 \u00e4dd th\u00e9 r\u00e9q\u00fc\u00efr\u00e9d m\u00e4\u00eflt\u00f6: pr\u00e9f\u00efx? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #",
"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "Th\u00e9 \u00dbRL \u00fd\u00f6\u00fc \u00e9nt\u00e9r\u00e9d s\u00e9\u00e9ms t\u00f6 \u00df\u00e9 \u00e4n \u00e9xt\u00e9rn\u00e4l l\u00efnk. D\u00f6 \u00fd\u00f6\u00fc w\u00e4nt t\u00f6 \u00e4dd th\u00e9 r\u00e9q\u00fc\u00efr\u00e9d http:// pr\u00e9f\u00efx? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #",
+ "The certificate available date must be later than the enrollment start date.": "Th\u00e9 \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9 \u00e4v\u00e4\u00efl\u00e4\u00dfl\u00e9 d\u00e4t\u00e9 m\u00fcst \u00df\u00e9 l\u00e4t\u00e9r th\u00e4n th\u00e9 \u00e9nr\u00f6llm\u00e9nt st\u00e4rt d\u00e4t\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#",
"The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "Th\u00e9 \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9 f\u00f6r th\u00efs l\u00e9\u00e4rn\u00e9r h\u00e4s \u00df\u00e9\u00e9n r\u00e9-v\u00e4l\u00efd\u00e4t\u00e9d \u00e4nd th\u00e9 s\u00fdst\u00e9m \u00efs r\u00e9-r\u00fcnn\u00efng th\u00e9 gr\u00e4d\u00e9 f\u00f6r th\u00efs l\u00e9\u00e4rn\u00e9r. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #",
"The cohort cannot be added": "Th\u00e9 \u00e7\u00f6h\u00f6rt \u00e7\u00e4nn\u00f6t \u00df\u00e9 \u00e4dd\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#",
"The cohort cannot be saved": "Th\u00e9 \u00e7\u00f6h\u00f6rt \u00e7\u00e4nn\u00f6t \u00df\u00e9 s\u00e4v\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#",
@@ -1586,6 +1587,7 @@
"This team does not have any members.": "Th\u00efs t\u00e9\u00e4m d\u00f6\u00e9s n\u00f6t h\u00e4v\u00e9 \u00e4n\u00fd m\u00e9m\u00df\u00e9rs. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#",
"This team is full.": "Th\u00efs t\u00e9\u00e4m \u00efs f\u00fcll. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#",
"This thread is closed.": "Th\u00efs thr\u00e9\u00e4d \u00efs \u00e7l\u00f6s\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#",
+ "This unit has validation issues.": "Th\u00efs \u00fcn\u00eft h\u00e4s v\u00e4l\u00efd\u00e4t\u00ef\u00f6n \u00efss\u00fc\u00e9s. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454#",
"This vote could not be processed. Refresh the page and try again.": "Th\u00efs v\u00f6t\u00e9 \u00e7\u00f6\u00fcld n\u00f6t \u00df\u00e9 pr\u00f6\u00e7\u00e9ss\u00e9d. R\u00e9fr\u00e9sh th\u00e9 p\u00e4g\u00e9 \u00e4nd tr\u00fd \u00e4g\u00e4\u00efn. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#",
"This {parentCategory} has no {childCategory}": "Th\u00efs {parentCategory} h\u00e4s n\u00f6 {childCategory} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442,#",
"Thumbnail": "Th\u00fcm\u00dfn\u00e4\u00efl \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#",
diff --git a/lms/static/js/i18n/es-419/djangojs.js b/lms/static/js/i18n/es-419/djangojs.js
index 8d2568f239..8823e143ac 100644
--- a/lms/static/js/i18n/es-419/djangojs.js
+++ b/lms/static/js/i18n/es-419/djangojs.js
@@ -137,15 +137,10 @@
"A valid email address is required": "Un email correcto es requerido.",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "ABCDEFGHIJKLMN\u00d1OPQRSTUVWXYZ",
"Abbreviation": "Abreviatura",
- "About Me": "Sobre M\u00ed",
"About You": "Acerca de usted",
- "About me": "Sobre m\u00ed",
- "Accomplishments": "Logros",
- "Accomplishments Pagination": "Paginaci\u00f3n de Logros",
"Account Information": "Informaci\u00f3n de la cuenta",
"Account Not Activated": "Cuenta no activada",
"Account Settings": "Configuraci\u00f3n de cuenta",
- "Account Settings page.": "P\u00e1gina de configuraci\u00f3n de cuenta.",
"Action": "Acci\u00f3n",
"Action required: Enter a valid date.": "Acci\u00f3n requerida: Introduzca una fecha v\u00e1lida.",
"Actions": "Acciones",
@@ -157,7 +152,6 @@
"Add Additional Signatory": "A\u00f1adir signatario adicional",
"Add Cohort": "A\u00f1adir cohorte",
"Add Component:": "A\u00f1adir Componente:",
- "Add Country": "A\u00f1adir pa\u00eds",
"Add New Component": "A\u00f1adir nuevo Componente",
"Add URLs for additional versions": "A\u00f1ada URLs para las versiones adicionales",
"Add a Chapter": "A\u00f1adir cap\u00edtulo",
@@ -168,7 +162,6 @@
"Add a learning outcome here": "Agregar Resultado de aprendizaje",
"Add a response:": "A\u00f1ada su respuesta:",
"Add another group": "A\u00f1adir nuevo grupo",
- "Add language": "A\u00f1adir idioma",
"Add notes about this learner": "A\u00f1ada una nota sobre este estudiante",
"Add to Dictionary": "Agregar al diccionario",
"Add to Exception List": "Agregar a lista de excepciones",
@@ -324,7 +317,6 @@
"Change Manually": "Cambiar Manualmente",
"Change My Email Address": "Cambiar mi direcci\u00f3n de correo electr\u00f3nico",
"Change image": "Cambiar imagen",
- "Change the settings for {display_name}": "Cambiar los ajustes para {display_name}",
"Chapter Asset": "Recursos del cap\u00edtulo",
"Chapter Name": "Nombre del cap\u00edtulo",
"Chapter information": "Informaci\u00f3n del cap\u00edtulo",
@@ -547,7 +539,6 @@
"Edit Membership": "Editar membres\u00eda",
"Edit Team": "Editar Equipo",
"Edit Your Name": "Edite su nombre",
- "Edit the name": "Editar el nombre",
"Edit this certificate?": "\u00bfEditar este certificado?",
"Edit your post below.": "Edite su publicaci\u00f3n a continuaci\u00f3n.",
"Editable": "Editable",
@@ -682,7 +673,6 @@
"Free text notes": "Notas libres",
"Frequently Asked Questions": "Preguntas frecuentes",
"Full Name": "Nombre completo",
- "Full Profile": "Perfil completo",
"Fullscreen": "Pantalla completa",
"Fully Supported": "Completamente soportado",
"Gender": "G\u00e9nero",
@@ -845,7 +835,6 @@
"License Display": "Muestra de la Licencia",
"License Type": "Tipo de Licencia",
"Limit Access": "Restrinja permisos",
- "Limited Profile": "Perfil limitado",
"Link Description": "Descripci\u00f3n del v\u00ednculo",
"Link Your Account": "Vincular tu cuenta",
"Link types should be unique.": "Los tipos de v\u00ednculos deben ser \u00fanicos.",
@@ -1084,9 +1073,6 @@
"Professional Certificate for {courseName}": "Certificado Profesional para {courseName}",
"Professional Education": "Educaci\u00f3n profesional",
"Professional Education Verified Certificate": "Certificado Verificado de Educaci\u00f3n Profesional",
- "Profile": "Perfil",
- "Profile Image": "Foto de perfil",
- "Profile image for {username}": "Foto de perfil para {username}",
"Promote another member to Admin to remove your admin rights": "Promueva a otro miembro del equipo a administrador si quiere quitar sus propios privilegios de administrador",
"Provisional": "Provisional",
"Provisionally Supported": "Soportado de forma provisional",
@@ -1347,7 +1333,6 @@
"Team name cannot have more than 255 characters.": "El nombre del equipo no puede tener m\u00e1s de 255 caracteres.",
"Teams": "Equipos",
"Teams Pagination": "Paginaci\u00f3n de Equipos",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "Comparte con otros usuarios algo sobre ti: donde vives, cuales son tus intereses, porque est\u00e1s tomando estos cursos, o cuales son tus expectativas de aprendizaje.",
"Templates": "Plantillas",
"Terms of Service and Honor Code": "T\u00e9rminos del servicio y c\u00f3digo de honor",
"Text": "Texto",
@@ -1609,10 +1594,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "Use su c\u00e1mara web para tomar una fotograf\u00eda de su documento de identidad. Usaremos esta foto para verificarla contra la fotograf\u00eda de su cara y el nombre de su cuenta.",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "Use su c\u00e1mara web para tomar una fotograf\u00eda de su cara. Usaremos esta foto para verificarla contra la fotograf\u00eda de su documento de identificaci\u00f3n.",
"Used": "Utilizado",
- "Used in {count} unit": [
- "Usado en {count} unidades",
- "Usado en {count} unidades"
- ],
"User": "Usuario",
"User Email": "Correo electr\u00f3nico del usuario",
"Username": "Nombre de usuario",
@@ -1740,12 +1721,10 @@
"You haven't added any assets to this course yet.": "No ha a\u00f1adido a\u00fan ning\u00fan recurso a este curso.",
"You haven't added any content to this course yet.": "Todav\u00eda no ha a\u00f1adido ning\u00fan contenido a este curso.",
"You haven't added any textbooks to this course yet.": "No ha a\u00f1adido a\u00fan ning\u00fan libro de texto a este curso.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "Debes tener 13 a\u00f1os o m\u00e1s para compartir un perfil completo. Si tienes m\u00e1s de esta edad, aseg\u00farate que has especificado un a\u00f1o de nacimiento en {account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "Se debe introducir un email valido para adicionar un nuevo miembro en el equipo. ",
"You must sign out and sign back in before your language changes take effect.": "Debes cerrar sesi\u00f3n y volver a iniciar para que se aplique el cambio de idioma",
"You must specify a name": "Debe especificar un nombre",
"You must specify a name for the cohort": "Debes especificar un nombre para el cohorte",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "Debes especificar un a\u00f1o de nacimiento antes de poder compartir tu perfil completo. Para definir un a\u00f1o de nacimiento, visita {account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "Necesita un equipo que tenga una webcam. Cuando reciba un mensaje desde su navegador web, aseg\u00farese de permitir el acceso a su webcam.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "Necesita el documento de identidad, licencia de conducir, pasaporte u otra identificaci\u00f3n certificada por el gobierno, que contenga su foto y nombre.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "Necesitas un ID con tu nombre y foto. Licencia, pasaporte, c\u00e9dula todos son aceptados.",
@@ -1916,7 +1895,6 @@
],
"{organization}\\'s logo": "Logo de la {organization}",
"{paragraphStart}You entered {boldStart}{email}{boldEnd}. If this email address is associated with your {platform_name} account, we will send a message with password reset instructions to this email address.{paragraphEnd}{paragraphStart}If you do not receive a password reset message, verify that you entered the correct email address, or check your spam folder.{paragraphEnd}{paragraphStart}If you need further assistance, {anchorStart}contact technical support{anchorEnd}.{paragraphEnd}": "{paragraphStart}Tu ingresaste {boldStart}{email}{boldEnd}. Si esta direcci\u00f3n de email est\u00e1 asociada con tu cuenta en {platform_name}, enviaremos un mensaje a esta direcci\u00f3n con instrucciones para restablecer tu contrase\u00f1a.{paragraphEnd}{paragraphStart}Si no recibes ning\u00fan mensaje, verifica que ingresaste la direcci\u00f3n correctamente y revisa tu carpeta de spam.{paragraphEnd}{paragraphStart}Si necesitas asistencia adicional, {anchorStart}contacta al equipo de soporte{anchorEnd}.{paragraphEnd}",
- "{platform_name} learners can see my:": "Los usuarios de {platform_name} pueden ver mi:",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}Advertencia:{screen_reader_end} No existe ning\u00fan grupo de contenido.",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}Advertencia:{screen_reader_end} El grupo de contenido previamente seleccionado ha sido borrado. Seleccione otro grupo de contenido.",
"{start_strong}{total}{end_strong} words submitted in total.": "{start_strong}{total}{end_strong} palabras enviadas en total.",
diff --git a/lms/static/js/i18n/fake2/djangojs.js b/lms/static/js/i18n/fake2/djangojs.js
index ec40ea0c90..71b910f28d 100644
--- a/lms/static/js/i18n/fake2/djangojs.js
+++ b/lms/static/js/i18n/fake2/djangojs.js
@@ -1451,6 +1451,7 @@
"Thanks for returning to verify your ID in: {courseName}": "\u0166\u0265\u0250n\u029es \u025f\u00f8\u0279 \u0279\u01dd\u0287n\u0279n\u1d09n\u0183 \u0287\u00f8 \u028c\u01dd\u0279\u1d09\u025f\u028e \u028e\u00f8n\u0279 \u0197\u0110 \u1d09n: {courseName}",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0166\u0265\u01dd \u0244\u024c\u0141 \u028e\u00f8n \u01ddn\u0287\u01dd\u0279\u01ddd s\u01dd\u01dd\u026fs \u0287\u00f8 b\u01dd \u0250n \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss. \u0110\u00f8 \u028e\u00f8n \u028d\u0250n\u0287 \u0287\u00f8 \u0250dd \u0287\u0265\u01dd \u0279\u01ddbn\u1d09\u0279\u01ddd \u026f\u0250\u1d09l\u0287\u00f8: d\u0279\u01dd\u025f\u1d09x?",
"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u0166\u0265\u01dd \u0244\u024c\u0141 \u028e\u00f8n \u01ddn\u0287\u01dd\u0279\u01ddd s\u01dd\u01dd\u026fs \u0287\u00f8 b\u01dd \u0250n \u01ddx\u0287\u01dd\u0279n\u0250l l\u1d09n\u029e. \u0110\u00f8 \u028e\u00f8n \u028d\u0250n\u0287 \u0287\u00f8 \u0250dd \u0287\u0265\u01dd \u0279\u01ddbn\u1d09\u0279\u01ddd \u0265\u0287\u0287d:// d\u0279\u01dd\u025f\u1d09x?",
+ "The certificate available date must be later than the enrollment start date.": "\u0166\u0265\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u0250\u028c\u0250\u1d09l\u0250bl\u01dd d\u0250\u0287\u01dd \u026fns\u0287 b\u01dd l\u0250\u0287\u01dd\u0279 \u0287\u0265\u0250n \u0287\u0265\u01dd \u01ddn\u0279\u00f8ll\u026f\u01ddn\u0287 s\u0287\u0250\u0279\u0287 d\u0250\u0287\u01dd.",
"The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "\u0166\u0265\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u025f\u00f8\u0279 \u0287\u0265\u1d09s l\u01dd\u0250\u0279n\u01dd\u0279 \u0265\u0250s b\u01dd\u01ddn \u0279\u01dd-\u028c\u0250l\u1d09d\u0250\u0287\u01ddd \u0250nd \u0287\u0265\u01dd s\u028es\u0287\u01dd\u026f \u1d09s \u0279\u01dd-\u0279nnn\u1d09n\u0183 \u0287\u0265\u01dd \u0183\u0279\u0250d\u01dd \u025f\u00f8\u0279 \u0287\u0265\u1d09s l\u01dd\u0250\u0279n\u01dd\u0279.",
"The cohort cannot be added": "\u0166\u0265\u01dd \u0254\u00f8\u0265\u00f8\u0279\u0287 \u0254\u0250nn\u00f8\u0287 b\u01dd \u0250dd\u01ddd",
"The cohort cannot be saved": "\u0166\u0265\u01dd \u0254\u00f8\u0265\u00f8\u0279\u0287 \u0254\u0250nn\u00f8\u0287 b\u01dd s\u0250\u028c\u01ddd",
@@ -1586,6 +1587,7 @@
"This team does not have any members.": "\u0166\u0265\u1d09s \u0287\u01dd\u0250\u026f d\u00f8\u01dds n\u00f8\u0287 \u0265\u0250\u028c\u01dd \u0250n\u028e \u026f\u01dd\u026fb\u01dd\u0279s.",
"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.",
+ "This unit has validation issues.": "\u0166\u0265\u1d09s nn\u1d09\u0287 \u0265\u0250s \u028c\u0250l\u1d09d\u0250\u0287\u1d09\u00f8n \u1d09ssn\u01dds.",
"This vote could not be processed. Refresh the page and try again.": "\u0166\u0265\u1d09s \u028c\u00f8\u0287\u01dd \u0254\u00f8nld n\u00f8\u0287 b\u01dd d\u0279\u00f8\u0254\u01ddss\u01ddd. \u024c\u01dd\u025f\u0279\u01dds\u0265 \u0287\u0265\u01dd d\u0250\u0183\u01dd \u0250nd \u0287\u0279\u028e \u0250\u0183\u0250\u1d09n.",
"This {parentCategory} has no {childCategory}": "\u0166\u0265\u1d09s {parentCategory} \u0265\u0250s n\u00f8 {childCategory}",
"Thumbnail": "\u0166\u0265n\u026fbn\u0250\u1d09l",
diff --git a/lms/static/js/i18n/fr/djangojs.js b/lms/static/js/i18n/fr/djangojs.js
index e2fb72ba9b..9f6cee11d2 100644
--- a/lms/static/js/i18n/fr/djangojs.js
+++ b/lms/static/js/i18n/fr/djangojs.js
@@ -112,15 +112,10 @@
"A valid email address is required": "Une adresse email valide est requise",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"Abbreviation": "Abr\u00e9viation",
- "About Me": "\u00c0 propos de moi",
"About You": "A propos de vous",
- "About me": "A propos de moi",
- "Accomplishments": "Accomplissements",
- "Accomplishments Pagination": "Paginations des r\u00e9alisations",
"Account Information": "Information du compte",
"Account Not Activated": "Compte non activ\u00e9",
"Account Settings": "Param\u00e8tres du compte",
- "Account Settings page.": "Param\u00e8tres du compte",
"Action": "Action",
"Action required: Enter a valid date.": "Action requise : Entrez une date valide.",
"Actions": "Actions",
@@ -131,7 +126,6 @@
"Add Additional Signatory": "Ajouter une signature additionnelle.",
"Add Cohort": "Ajouter une cohorte",
"Add Component:": "Ajouter un composant :",
- "Add Country": "Ajouter un Pays",
"Add New Component": "Ajouter un nouveau Composant",
"Add URLs for additional versions": "Ajoutez des URL pour des versions suppl\u00e9mentaires",
"Add a Chapter": "Ajouter un chapitre",
@@ -141,7 +135,6 @@
"Add a comment": "Ajouter un commentaire",
"Add a response:": "Ajouter une r\u00e9ponse",
"Add another group": "Ajouter un autre groupe",
- "Add language": "Ajouter une langue",
"Add to Dictionary": "Ajouter au dictionnaire",
"Add your first content group": "Ajouter votre premier groupe de contenu",
"Add your first group configuration": "Ajouter votre premier groupe de configuration",
@@ -267,7 +260,6 @@
"Change Manually": "Changer manuellement",
"Change My Email Address": "Modifier mon adresse email",
"Change image": "Modifier l'image",
- "Change the settings for {display_name}": "Modifier les param\u00e8tres pour {display_name}",
"Chapter Asset": "Ressource associ\u00e9e au chapitre",
"Chapter Name": "Nom du chapitre",
"Chapter information": "Information sur le chapitre",
@@ -455,7 +447,6 @@
"Edit HTML": "Editer le code HTML",
"Edit Team": "Modifier l'\u00e9quipe",
"Edit Your Name": "Modifier votre nom",
- "Edit the name": "Modifier le nom",
"Edit this certificate?": "Modifier ce certificat ?",
"Editable": "Modifiable",
"Editing comment": "Commentaire en cours d'\u00e9dition",
@@ -562,7 +553,6 @@
"Free text notes": "Notes libres",
"Frequently Asked Questions": "Foire Aux Questions",
"Full Name": "Nom complet",
- "Full Profile": "Profil complet",
"Fullscreen": "Plein \u00e9cran",
"Gender": "Genre",
"General": "G\u00e9n\u00e9ral",
@@ -690,7 +680,6 @@
"License Display": "Affichage de la licence",
"License Type": "Type de licence",
"Limit Access": "Acc\u00e8s Limit\u00e9",
- "Limited Profile": "Profil restreint",
"Link Description": "Description du Lien",
"Link Your Account": "Liez votre compte",
"Link types should be unique.": "Les types de liens doivent \u00eatre uniques.",
@@ -895,9 +884,6 @@
"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.": "Les examens v\u00e9rifi\u00e9s sont minut\u00e9s et un enregistrement vid\u00e9o est fait que chaque \u00e9tudiant. Les vid\u00e9o sont ensuite v\u00e9rifi\u00e9es pour s'assurer que les conditions de l'examen \u00e9taient correctes;",
"Professional Education": "Formation professionnelle",
"Professional Education Verified Certificate": "Certificat v\u00e9rifif\u00e9 professionel",
- "Profile": "Profil",
- "Profile Image": "Image du profil",
- "Profile image for {username}": "Image de profil pour {username}",
"Promote another member to Admin to remove your admin rights": "Veuillez ajouter un autre membre comme administrateur pour supprimer vos droits d'administrateurs",
"Public": "Public",
"Publish": "Publier",
@@ -1098,7 +1084,6 @@
"Team name cannot have more than 255 characters.": "Le nom de l'\u00e9quipe ne peut pas d\u00e9passer 255 caract\u00e8res.",
"Teams": "\u00c9quipes",
"Teams Pagination": "Pagination des \u00e9quipes",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "Parlez nous de vous : o\u00f9 habitez-vous, quels sont vos int\u00e9r\u00eats, pourquoi suivez-vous des cours ou ce que vous souhaitez apprendre.",
"Templates": "Mod\u00e8les",
"Text": "Texte",
"Text color": "Couleur du texte",
@@ -1282,10 +1267,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "Utilisez votre webcam pour prendre une photo de votre pi\u00e8ce d'identit\u00e9. Nous allons v\u00e9rifier sa concordance avec la photo de votre visage et le nom de votre compte.",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "Utiliser votre webcam pour prendre une photo de votre visage, afin que nous puissions la comparer avec celle de votre pi\u00e8ce d'identit\u00e9.",
"Used": "Utilis\u00e9",
- "Used in {count} unit": [
- "Utilis\u00e9 par {count} unit\u00e9s.",
- "Utilis\u00e9s par {count} unit\u00e9s."
- ],
"User": "Utilisateur",
"User Email": "Email de l'utilisateur",
"Username": "Nom d'utilisateur",
@@ -1390,12 +1371,10 @@
"You haven't added any assets to this course yet.": "Vous n'avez encore ajout\u00e9 aucune ressource dans ce cours.",
"You haven't added any content to this course yet.": "Vous n'avez pas encore ajout\u00e9 de contenu \u00e0 ce cours.",
"You haven't added any textbooks to this course yet.": "Vous n'avez encore ajout\u00e9 aucun manuel \u00e0 ce cours.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "Vous devez avoir plus de 13 ans pour partager un profil complet. Si vous avez plus de 13 ans, assurez-vous que votre ann\u00e9e de naissance est correcte dans {account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "Vous devez saisir une adresse e-mail valide afin d'ajouter un nouveau membre \u00e0 l'\u00e9quipe",
"You must sign out and sign back in before your language changes take effect.": "Vous devez vous d\u00e9connecter puis vous connecter \u00e0 nouveau afin que les param\u00e8tres de langue prennent effet.",
"You must specify a name": "Vous devez indiquer un nom",
"You must specify a name for the cohort": "Vous devez indiquer un nom pour la cohorte",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "Vous devez renseigner votre ann\u00e9e de naissance avant de pouvoir partager votre profil complet. Pour renseigner votre ann\u00e9e de naissance, allez sur {account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "Vous avez besoin d'un ordinateur dot\u00e9 d'une webcam. Lors que votre explorateur vous le demandera, assurez vous de lui donner l'autorisation d'acc\u00e9der \u00e0 la webcam.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "Vous avez besoin d'un permis de conduire, d'un passeport ou d'une pi\u00e8ce d'identit\u00e9 avec votre nom et photo.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "Vous avez besoin d'un permis de conduire, un passeport ou toute pi\u00e8ce d'identit\u00e9 avec votre nom et photo.",
@@ -1526,7 +1505,6 @@
"{numVotes} Vote",
"{numVotes} Votes"
],
- "{platform_name} learners can see my:": "Les utilisateurs de {platform_name} peuvent voir mon:",
"{start_strong}{total}{end_strong} words submitted in total.": "{start_strong}{total}{end_strong} mots soumis au total.",
"{unread_comments_count} new": "{unread_comments_count} nouveaux",
"\u2026": "\u2026"
diff --git a/lms/static/js/i18n/he/djangojs.js b/lms/static/js/i18n/he/djangojs.js
index b14d84eaac..0691756f33 100644
--- a/lms/static/js/i18n/he/djangojs.js
+++ b/lms/static/js/i18n/he/djangojs.js
@@ -19,9 +19,17 @@
/* gettext library */
django.catalog = {
+ " and ": "\u05d5\u05d2\u05dd",
" learner does not exist in LMS and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3 \u05d0\u05d9\u05e0\u05d5 \u05e7\u05d9\u05d9\u05dd \u05d1-LMS \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " learner is already white listed and not added to the exception list": " \u05d4\u05ea\u05dc\u05de\u05d9\u05d3 \u05db\u05d1\u05e8 \u05e0\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05d4 \u05d4\u05d1\u05d8\u05d5\u05d7\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd ",
+ " learner is not enrolled in course and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3 \u05d0\u05d9\u05e0\u05d5 \u05e8\u05e9\u05d5\u05dd \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
" learner is successfully added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3 \u05e0\u05d5\u05e1\u05e3 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " learners are already white listed and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05db\u05d1\u05e8 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05d4 \u05d4\u05dc\u05d1\u05e0\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd ",
+ " learners are not enrolled in course and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d0\u05d9\u05e0\u05dd \u05e8\u05e9\u05d5\u05de\u05d9\u05dd \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
" learners are successfully added to exception list": " \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d5 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " learners do not exist in LMS and not added to the exception list": " \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05dc\u05d0 \u05e7\u05d9\u05d9\u05de\u05d9\u05dd \u05d1-LMS \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " record is not in correct format and not added to the exception list": " \u05d4\u05e8\u05e9\u05d5\u05de\u05d4 \u05d0\u05d9\u05e0\u05d4 \u05d1\u05ea\u05d1\u05e0\u05d9\u05ea \u05d4\u05e0\u05db\u05d5\u05e0\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d4 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
+ " records are not in correct format and not added to the exception list": " \u05d4\u05e8\u05e9\u05d5\u05de\u05d5\u05ea \u05d0\u05d9\u05e0\u05df \u05d1\u05ea\u05d1\u05e0\u05d9\u05ea \u05d4\u05e0\u05db\u05d5\u05e0\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d5\u05e1\u05e4\u05d5 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
"#Replies": "#\u05ea\u05e9\u05d5\u05d1\u05d5\u05ea",
"%(cohort_name)s (%(user_count)s)": "%(cohort_name)s (%(user_count)s)",
"%(comments_count)s %(span_sr_open)scomments %(span_close)s": "%(comments_count)s %(span_sr_open)s\u05d4\u05e2\u05e8\u05d5\u05ea %(span_close)s",
@@ -104,11 +112,14 @@
"%s from now": "%s \u05de\u05e2\u05db\u05e9\u05d9\u05d5",
"(Add signatories for a certificate)": "(\u05d4\u05d5\u05e1\u05e3 \u05d7\u05ea\u05d9\u05de\u05d5\u05ea \u05dc\u05ea\u05e2\u05d5\u05d3\u05d4)",
"(Caption will be displayed when you start playing the video.)": "(\u05db\u05ea\u05d5\u05d1\u05d9\u05d5\u05ea \u05d9\u05d5\u05e6\u05d2\u05d5 \u05db\u05d0\u05e9\u05e8 \u05ea\u05e4\u05e2\u05d9\u05dc \u05d0\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5).",
+ "(Community TA)": "(\u05e2\u05d5\u05d6\u05e8 \u05d4\u05d5\u05e8\u05d0\u05d4 \u05e7\u05d4\u05d9\u05dc\u05ea\u05d9)",
"(Required Field)": "(\u05e9\u05d3\u05d4 \u05d7\u05d5\u05d1\u05d4)",
+ "(Staff)": "(\u05e6\u05d5\u05d5\u05ea)",
"(contains %(student_count)s student)": [
"(\u05db\u05d5\u05dc\u05dc\u05ea \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 %(student_count)s)",
"(\u05db\u05d5\u05dc\u05dc\u05ea %(student_count)s \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd)"
],
+ "(optional)": "(\u05d0\u05d5\u05e4\u05e6\u05d9\u05d5\u05e0\u05d0\u05dc\u05d9)",
"- Sortable": "-\u05e0\u05d9\u05ea\u05df \u05dc\u05de\u05d9\u05d5\u05df",
": video upload complete.": ": \u05d4\u05e2\u05dc\u05d0\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5 \u05d4\u05d5\u05e9\u05dc\u05de\u05d4.",
"<%= user %> already in exception list.": "<%= user %> \u05db\u05d1\u05e8 \u05e0\u05de\u05e6\u05d0 \u05d1\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd.",
@@ -121,15 +132,10 @@
"A valid email address is required": "\u05d3\u05e8\u05d5\u05e9\u05d4 \u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05ea\u05e7\u05d9\u05e0\u05d4",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05db\u05dc\u05de\u05e0\u05e1\u05e2\u05e4\u05e6\u05e7\u05e8\u05e9\u05ea",
"Abbreviation": "\u05e7\u05d9\u05e6\u05d5\u05e8",
- "About Me": "\u05e2\u05dc \u05e2\u05e6\u05de\u05d9",
"About You": "\u05e2\u05dc \u05e2\u05e6\u05de\u05da",
- "About me": "\u05e2\u05dc \u05e2\u05e6\u05de\u05d9",
- "Accomplishments": "\u05d4\u05d9\u05e9\u05d2\u05d9\u05dd",
- "Accomplishments Pagination": "\u05e2\u05d9\u05de\u05d5\u05d3 \u05d4\u05d9\u05e9\u05d2\u05d9\u05dd",
"Account Information": "\u05e4\u05e8\u05d8\u05d9 \u05d7\u05e9\u05d1\u05d5\u05df",
"Account Not Activated": "\u05d4\u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e4\u05e2\u05dc",
"Account Settings": "\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d7\u05e9\u05d1\u05d5\u05df",
- "Account Settings page.": "\u05e2\u05de\u05d5\u05d3 \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d7\u05e9\u05d1\u05d5\u05df",
"Action": "\u05e4\u05e2\u05d5\u05dc\u05d4",
"Action required: Enter a valid date.": "\u05e0\u05d3\u05e8\u05e9\u05ea \u05e4\u05e2\u05d5\u05dc\u05d4: \u05d4\u05d6\u05df \u05ea\u05d0\u05e8\u05d9\u05da \u05d7\u05d5\u05e7\u05d9.",
"Actions": "\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea",
@@ -141,28 +147,30 @@
"Add Additional Signatory": "\u05d4\u05d5\u05e1\u05e3 \u05d7\u05ea\u05d9\u05de\u05d4 \u05e0\u05d5\u05e1\u05e4\u05ea",
"Add Cohort": "\u05d4\u05d5\u05e1\u05e3 \u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3",
"Add Component:": "\u05d4\u05d5\u05e1\u05e3 \u05e8\u05db\u05d9\u05d1:",
- "Add Country": "\u05d4\u05d5\u05e1\u05e3 \u05de\u05d3\u05d9\u05e0\u05d4",
"Add New Component": "\u05d4\u05d5\u05e1\u05e3 \u05e8\u05db\u05d9\u05d1 \u05d7\u05d3\u05e9",
"Add URLs for additional versions": "\u05d4\u05d5\u05e1\u05e3 \u05db\u05ea\u05d5\u05d1\u05d5\u05ea URL \u05e2\u05d1\u05d5\u05e8 \u05d2\u05e8\u05e1\u05d0\u05d5\u05ea \u05e0\u05d5\u05e1\u05e4\u05d5\u05ea",
"Add a Chapter": "\u05d4\u05d5\u05e1\u05e3 \u05e4\u05e8\u05e7",
"Add a New Cohort": "\u05d4\u05d5\u05e1\u05e3 \u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3 \u05d7\u05d3\u05e9\u05d4",
"Add a Post": "\u05d4\u05d5\u05e1\u05e3 \u05e4\u05d5\u05e1\u05d8",
"Add a Response": "\u05d4\u05d5\u05e1\u05e3 \u05ea\u05d2\u05d5\u05d1\u05d4",
+ "Add a clear and descriptive title to encourage participation. (Required)": "\u05d4\u05d5\u05e1\u05e3 \u05db\u05d5\u05ea\u05e8\u05ea \u05d1\u05e8\u05d5\u05e8\u05d4 \u05d5\u05ea\u05d9\u05d0\u05d5\u05e8\u05d9\u05ea \u05d1\u05db\u05d3\u05d9 \u05dc\u05e2\u05d5\u05d3\u05d3 \u05d0\u05ea \u05d4\u05d4\u05e9\u05ea\u05ea\u05e4\u05d5\u05ea \u05d1\u05d3\u05d9\u05d5\u05df. (\u05d7\u05d5\u05d1\u05d4).",
"Add a comment": "\u05d4\u05d5\u05e1\u05e3 \u05d4\u05e2\u05e8\u05d4",
"Add a learning outcome here": "\u05d4\u05d5\u05e1\u05e3 \u05ea\u05d5\u05e6\u05d0\u05ea \u05dc\u05de\u05d9\u05d3\u05d4 \u05db\u05d0\u05df",
"Add a response:": "\u05d4\u05d5\u05e1\u05e3 \u05ea\u05d2\u05d5\u05d1\u05d4:",
"Add another group": "\u05d4\u05d5\u05e1\u05e3 \u05e7\u05d1\u05d5\u05e6\u05d4 \u05d0\u05d7\u05e8\u05ea",
- "Add language": "\u05d4\u05d5\u05e1\u05e3 \u05e9\u05e4\u05d4",
"Add notes about this learner": "\u05d4\u05d5\u05e1\u05e3 \u05d4\u05e2\u05e8\u05d5\u05ea \u05dc\u05d2\u05d1\u05d9 \u05dc\u05d5\u05de\u05d3 \u05d6\u05d4",
"Add to Dictionary": "\u05d4\u05d5\u05e1\u05e3 \u05dc\u05de\u05d9\u05dc\u05d5\u05df",
"Add to Exception List": "\u05d4\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05e8\u05d9\u05d2\u05d9\u05dd",
"Add your first content group": "\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 \u05e9\u05dc\u05da",
"Add your first group configuration": "\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05d4\u05d2\u05d3\u05e8\u05ea \u05ea\u05e6\u05d5\u05e8\u05ea \u05e7\u05d1\u05d5\u05e6\u05ea\u05da \u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4 ",
"Add your first textbook": "\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05e1\u05e4\u05e8 \u05d4\u05dc\u05d9\u05de\u05d5\u05d3 \u05d4\u05e8\u05d0\u05e9\u05d5\u05df \u05e9\u05dc\u05da",
+ "Add your post to a relevant topic to help others find it. (Required)": "\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8 \u05e9\u05dc\u05da \u05dc\u05e0\u05d5\u05e9\u05d0 \u05d4\u05e8\u05dc\u05d5\u05d5\u05e0\u05d8\u05d9 \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d4\u05e7\u05dc \u05e2\u05dc \u05d0\u05d7\u05e8\u05d9\u05dd \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05d5\u05ea\u05d5. (\u05d7\u05d5\u05d1\u05d4)",
"Add {role} Access": "\u05d4\u05d5\u05e1\u05e3 \u05d2\u05d9\u05e9\u05ea {role}",
"Adding": "\u05de\u05d5\u05e1\u05d9\u05e3",
"Adding the selected course to your cart": "\u05d4\u05d5\u05e1\u05e4\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05e9\u05e0\u05d1\u05d7\u05e8 \u05dc\u05e2\u05d2\u05dc\u05ea \u05d4\u05e7\u05e0\u05d9\u05d5\u05ea \u05e9\u05dc\u05da",
"Additional Information": "\u05de\u05d9\u05d3\u05e2 \u05e0\u05d5\u05e1\u05e3",
+ "Additional posts could not be loaded. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05e4\u05d5\u05e1\u05d8\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "Additional responses could not be loaded. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05ea\u05d2\u05d5\u05d1\u05d5\u05ea \u05e0\u05d5\u05e1\u05e4\u05d5\u05ea. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"Adjust video speed": "\u05d4\u05ea\u05d0\u05dd \u05d0\u05ea \u05de\u05d4\u05d9\u05e8\u05d5\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5",
"Adjust video volume": "\u05d4\u05ea\u05d0\u05dd \u05d0\u05ea \u05e2\u05d5\u05e6\u05de\u05ea \u05d4\u05e7\u05d5\u05dc \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5",
"Admin": "\u05de\u05e0\u05d4\u05dc",
@@ -183,6 +191,7 @@
"All groups must have a name.": "\u05dc\u05db\u05dc \u05d4\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05e9\u05dd.",
"All groups must have a unique name.": "\u05dc\u05db\u05dc \u05d4\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05e9\u05dd \u05d9\u05d9\u05d7\u05d5\u05d3\u05d9.",
"All learners in the {cohort_name} cohort": "\u05db\u05dc \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d1\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3 {cohort_name}",
+ "All learners in the {track_name} track": "\u05db\u05dc \u05de\u05d9 \u05e9\u05dc\u05d5\u05de\u05d3 \u05d1\u05de\u05e1\u05dc\u05d5\u05dc {track_name}",
"All learners who are enrolled in this course": "\u05db\u05dc \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05e9\u05e8\u05e9\u05d5\u05de\u05d9\u05dd \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4",
"All payment options are currently unavailable.": "\u05db\u05dc \u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d4\u05ea\u05e9\u05dc\u05d5\u05dd \u05d0\u05d9\u05e0\u05df \u05d6\u05de\u05d9\u05e0\u05d5\u05ea \u05db\u05e8\u05d2\u05e2.",
"All professional education courses are fee-based, and require payment to complete the enrollment process.": "\u05db\u05dc \u05d4\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05d1\u05d7\u05d9\u05e0\u05d5\u05da \u05d4\u05de\u05e7\u05e6\u05d5\u05e2\u05d9 \u05de\u05d1\u05d5\u05e1\u05e1\u05d9\u05dd \u05e2\u05dc \u05ea\u05e9\u05dc\u05d5\u05dd, \u05d5\u05dc\u05db\u05df \u05e0\u05d3\u05e8\u05e9 \u05ea\u05e9\u05dc\u05d5\u05dd \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d4\u05e9\u05dc\u05d9\u05dd \u05d0\u05ea \u05ea\u05d4\u05dc\u05d9\u05da \u05d4\u05d4\u05e8\u05e9\u05de\u05d4.",
@@ -211,6 +220,7 @@
"An error has occurred. Refresh the page, and then try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
"An error has occurred. Try refreshing the page, or check your Internet connection.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4. \u05e0\u05e1\u05d4 \u05dc\u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05d3\u05e3 \u05d0\u05d5 \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d7\u05d9\u05d1\u05d5\u05e8 \u05d4\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8.",
"An error occurred retrieving your email. Please try again later, and contact technical support if the problem persists.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d0\u05d7\u05d6\u05d5\u05e8 \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc\u05da. \u05d0\u05e0\u05d0 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1 \u05de\u05d0\u05d5\u05d7\u05e8 \u05d9\u05d5\u05ea\u05e8. \u05d0\u05dd \u05d4\u05d1\u05e2\u05d9\u05d4 \u05e0\u05de\u05e9\u05db\u05ea, \u05e4\u05e0\u05d4 \u05dc\u05ea\u05de\u05d9\u05db\u05d4 \u05d8\u05db\u05e0\u05d9\u05ea. ",
+ "An error occurred when signing you in to %s.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05d4\u05d7\u05d9\u05d1\u05d5\u05e8 \u05e9\u05dc\u05da \u05dc-%s.",
"An error occurred while removing the member from the team. Try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05d4\u05e1\u05e8\u05ea \u05d7\u05d1\u05e8 \u05de\u05d4\u05e6\u05d5\u05d5\u05ea. \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
"An error occurred.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4.",
"An error occurred. Make sure that the student's username or email address is correct and try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4. \u05d0\u05e0\u05d0 \u05d5\u05d3\u05d0 \u05db\u05d9 \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9 \u05e9\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d0\u05d5 \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc\u05d5 \u05e0\u05db\u05d5\u05e0\u05d4 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
@@ -233,6 +243,7 @@
"Are you sure you want to delete this update?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \u05e2\u05d3\u05db\u05d5\u05df \u05d6\u05d4?",
"Are you sure you want to delete {email} from the course team for \u201c{container}\u201d?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05de\u05d7\u05d5\u05e7 {email} \u05de\u05e6\u05d5\u05d5\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05e2\u05d1\u05d5\u05e8 \u201c{container}\u201d? ",
"Are you sure you want to delete {email} from the library \u201c{container}\u201d?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea {email} \u05de\u05e1\u05e4\u05e8\u05d9\u05d9\u05ea \u201c{container}\u201d?",
+ "Are you sure you want to remove this video from the list?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e1\u05d9\u05e8 \u05d0\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d5\u05d9\u05d3\u05d0\u05d5 \u05d6\u05d4 \u05de\u05d4\u05e8\u05e9\u05d9\u05de\u05d4?",
"Are you sure you want to restrict {email} access to \u201c{container}\u201d?": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05d4\u05d2\u05d1\u05d9\u05dc \u05d0\u05ea \u05d2\u05d9\u05e9\u05ea {email} \u05dc\u201c{container}\u201d?",
"Are you sure you want to revert to the last published version of the unit? You cannot undo this action.": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05d7\u05d6\u05d5\u05e8 \u05dc\u05d2\u05e8\u05e1\u05d4 \u05d4\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4 \u05e9\u05dc \u05d9\u05d7\u05d9\u05d3\u05d4 \u05d6\u05d5, \u05e9\u05e4\u05d5\u05e8\u05e1\u05de\u05d4 ? \u05d0\u05d9\u05e0\u05da \u05d9\u05db\u05d5\u05dc \u05dc\u05d1\u05d8\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 \u05d6\u05d5. ",
"Are you sure you wish to delete this item. It cannot be reversed!\n\nAlso any content that links/refers to this item will no longer work (e.g. broken images and/or links)": "\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05de\u05d7\u05d5\u05e7 \u05e4\u05e8\u05d9\u05d8 \u05d6\u05d4. \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d9\u05d4\u05d9\u05d4 \u05dc\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05e4\u05e2\u05d5\u05dc\u05d4!\n\n\u05d1\u05e0\u05d5\u05e1\u05e3, \u05db\u05dc \u05ea\u05d5\u05db\u05df \u05e9\u05de\u05e7\u05e9\u05e8/\u05de\u05ea\u05d9\u05d9\u05d7\u05e1 \u05dc\u05e4\u05e8\u05d9\u05d8 \u05d6\u05d4 \u05dc\u05d0 \u05d9\u05e2\u05d1\u05d5\u05d3 \u05d9\u05d5\u05ea\u05e8 (\u05dc\u05d3\u05d5\u05d2\u05de\u05d4, \u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05d5/\u05d0\u05d5 \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd \u05e9\u05d1\u05d5\u05e8\u05d9\u05dd)",
@@ -301,7 +312,6 @@
"Change Manually": "\u05e9\u05e0\u05d4 \u05d9\u05d3\u05e0\u05d9\u05ea",
"Change My Email Address": "\u05e9\u05e0\u05d4 \u05d0\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc\u05d9",
"Change image": "\u05e9\u05e0\u05d4 \u05ea\u05de\u05d5\u05e0\u05d4",
- "Change the settings for {display_name}": "\u05e9\u05e0\u05d4 \u05d0\u05ea \u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 {display_name}",
"Chapter Asset": "\u05e0\u05db\u05e1 \u05d4\u05e4\u05e8\u05e7",
"Chapter Name": "\u05e9\u05dd \u05d4\u05e4\u05e8\u05e7",
"Chapter information": "\u05de\u05d9\u05d3\u05e2 \u05e2\u05dc \u05d4\u05e4\u05e8\u05e7",
@@ -330,6 +340,7 @@
"Choose a .csv file": "\u05d1\u05d7\u05e8 \u05e7\u05d5\u05d1\u05e5 CSV.",
"Choose a content group to associate": "\u05d1\u05d7\u05e8 \u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df \u05dc\u05e7\u05e9\u05e8",
"Choose mode": "\u05d1\u05d7\u05e8 \u05de\u05e6\u05d1",
+ "Choose new file": "\u05d1\u05d7\u05e8 \u05e7\u05d5\u05d1\u05e5 \u05d7\u05d3\u05e9",
"Choose one": "\u05d1\u05d7\u05e8 \u05d0\u05d7\u05d3",
"Choose your institution from the list below:": "\u05d1\u05d7\u05e8 \u05d0\u05ea \u05d4\u05de\u05d5\u05e1\u05d3 \u05e9\u05dc\u05da \u05de\u05d4\u05e8\u05e9\u05d9\u05de\u05d4 \u05e9\u05dc\u05d4\u05dc\u05df:",
"Circle": "\u05de\u05e2\u05d2\u05dc",
@@ -356,6 +367,7 @@
"Code block": "\u05d1\u05dc\u05d5\u05e7 \u05e7\u05d5\u05d3",
"Cohort Assignment Method": "\u05e9\u05d9\u05d8\u05ea \u05d4\u05e7\u05e6\u05d0\u05d4 \u05dc\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3",
"Cohort Name": "\u05e9\u05dd \u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3",
+ "Cohorts": "\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05dc\u05de\u05d9\u05d3\u05d4",
"Cohorts Disabled": "\u05d1\u05d8\u05dc \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05dc\u05d9\u05de\u05d5\u05d3",
"Cohorts Enabled": "\u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3 \u05de\u05d0\u05d5\u05e4\u05e9\u05e8\u05ea",
"Collapse All": "\u05db\u05d5\u05d5\u05e5 \u05d4\u05db\u05dc",
@@ -369,6 +381,7 @@
"Commentary": "\u05d4\u05e2\u05e8\u05d5\u05ea",
"Common Problem Types": "\u05e1\u05d5\u05d2\u05d9 \u05d1\u05e2\u05d9\u05d5\u05ea \u05e0\u05e4\u05d5\u05e6\u05d5\u05ea",
"Community TA": "\u05e2\u05d5\u05d6\u05e8 \u05d4\u05d5\u05e8\u05d0\u05d4 \u05d1\u05e4\u05d5\u05e8\u05d5\u05dd",
+ "Completed": "\u05d4\u05d5\u05e9\u05dc\u05dd",
"Component": "\u05e8\u05db\u05d9\u05d1",
"Component Location ID": "\u05de\u05d6\u05d4\u05d4 \u05de\u05d9\u05e7\u05d5\u05dd \u05e8\u05db\u05d9\u05d1",
"Configure": "\u05d4\u05d2\u05d3\u05e8",
@@ -445,6 +458,7 @@
"Deactivate": "\u05d1\u05d8\u05dc ",
"Decrease indent": "\u05d4\u05e7\u05d8\u05df \u05d4\u05d6\u05d7\u05d4",
"Default": "\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc",
+ "Default (Local Time Zone)": "\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc (\u05d0\u05d6\u05d5\u05e8\u05d9 \u05d6\u05de\u05df \u05de\u05e7\u05d5\u05de\u05d9\u05d9\u05dd)",
"Default Timed Transcript": "\u05ea\u05de\u05dc\u05d9\u05dc \u05de\u05ea\u05d5\u05d6\u05de\u05df \u05db\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc",
"Delete": "\u05de\u05d7\u05e7",
"Delete \"<%= signatoryName %>\" from the list of signatories?": "\u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \"<%= signatoryName %>\" \u05de\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d7\u05ea\u05d9\u05de\u05d5\u05ea?",
@@ -459,12 +473,15 @@
"Delete this %(item_display_name)s?": "\u05de\u05d7\u05e7 \u05d0\u05ea \u05d4%(item_display_name)s?",
"Delete this asset": "\u05de\u05d7\u05e7 \u05e0\u05db\u05e1 \u05d6\u05d4",
"Delete this team?": "\u05dc\u05de\u05d7\u05d5\u05e7 \u05e6\u05d5\u05d5\u05ea \u05d6\u05d4?",
+ "Delete this {xblock_type} (and prerequisite)?": "\u05d4\u05d0\u05dd \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea {xblock_type} (and prerequisite) \u05d6\u05d4? ",
+ "Delete this {xblock_type}?": "\u05d4\u05d0\u05dd \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea {xblock_type} \u05d6\u05d4?",
"Delete \u201c<%= name %>\u201d?": "\u05de\u05d7\u05e7 \u201c<%= name %>\u201d?",
"Deleted Content Group": "\u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df \u05e0\u05de\u05d7\u05e7\u05d4",
"Deleting": "\u05de\u05d5\u05d7\u05e7",
"Deleting a team is permanent and cannot be undone. All members are removed from the team, and team discussions can no longer be accessed.": "\u05de\u05d7\u05d9\u05e7\u05ea \u05e6\u05d5\u05d5\u05ea \u05d4\u05d9\u05d0 \u05e7\u05d1\u05d5\u05e2\u05d4 \u05d5\u05d0\u05d9\u05df \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05dc\u05d1\u05d8\u05dc\u05d4. \u05db\u05dc \u05d4\u05d7\u05d1\u05e8\u05d9\u05dd \u05d4\u05d5\u05e1\u05e8\u05d5 \u05de\u05d4\u05e6\u05d5\u05d5\u05ea, \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d2\u05e9\u05ea \u05d9\u05d5\u05ea\u05e8 \u05dc\u05d3\u05d9\u05d5\u05e0\u05d9 \u05d4\u05e6\u05d5\u05d5\u05ea.",
"Deleting a textbook cannot be undone and once deleted any reference to it in your courseware's navigation will also be removed.": "\u05de\u05d7\u05d9\u05e7\u05ea \u05e1\u05e4\u05e8 \u05dc\u05d9\u05de\u05d5\u05d3 \u05d0\u05d9\u05e0\u05e0\u05d4 \u05d4\u05e4\u05d9\u05db\u05d4 \u05d5\u05d1\u05e8\u05d2\u05e2 \u05e9\u05ea\u05d1\u05d5\u05e6\u05e2 \u05de\u05d7\u05d9\u05e7\u05d4, \u05db\u05dc \u05d4\u05e4\u05e0\u05d9\u05d9\u05d4 \u05de\u05d4\u05dc\u05d5\u05de\u05d3\u05d4 \u05dc\u05e1\u05e4\u05e8 \u05ea\u05d9\u05de\u05d7\u05e7 \u05d2\u05dd \u05db\u05df. ",
"Deleting this %(item_display_name)s is permanent and cannot be undone.": "\u05de\u05d7\u05d9\u05e7\u05ea %(item_display_name)s \u05d4\u05d9\u05d0 \u05e7\u05d1\u05d5\u05e2\u05d4 \u05d5\u05d0\u05d9\u05e0\u05d4 \u05d4\u05e4\u05d9\u05db\u05d4.",
+ "Deleting this {xblock_type} is permanent and cannot be undone.": "\u05de\u05d7\u05d9\u05e7\u05ea {xblock_type} \u05d6\u05d4 \u05d4\u05d9\u05d0 \u05e7\u05d1\u05d5\u05e2\u05d4 \u05d5\u05d0\u05d9\u05e0\u05d4 \u05d4\u05e4\u05d9\u05db\u05d4.",
"Deprecated": "\u05dc\u05d0 \u05de\u05d5\u05de\u05dc\u05e5 \u05dc\u05e9\u05d9\u05de\u05d5\u05e9",
"Description": "\u05ea\u05d9\u05d0\u05d5\u05e8",
"Description of the certificate": "\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05ea\u05e2\u05d5\u05d3\u05d4",
@@ -515,7 +532,6 @@
"Edit Membership": "\u05e2\u05e8\u05d5\u05da \u05d7\u05d1\u05e8\u05d5\u05ea",
"Edit Team": "\u05e2\u05e8\u05d5\u05da \u05e6\u05d5\u05d5\u05ea",
"Edit Your Name": "\u05e2\u05e8\u05d5\u05da \u05d0\u05ea \u05e9\u05de\u05da",
- "Edit the name": "\u05e2\u05e8\u05d5\u05da \u05d0\u05ea \u05d4\u05e9\u05dd",
"Edit this certificate?": "\u05dc\u05e2\u05e8\u05d5\u05da \u05ea\u05e2\u05d5\u05d3\u05d4 \u05d6\u05d5?",
"Edit your post below.": "\u05e2\u05e8\u05d5\u05da \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8 \u05e9\u05dc\u05d4\u05dc\u05df.",
"Editable": "\u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05e8\u05d9\u05db\u05d4",
@@ -543,6 +559,7 @@
"Enrollment Date": "\u05ea\u05d0\u05e8\u05d9\u05da \u05d4\u05e8\u05e9\u05de\u05d4",
"Enrollment Mode": "\u05de\u05e6\u05d1 \u05d4\u05e8\u05e9\u05de\u05d4",
"Enrollment Opens on": "\u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e0\u05e4\u05ea\u05d7 \u05d1",
+ "Enrollment Tracks": "\u05de\u05e1\u05dc\u05d5\u05dc\u05d9 \u05d4\u05e8\u05e9\u05de\u05d4",
"Ensure that you can see your photo and read your name": "\u05d5\u05d3\u05d0 \u05db\u05d9 \u05e0\u05d9\u05ea\u05df \u05dc\u05e8\u05d0\u05d5\u05ea \u05d0\u05ea \u05ea\u05de\u05d5\u05e0\u05ea\u05da \u05d5\u05dc\u05e7\u05e8\u05d5\u05d0 \u05d0\u05ea \u05e9\u05de\u05da.",
"Enter Due Date and Time": "\u05d4\u05d6\u05df \u05ea\u05d0\u05e8\u05d9\u05da \u05e1\u05d9\u05d5\u05dd \u05d5\u05e9\u05e2\u05d4",
"Enter Start Date and Time": "\u05d4\u05d6\u05df \u05ea\u05d0\u05e8\u05d9\u05da \u05d4\u05ea\u05d7\u05dc\u05d4 \u05d5\u05e9\u05e2\u05d4",
@@ -577,6 +594,7 @@
"Error getting student list.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e7\u05d1\u05dc\u05ea \u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd.",
"Error getting student progress url for '<%- student_id %>'. Make sure that the student identifier is spelled correctly.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e7\u05d1\u05dc\u05ea \u05db\u05ea\u05d5\u05d1\u05ea URL \u05e9\u05dc \u05d4\u05ea\u05e7\u05d3\u05de\u05d5\u05ea \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05e2\u05d1\u05d5\u05e8 '<%- student_id %>'. \u05d5\u05d3\u05d0 \u05e9\u05de\u05d6\u05d4\u05d4 \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05de\u05d0\u05d5\u05d9\u05ea \u05db\u05d4\u05dc\u05db\u05d4.",
"Error getting task history for problem '<%- problem_id %>' and student '<%- student_id %>'. Make sure that the problem and student identifiers are complete and correct.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05e7\u05d1\u05dc\u05ea \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d9\u05ea \u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 \u05d4\u05d1\u05e2\u05d9\u05d4 '<%- problem_id %>' \u05d5\u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 '<%- student_id %>'. \u05d5\u05d3\u05d0 \u05e9\u05de\u05d6\u05d4\u05d4 \u05d4\u05d1\u05e2\u05d9\u05d4 \u05d5\u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d4\u05dd \u05de\u05dc\u05d0\u05d9\u05dd \u05d5\u05e0\u05db\u05d5\u05e0\u05d9\u05dd.",
+ "Error importing course": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d9\u05d9\u05d1\u05d5\u05d0 \u05e7\u05d5\u05e8\u05e1.",
"Error listing task history for this student and problem.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e8\u05d9\u05e9\u05d5\u05dd \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05ea \u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d6\u05d4 \u05d5\u05d1\u05e2\u05d9\u05d4 \u05d6\u05d5.",
"Error posting your message.": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05e4\u05e8\u05e1\u05d5\u05dd \u05d4\u05d4\u05d5\u05d3\u05e2\u05d4 \u05e9\u05dc\u05da",
"Error removing user": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d4\u05e1\u05e8\u05ea \u05de\u05e9\u05ea\u05de\u05e9",
@@ -645,7 +663,6 @@
"Free text notes": "\u05d4\u05e2\u05e8\u05d5\u05ea \u05d8\u05e7\u05e1\u05d8 \u05d7\u05d5\u05e4\u05e9\u05d9",
"Frequently Asked Questions": "\u05e9\u05d0\u05dc\u05d5\u05ea \u05e0\u05e4\u05d5\u05e6\u05d5\u05ea",
"Full Name": "\u05e9\u05dd \u05de\u05dc\u05d0",
- "Full Profile": "\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05de\u05dc\u05d0",
"Fullscreen": "\u05de\u05e1\u05da \u05de\u05dc\u05d0",
"Fully Supported": "\u05e0\u05ea\u05de\u05da \u05d1\u05de\u05dc\u05d5\u05d0\u05d5",
"Gender": "\u05de\u05d2\u05d3\u05e8",
@@ -807,7 +824,6 @@
"License Display": "\u05ea\u05e6\u05d5\u05d2\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05df",
"License Type": "\u05e1\u05d5\u05d2 \u05e8\u05d9\u05e9\u05d9\u05d5\u05df",
"Limit Access": "\u05d2\u05d9\u05e9\u05d4 \u05de\u05d5\u05d2\u05d1\u05dc\u05ea",
- "Limited Profile": "\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05d7\u05dc\u05e7\u05d9",
"Link Description": "\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8",
"Link Your Account": "\u05e7\u05e9\u05e8 \u05d0\u05ea \u05d7\u05e9\u05d1\u05d5\u05e0\u05da",
"Link types should be unique.": "\u05e2\u05dc \u05e1\u05d5\u05d2\u05d9 \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05d4\u05d9\u05d5\u05ea \u05d9\u05d7\u05d5\u05d3\u05d9\u05d9\u05dd.",
@@ -828,6 +844,7 @@
"Loading content": "\u05d8\u05d5\u05e2\u05df \u05ea\u05d5\u05db\u05df",
"Loading data...": "\u05d8\u05d5\u05e2\u05df \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd...",
"Loading more threads": "\u05d8\u05d5\u05e2\u05df \u05e2\u05d5\u05d3 \u05e9\u05e8\u05e9\u05d5\u05e8\u05d9\u05dd",
+ "Loading posts list": "\u05d8\u05d5\u05e2\u05df \u05e8\u05e9\u05d9\u05de\u05ea \u05e4\u05d5\u05e1\u05d8\u05d9\u05dd",
"Loading your courses": "\u05d8\u05d5\u05e2\u05df \u05d0\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05e9\u05dc\u05da",
"Location in Course": "\u05de\u05d9\u05e7\u05d5\u05dd \u05d1\u05e7\u05d5\u05e8\u05e1",
"Lock this asset": "\u05e0\u05e2\u05dc \u05e0\u05db\u05e1 \u05d6\u05d4",
@@ -879,6 +896,7 @@
"New document": "\u05de\u05e1\u05de\u05da \u05d7\u05d3\u05e9",
"New enrollment mode:": "\u05de\u05e6\u05d1 \u05d4\u05e8\u05e9\u05de\u05d4 \u05d7\u05d3\u05e9:",
"New window": "\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9",
+ "New {component_type}": "\u05d7\u05d3\u05e9 {component_type} ",
"Next": "\u05d4\u05d1\u05d0",
"Next Step: Confirm your identity": "\u05d4\u05e9\u05dc\u05d1 \u05d4\u05d1\u05d0: \u05d0\u05de\u05ea \u05d0\u05ea \u05d6\u05d4\u05d5\u05ea\u05da",
"Next: %(nextStepTitle)s": "\u05d4\u05d1\u05d0: %(nextStepTitle)s",
@@ -891,10 +909,12 @@
"No color": "\u05dc\u05dc\u05d0 \u05e6\u05d1\u05e2",
"No content-specific discussion topics exist.": "\u05dc\u05d0 \u05e7\u05d9\u05d9\u05de\u05d9\u05dd \u05e0\u05d5\u05e9\u05d0\u05d9 \u05d3\u05d9\u05d5\u05df \u05e1\u05e4\u05e6\u05d9\u05e4\u05d9\u05d9\u05dd \u05dc\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3",
"No description available": "\u05d0\u05d9\u05df \u05ea\u05d9\u05d0\u05d5\u05e8 \u05d6\u05de\u05d9\u05df",
+ "No posts matched your query.": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05e4\u05d5\u05e1\u05d8\u05d9\u05dd \u05d4\u05ea\u05d5\u05d0\u05de\u05d9\u05dd \u05d0\u05ea \u05d4\u05e9\u05d0\u05d9\u05dc\u05ea\u05d0 \u05e9\u05dc\u05da.",
"No prerequisite": "\u05dc\u05dc\u05d0 \u05d3\u05e8\u05d9\u05e9\u05d4 \u05de\u05d5\u05e7\u05d3\u05de\u05ea",
"No receipt available": "\u05d0\u05d9\u05df \u05e7\u05d1\u05dc\u05d4 \u05d6\u05de\u05d9\u05e0\u05d4",
"No results": "\u05d0\u05d9\u05df \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea ",
"No results found for \"%(query_string)s\". Please try searching again.": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 \"%(query_string)s\". \u05d0\u05e0\u05d0 \u05e0\u05e1\u05d4 \u05dc\u05d7\u05e4\u05e9 \u05e9\u05d5\u05d1.",
+ "No results found for {original_query}. Showing results for {suggested_query}.": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 {original_query}. \u05de\u05e8\u05d0\u05d4 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 {suggested_query}.",
"No sources": "\u05d0\u05d9\u05df \u05de\u05e7\u05d5\u05e8\u05d5\u05ea",
"No tasks currently running.": "\u05d0\u05d9\u05df \u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05d1\u05d4\u05e8\u05e6\u05d4 \u05db\u05e8\u05d2\u05e2.",
"No validation is performed on policy keys or value pairs. If you are having difficulties, check your formatting.": "\u05dc\u05d0 \u05d1\u05d5\u05e6\u05e2 \u05d0\u05d9\u05de\u05d5\u05ea \u05d1\u05e0\u05d5\u05d2\u05e2 \u05dc\u05e7\u05d5\u05d5\u05d9 \u05de\u05d3\u05d9\u05e0\u05d9\u05d5\u05ea \u05d0\u05d5 \u05e6\u05de\u05d3\u05d9 \u05e2\u05e8\u05db\u05d9\u05dd. \u05d1\u05de\u05d9\u05d3\u05d4 \u05d5\u05d0\u05ea\u05d4 \u05e0\u05ea\u05e7\u05dc \u05d1\u05e7\u05e9\u05d9\u05d9\u05dd, \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05e2\u05d9\u05e6\u05d5\u05d1\u05da.",
@@ -940,6 +960,7 @@
"Order Details": "\u05e4\u05e8\u05d8\u05d9 \u05d4\u05d6\u05de\u05e0\u05d4",
"Order History": "\u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d9\u05ea \u05d4\u05d6\u05de\u05e0\u05d5\u05ea",
"Order No.": "\u05de\u05e1\u05e4\u05e8 \u05d4\u05d6\u05de\u05e0\u05d4",
+ "Order Number": "\u05de\u05e1\u05e4\u05e8 \u05d4\u05d6\u05de\u05e0\u05d4",
"Organization": "\u05d0\u05e8\u05d2\u05d5\u05df",
"Organization ": "\u05d0\u05e8\u05d2\u05d5\u05df ",
"Organization Name": "\u05e9\u05dd \u05d4\u05d0\u05e8\u05d2\u05d5\u05df",
@@ -1041,9 +1062,6 @@
"Professional Certificate for {courseName}": "\u05ea\u05e2\u05d5\u05d3\u05d4 \u05de\u05e7\u05e6\u05d5\u05e2\u05d9\u05ea \u05e2\u05d1\u05d5\u05e8 {courseName}",
"Professional Education": "\u05d4\u05e9\u05db\u05dc\u05d4 \u05de\u05e7\u05e6\u05d5\u05e2\u05d9\u05ea",
"Professional Education Verified Certificate": "\u05ea\u05e2\u05d5\u05d3\u05d4 \u05de\u05d0\u05d5\u05de\u05ea\u05ea \u05de\u05e7\u05e6\u05d5\u05e2\u05d9\u05ea",
- "Profile": "\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc",
- "Profile Image": "\u05ea\u05de\u05d5\u05e0\u05ea \u05e4\u05e8\u05d5\u05e4\u05d9\u05dc",
- "Profile image for {username}": "\u05ea\u05de\u05d5\u05e0\u05ea \u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05e2\u05d1\u05d5\u05e8 {username} ",
"Promote another member to Admin to remove your admin rights": "\u05e7\u05d3\u05dd \u05d7\u05d1\u05e8 \u05d0\u05d7\u05e8 \u05dc\u05de\u05e0\u05d4\u05dc \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d4\u05e1\u05d9\u05e8 \u05d0\u05ea \u05d6\u05db\u05d5\u05d9\u05d5\u05ea\u05d9\u05da \u05d4\u05e0\u05d9\u05d4\u05d5\u05dc\u05d9\u05d5\u05ea",
"Provisional": "\u05d6\u05de\u05e0\u05d9",
"Provisionally Supported": "\u05e0\u05ea\u05de\u05da \u05d1\u05d0\u05d5\u05e4\u05df \u05d6\u05de\u05e0\u05d9",
@@ -1056,6 +1074,7 @@
"Publishing": "\u05de\u05e4\u05e8\u05e1\u05dd",
"Publishing Status": "\u05de\u05e6\u05d1 \u05e4\u05e8\u05e1\u05d5\u05dd",
"Question": "\u05e9\u05d0\u05dc\u05d4",
+ "Questions raise issues that need answers. Discussions share ideas and start conversations. (Required)": "\u05d1\u05e2\u05d6\u05e8\u05ea \u05dc\u05d7\u05e6\u05df '\u05e9\u05d0\u05dc\u05d5\u05ea' \u05ea\u05d5\u05db\u05dc \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05e1\u05d5\u05d2\u05d9\u05d4 \u05de\u05e1\u05d5\u05d9\u05de\u05ea \u05d4\u05de\u05e6\u05e8\u05d9\u05db\u05d4 \u05ea\u05e9\u05d5\u05d1\u05d4. \u05d1\u05e2\u05d6\u05e8\u05ea \u05dc\u05d7\u05e6\u05df '\u05d3\u05d9\u05d5\u05e0\u05d9\u05dd' \u05ea\u05d5\u05db\u05dc \u05dc\u05d7\u05dc\u05d5\u05e7 \u05e8\u05e2\u05d9\u05d5\u05e0\u05d5\u05ea \u05d5\u05dc\u05d4\u05ea\u05d7\u05d9\u05dc \u05d1\u05e9\u05d9\u05d7\u05d5\u05ea \u05e2\u05dc \u05e0\u05d5\u05e9\u05d0\u05d9 \u05d4\u05e7\u05d5\u05e8\u05e1 \u05d4\u05e9\u05d5\u05e0\u05d9\u05dd. (\u05d7\u05d5\u05d1\u05d4)",
"Queued": "\u05de\u05de\u05ea\u05d9\u05df \u05d1\u05ea\u05d5\u05e8",
"Read More": "\u05e7\u05e8\u05d0 \u05e2\u05d5\u05d3",
"Reason": "\u05e1\u05d9\u05d1\u05d4",
@@ -1090,6 +1109,7 @@
"Remove {role} Access": "\u05d4\u05e1\u05e8 \u05d2\u05d9\u05e9\u05ea {role}",
"Remove {video_name} video": "\u05d4\u05e1\u05e8 \u05d0\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d9\u05d3\u05d0\u05d5 {video_name} ",
"Removing": "\u05de\u05e1\u05d9\u05e8",
+ "Removing a video from this list does not affect course content. Any content that uses a previously uploaded video ID continues to display in the course.": "\u05d4\u05e1\u05e8\u05ea \u05e1\u05e8\u05d8\u05d5\u05df \u05d5\u05d9\u05d3\u05d0\u05d5 \u05de\u05e8\u05e9\u05d9\u05de\u05d4 \u05d6\u05d5 \u05d0\u05d9\u05e0\u05d4 \u05de\u05e9\u05e4\u05d9\u05e2\u05d4 \u05e2\u05dc \u05ea\u05d5\u05db\u05df \u05d4\u05e7\u05d5\u05e8\u05e1. \u05db\u05dc \u05ea\u05d5\u05db\u05df \u05d4\u05de\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05e1\u05e4\u05e8 \u05de\u05d6\u05d4\u05d4 \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05e9\u05d4\u05d5\u05e2\u05dc\u05d4 \u05d1\u05e2\u05d1\u05e8 \u05de\u05de\u05e9\u05d9\u05da \u05dc\u05d4\u05e6\u05d9\u05d2 \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"Replace": "\u05d4\u05d7\u05dc\u05e3",
"Replace all": "\u05d4\u05d7\u05dc\u05e3 \u05d4\u05db\u05dc",
"Replace with": "\u05d4\u05d7\u05dc\u05e3 \u05d1",
@@ -1107,6 +1127,7 @@
"Reset Your Password": "\u05d0\u05e4\u05e1 \u05d0\u05ea \u05e1\u05d9\u05e1\u05de\u05ea\u05da",
"Reset attempts for all students on problem '<%- problem_id %>'?": "\u05d0\u05e4\u05e1 \u05e0\u05d9\u05e1\u05d9\u05d5\u05e0\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 \u05db\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd \u05d1\u05d1\u05e2\u05d9\u05d4 '<%- problem_id %>'? ",
"Reset my password": "\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05e9\u05dc\u05d9",
+ "Responses could not be loaded. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05ea\u05d2\u05d5\u05d1\u05d5\u05ea. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"Restore enrollment code": "\u05e9\u05d7\u05d6\u05e8 \u05e7\u05d5\u05d3 \u05d4\u05e8\u05e9\u05de\u05d4",
"Restore last draft": "\u05e9\u05d7\u05d6\u05e8 \u05d8\u05d9\u05d5\u05d8\u05d4 \u05d0\u05d7\u05e8\u05d5\u05e0\u05d4",
"Retake Photo": "\u05e6\u05dc\u05dd \u05e9\u05d5\u05d1 \u05ea\u05de\u05d5\u05e0\u05d4",
@@ -1142,6 +1163,7 @@
"Search teams": "\u05d7\u05d9\u05e4\u05d5\u05e9 \u05e6\u05d5\u05d5\u05ea\u05d9\u05dd",
"Section": "\u05e4\u05e8\u05e7",
"Section Visibility": "\u05ea\u05e6\u05d5\u05d2\u05ea \u05e4\u05e8\u05e7",
+ "Sections": "\u05e4\u05e8\u05e7\u05d9\u05dd",
"See all teams in your course, organized by topic. Join a team to collaborate with other learners who are interested in the same topic as you are.": "\u05e8\u05d0\u05d4 \u05e9\u05db\u05dc \u05d4\u05e6\u05d5\u05d5\u05ea\u05d9\u05dd \u05e9\u05d1\u05e7\u05d5\u05e8\u05e1 \u05e9\u05dc\u05da \u05de\u05d0\u05d5\u05e8\u05d2\u05e0\u05d9\u05dd \u05dc\u05e4\u05d9 \u05e0\u05d5\u05e9\u05d0. \u05d4\u05e6\u05d8\u05e8\u05e3 \u05dc\u05e6\u05d5\u05d5\u05ea \u05db\u05d3\u05d9 \u05dc\u05e9\u05ea\u05e3 \u05e4\u05e2\u05d5\u05dc\u05d4 \u05e2\u05dd \u05ea\u05dc\u05de\u05d9\u05d3\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9\u05dd \u05d4\u05de\u05e2\u05d5\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd \u05d1\u05d0\u05d5\u05ea\u05d5 \u05e0\u05d5\u05e9\u05d0 \u05d1\u05d5 \u05d0\u05ea\u05d4 \u05de\u05ea\u05e2\u05e0\u05d9\u05d9\u05df.",
"Select a Content Group": "\u05d1\u05d7\u05e8 \u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df",
"Select a chapter": "\u05d1\u05d7\u05e8 \u05e4\u05e8\u05e7",
@@ -1196,6 +1218,7 @@
"Showing {currentItemRange} out of {totalItemsCount}, sorted by {sortName} descending": "\u05de\u05e6\u05d9\u05d2 {currentItemRange} \u05de\u05ea\u05d5\u05da {totalItemsCount}, \u05de\u05de\u05d5\u05d9\u05df \u05d1\u05e1\u05d3\u05e8 \u05d9\u05d5\u05e8\u05d3 \u05e9\u05dc {sortName} ",
"Showing {firstIndex} out of {numItems} total": "\u05de\u05e6\u05d9\u05d2 {firstIndex} \u05de\u05ea\u05d5\u05da {numItems} \u05e1\u05da \u05d4\u05db\u05dc",
"Showing {firstIndex}-{lastIndex} out of {numItems} total": "\u05de\u05e6\u05d9\u05d2 {firstIndex}-{lastIndex} \u05de\u05ea\u05d5\u05da {numItems} \u05e1\u05da \u05d4\u05db\u05dc",
+ "Sign In": "\u05d4\u05ea\u05d7\u05d1\u05e8",
"Sign in": "\u05db\u05e0\u05d9\u05e1\u05d4",
"Sign in here using your email address and password, or use one of the providers listed below.": "\u05d4\u05d9\u05db\u05e0\u05e1 \u05db\u05d0\u05df \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d5\u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05e9\u05dc\u05da \u05d0\u05d5 \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05d0\u05d7\u05d3 \u05de\u05d4\u05e1\u05e4\u05e7\u05d9\u05dd \u05d4\u05e8\u05e9\u05d5\u05de\u05d9\u05dd \u05d1\u05d4\u05de\u05e9\u05da.",
"Sign in here using your email address and password.": "\u05d4\u05d9\u05db\u05e0\u05e1 \u05db\u05d0\u05df \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d5\u05d4\u05e1\u05d9\u05e1\u05de\u05d4.",
@@ -1241,6 +1264,9 @@
"Student": "\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8",
"Student Removed from certificate white list successfully.": "\u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d4\u05d5\u05e1\u05e8 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05de\u05d4\u05e8\u05e9\u05d9\u05de\u05d4 \u05d4\u05dc\u05d1\u05e0\u05d4 \u05e9\u05dc \u05d4\u05ea\u05e2\u05d5\u05d3\u05d5\u05ea.",
"Student email or username": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d0\u05d5 \u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9 \u05e9\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8",
+ "Student username/email field is required and can not be empty. Kindly fill in username/email and then press \"Add to Exception List\" button.": "\u05e9\u05d3\u05d4 \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9/\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d4\u05d5\u05d0 \u05e9\u05d3\u05d4 \u05d7\u05d5\u05d1\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05d0\u05d9\u05e8\u05d5 \u05e8\u05d9\u05e7. \u05d0\u05e0\u05d0 \u05de\u05dc\u05d0 \u05d0\u05ea \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9/\u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d5\u05dc\u05d0\u05d7\u05e8 \u05de\u05db\u05df \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05d7\u05e6\u05df \"\u05d4\u05d5\u05e1\u05e3 \u05dc\u05e8\u05e9\u05d9\u05de\u05ea \u05d7\u05e8\u05d9\u05d2\u05d9\u05dd\".",
+ "Student username/email field is required and can not be empty. Kindly fill in username/email and then press \"Invalidate Certificate\" button.": "\u05e9\u05d3\u05d4 \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9/\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc \u05d4\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d4\u05d5\u05d0 \u05e9\u05d3\u05d4 \u05d7\u05d5\u05d1\u05d4 \u05d5\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05d0\u05d9\u05e8\u05d5 \u05e8\u05d9\u05e7. \u05d0\u05e0\u05d0 \u05de\u05dc\u05d0 \u05d0\u05ea \u05e9\u05dd \u05d4\u05de\u05e9\u05ea\u05de\u05e9/\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d5\u05dc\u05d0\u05d7\u05e8 \u05de\u05db\u05df \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05d7\u05e6\u05df \"\u05e4\u05e1\u05d9\u05dc\u05ea \u05ea\u05e2\u05d5\u05d3\u05d4\".",
+ "Studio's having trouble saving your work": "\u05e1\u05d8\u05d5\u05d3\u05d9\u05d5 \u05de\u05ea\u05e7\u05e9\u05d4 \u05dc\u05e9\u05de\u05d5\u05e8 \u05d0\u05ea \u05e2\u05d1\u05d5\u05d3\u05ea\u05da",
"Studio:": "\u05e1\u05d8\u05d5\u05d3\u05d9\u05d5:",
"Style": "\u05e1\u05d2\u05e0\u05d5\u05df",
"Subject": "\u05e0\u05d5\u05e9\u05d0",
@@ -1298,8 +1324,8 @@
"Team name cannot have more than 255 characters.": "\u05e9\u05dd \u05d4\u05e6\u05d5\u05d5\u05ea \u05d0\u05d9\u05e0\u05d5 \u05d9\u05db\u05d5\u05dc \u05dc\u05d7\u05e8\u05d5\u05d2 \u05de-255 \u05ea\u05d5\u05d5\u05d9\u05dd.",
"Teams": "\u05e6\u05d5\u05d5\u05ea\u05d9\u05dd",
"Teams Pagination": "\u05e2\u05d9\u05de\u05d5\u05d3 \u05e6\u05d5\u05d5\u05ea\u05d9\u05dd",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\u05e1\u05e4\u05e8 \u05de\u05e2\u05d8 \u05e2\u05dc \u05e2\u05e6\u05de\u05da \u05dc\u05ea\u05dc\u05de\u05d9\u05d3\u05d9\u05dd \u05d4\u05d0\u05d7\u05e8\u05d9\u05dd: \u05d4\u05d9\u05db\u05df \u05d0\u05ea\u05d4 \u05d2\u05e8, \u05de\u05d4\u05dd \u05ea\u05d7\u05d5\u05de\u05d9 \u05d4\u05e2\u05e0\u05d9\u05d9\u05df \u05e9\u05dc\u05da, \u05de\u05d3\u05d5\u05e2 \u05e0\u05e8\u05e9\u05de\u05ea \u05dc\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05d0\u05d5 \u05de\u05d4 \u05d0\u05ea\u05d4 \u05de\u05e7\u05d5\u05d5\u05d4 \u05dc\u05dc\u05de\u05d5\u05d3.",
"Templates": "\u05ea\u05d1\u05e0\u05d9\u05d5\u05ea",
+ "Terms of Service and Honor Code": "\u05ea\u05e0\u05d0\u05d9 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d5\u05e7\u05d5\u05d3 \u05d0\u05ea\u05d9",
"Text": "\u05d8\u05e7\u05e1\u05d8",
"Text color": "\u05e6\u05d1\u05e2 \u05d8\u05e7\u05e1\u05d8",
"Text to display": "\u05d8\u05e7\u05e1\u05d8 \u05dc\u05d4\u05e6\u05d2\u05d4",
@@ -1350,6 +1376,7 @@
"The organization that this signatory belongs to, as it should appear on certificates.": "\u05d7\u05ea\u05d9\u05de\u05ea \u05d4\u05d0\u05e8\u05d2\u05d5\u05df, \u05db\u05e4\u05d9 \u05e9\u05d4\u05d9\u05d0 \u05d0\u05de\u05d5\u05e8\u05d4 \u05dc\u05d4\u05d5\u05e4\u05d9\u05e2 \u05d1\u05ea\u05e2\u05d5\u05d3\u05d4.",
"The page \"{route}\" could not be found.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \"{route}\".",
"The photo of your face matches the photo on your ID.": "\u05d4\u05ea\u05de\u05d5\u05e0\u05d4 \u05e9\u05dc \u05e4\u05e0\u05d9\u05da \u05ea\u05d5\u05d0\u05de\u05ea \u05dc\u05ea\u05de\u05d5\u05e0\u05d4 \u05e9\u05d1\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d4\u05de\u05d6\u05d4\u05d4 \u05e9\u05dc\u05da.",
+ "The post you selected has been deleted.": "\u05d4\u05e4\u05d5\u05e1\u05d8 \u05e9\u05d1\u05d7\u05e8\u05ea \u05e0\u05de\u05d7\u05e7.",
"The published branch version, {published}, was reset to the draft branch version, {draft}.": "\u05d2\u05e8\u05e1\u05ea \u05d4\u05de\u05d3\u05d5\u05e8 \u05e9\u05e4\u05d5\u05e8\u05e1\u05dd, {published}, \u05d0\u05d5\u05e4\u05e1\u05d4 \u05dc\u05d2\u05e8\u05e1\u05ea \u05de\u05d3\u05d5\u05e8 \u05d4\u05d8\u05d9\u05d5\u05d8\u05d4, {draft}.",
"The raw error message is:": "\u05d4\u05d5\u05d3\u05e2\u05ea \u05d4\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d4\u05d9\u05d0:",
"The selected content group does not exist": "\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05e9\u05e0\u05d1\u05d7\u05e8\u05d4 \u05d0\u05d9\u05e0\u05d4 \u05e7\u05d9\u05d9\u05de\u05ea",
@@ -1360,6 +1387,7 @@
"The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.": "\u05de\u05e9\u05e7\u05dc \u05db\u05dc \u05d4\u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05e9\u05dc \u05e1\u05d5\u05d2 \u05d6\u05d4 \u05d4\u05d5\u05d0 \u05db\u05d0\u05d7\u05d5\u05d6 \u05de\u05e1\u05da \u05d4\u05e6\u05d9\u05d5\u05df, \u05dc\u05d3\u05d5\u05d2\u05de\u05d4, 40. \u05d0\u05dc \u05ea\u05db\u05dc\u05d5\u05dc \u05d0\u05ea \u05e1\u05de\u05dc \u05d4\u05d0\u05d7\u05d5\u05d6.",
"The {cohortGroupName} cohort has been created. You can manually add students to this cohort below.": "\u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05dc\u05d9\u05de\u05d5\u05d3 {cohortGroupName} \u05e0\u05d5\u05e6\u05e8\u05d4. \u05d0\u05ea\u05d4 \u05d9\u05db\u05d5\u05dc \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd \u05d1\u05e6\u05d5\u05e8\u05d4 \u05d9\u05d3\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3 \u05d6\u05d5. ",
"There are invalid keywords in your email. Check the following keywords and try again.": "\u05d9\u05e9\u05e0\u05df \u05de\u05d9\u05dc\u05d5\u05ea \u05de\u05e4\u05ea\u05d7 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9\u05d5\u05ea \u05d1\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc\u05da. \u05d0\u05e0\u05d0 \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05de\u05d9\u05dc\u05d5\u05ea \u05d4\u05de\u05e4\u05ea\u05d7 \u05d4\u05d1\u05d0\u05d5\u05ea \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
+ "There has been a failure to export to XML at least one component. It is recommended that you go to the edit page and repair the error before attempting another export. Please check that all components on the page are valid and do not display any error messages.": "\u05d9\u05e6\u05d5\u05d0 \u05e9\u05dc \u05e8\u05db\u05d9\u05d1 \u05d0\u05d7\u05d3 \u05dc\u05e4\u05d7\u05d5\u05ea \u05dc-XML, \u05e0\u05db\u05e9\u05dc. \u05de\u05d5\u05de\u05dc\u05e5 \u05dc\u05d2\u05e9\u05ea \u05dc\u05e2\u05de\u05d5\u05d3 \u05d4\u05e2\u05e8\u05d9\u05db\u05d4 \u05d5\u05dc\u05ea\u05e7\u05df \u05d0\u05ea \u05d4\u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05e4\u05e0\u05d9 \u05d1\u05d9\u05e6\u05d5\u05e2 \u05d9\u05e6\u05d5\u05d0 \u05e0\u05d5\u05e1\u05e3. \u05d0\u05e0\u05d0 \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d7\u05d5\u05e7\u05d9\u05d5\u05ea \u05db\u05dc \u05d4\u05e8\u05db\u05d9\u05d1\u05d9\u05dd \u05d1\u05e2\u05de\u05d5\u05d3 \u05d5\u05db\u05d9 \u05d4\u05dd \u05d0\u05d9\u05e0\u05dd \u05de\u05e6\u05d9\u05d2\u05d9\u05dd \u05d4\u05d5\u05d3\u05e2\u05d5\u05ea \u05e9\u05d2\u05d9\u05d0\u05d4. ",
"There has been an error processing your survey.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e2\u05d9\u05d1\u05d5\u05d3 \u05d4\u05e1\u05e7\u05e8 \u05e9\u05dc\u05da.",
"There has been an error while exporting.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05d4\u05d9\u05d9\u05e6\u05d5\u05d0.",
"There has been an error with your export.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d9\u05d9\u05e6\u05d5\u05d0 \u05e9\u05dc\u05da. ",
@@ -1369,9 +1397,15 @@
"There must be one cohort to which students can automatically be assigned.": "\u05d7\u05d9\u05d9\u05d1\u05ea \u05dc\u05d4\u05d9\u05d5\u05ea \u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3 \u05d0\u05d7\u05ea \u05e9\u05d0\u05dc\u05d9\u05d4 \u05e0\u05d9\u05ea\u05df \u05dc\u05e9\u05d9\u05d9\u05da \u05e1\u05d8\u05d5\u05d3\u05e0\u05d8\u05d9\u05dd \u05d1\u05d0\u05d5\u05e4\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9.",
"There was a problem creating the report. Select \"Create Executive Summary\" to try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05d1\u05e2\u05d9\u05d4 \u05d1\u05e2\u05ea \u05d9\u05e6\u05d9\u05e8\u05ea \u05d4\u05d3\u05d5\u05d7. \u05d1\u05d7\u05e8 \"\u05e6\u05d5\u05e8 \u05ea\u05e7\u05e6\u05d9\u05e8 \u05de\u05e0\u05d4\u05dc\u05d9\u05dd\" \u05db\u05d3\u05d9 \u05dc\u05e0\u05e1\u05d5\u05ea \u05e9\u05d5\u05d1.",
"There was an error changing the user's role": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e9\u05d9\u05e0\u05d5\u05d9 \u05ea\u05e4\u05e7\u05d9\u05d3 \u05d4\u05de\u05e9\u05ea\u05de\u05e9.",
+ "There was an error during the upload process.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05ea\u05d4\u05dc\u05d9\u05da \u05d4\u05e2\u05dc\u05d0\u05ea \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd.",
"There was an error obtaining email content history for this course.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e7\u05d1\u05dc\u05ea \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05e9\u05dc \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"There was an error obtaining email task history for this course.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e7\u05d1\u05dc\u05ea \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05ea \u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"There was an error retrieving preview results for this catalog. Please check that your query is correct and try again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05e2\u05ea \u05d0\u05b4\u05d7\u05d6\u05d5\u05e8 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d4\u05ea\u05e6\u05d5\u05d2\u05d4 \u05d4\u05de\u05d5\u05e7\u05d3\u05de\u05ea \u05e2\u05d1\u05d5\u05e8 \u05e7\u05d8\u05dc\u05d5\u05d2 \u05d6\u05d4. \u05e0\u05d0 \u05d1\u05d3\u05d5\u05e7 \u05e9\u05d4\u05e9\u05d0\u05d9\u05dc\u05ea\u05d0 \u05e0\u05db\u05d5\u05e0\u05d4 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
+ "There was an error while importing the new course to our database.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05d9\u05d1\u05d5\u05d0 \u05d4\u05e7\u05d5\u05e8\u05e1 \u05d4\u05d7\u05d3\u05e9 \u05dc\u05d1\u05e1\u05d9\u05e1 \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc\u05e0\u05d5.",
+ "There was an error while importing the new library to our database.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05d9\u05d1\u05d5\u05d0 \u05d4\u05e1\u05e4\u05e8\u05d9\u05d9\u05d4 \u05d4\u05d7\u05d3\u05e9\u05d4 \u05dc\u05d1\u05e1\u05d9\u05e1 \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc\u05e0\u05d5.",
+ "There was an error while unpacking the file.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d7\u05d9\u05dc\u05d5\u05e5 \u05d4\u05e7\u05d5\u05d1\u05e5.",
+ "There was an error while verifying the file you submitted.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d6\u05de\u05df \u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5 \u05e9\u05d4\u05d2\u05e9\u05ea.",
+ "There was an error with the upload": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05d4\u05e2\u05dc\u05d0\u05d4",
"There was an error, try searching again.": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4, \u05e0\u05e1\u05d4 \u05dc\u05d7\u05e4\u05e9 \u05e9\u05d5\u05d1.",
"There were errors reindexing course.": "\u05e7\u05e8\u05d5 \u05e9\u05d2\u05d9\u05d0\u05d5\u05ea \u05d1\u05de\u05d9\u05d5\u05df \u05de\u05d7\u05d3\u05e9 \u05e9\u05dc \u05d4\u05e7\u05d5\u05e8\u05e1.",
"There's already another assignment type with this name.": "\u05d9\u05e9 \u05db\u05d1\u05e8 \u05e1\u05d5\u05d2 \u05de\u05e9\u05d9\u05de\u05d4 \u05d0\u05d7\u05e8 \u05d1\u05e2\u05dc \u05e9\u05dd \u05d6\u05d4.",
@@ -1393,12 +1427,14 @@
"This browser cannot play .mp4, .ogg, or .webm files.": "\u05d3\u05e4\u05d3\u05e4\u05df \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05d9\u05db\u05d5\u05dc \u05dc\u05e0\u05d2\u05df \u05e7\u05d1\u05e6\u05d9 ogg .webm ,.mp4.",
"This catalog's courses:": "\u05d4\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05d1\u05e7\u05d8\u05dc\u05d5\u05d2 \u05d6\u05d4:",
"This certificate has already been activated and is live. Are you sure you want to continue editing?": "\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d6\u05d5 \u05d4\u05d5\u05e4\u05e2\u05dc\u05d4 \u05db\u05d1\u05e8 \u05d5\u05d4\u05d9\u05d0 \u05d1\u05de\u05e6\u05d1 \u05e4\u05e2\u05d9\u05dc. \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05de\u05e9\u05d9\u05da \u05d1\u05e2\u05e8\u05d9\u05db\u05d4?",
+ "This comment could not be deleted. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \u05d4\u05d4\u05e2\u05e8\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"This component has validation issues.": "\u05dc\u05e8\u05db\u05d9\u05d1 \u05d6\u05d4 \u05d1\u05e2\u05d9\u05d5\u05ea \u05d0\u05d9\u05de\u05d5\u05ea.",
"This configuration is currently used in content experiments. If you make changes to the groups, you may need to edit those experiments.": "\u05d4\u05d2\u05d3\u05e8\u05d4 \u05d6\u05d5 \u05e0\u05de\u05e6\u05d0\u05ea \u05db\u05e2\u05ea \u05d1\u05e9\u05d9\u05de\u05d5\u05e9 \u05e0\u05d9\u05e1\u05d5\u05d9 \u05ea\u05d5\u05db\u05df. \u05d0\u05dd \u05ea\u05e9\u05e0\u05d4 \u05d0\u05ea \u05d4\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea, \u05d9\u05ea\u05db\u05df \u05e9\u05ea\u05e6\u05d8\u05e8\u05da \u05dc\u05d1\u05e6\u05e2 \u05e2\u05e8\u05d9\u05db\u05d4 \u05d1\u05e0\u05d9\u05e1\u05d5\u05d9\u05d9\u05dd \u05d0\u05dc\u05d5.",
"This content group is used in one or more units.": "\u05e0\u05e2\u05e9\u05d4 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df \u05d6\u05d5 \u05d1\u05d9\u05d7\u05d9\u05d3\u05d4 \u05d0\u05d7\u05ea \u05d0\u05d5 \u05d9\u05d5\u05ea\u05e8. ",
"This course has automatic cohorting enabled for verified track learners, but cohorts are disabled. You must enable cohorts for the feature to work.": "\u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4 \u05d9\u05e9 \u05de\u05d7\u05d6\u05d5\u05e8 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9 \u05e9\u05de\u05d5\u05e4\u05e2\u05dc \u05e2\u05d1\u05d5\u05e8 \u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d1\u05de\u05e1\u05dc\u05d5\u05dc \u05de\u05d0\u05d5\u05de\u05ea, \u05d0\u05da \u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05d4\u05dc\u05de\u05d9\u05d3\u05d4 \u05de\u05d5\u05e9\u05d1\u05ea\u05d9\u05dd. \u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05e4\u05e2\u05d9\u05dc \u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05dc\u05de\u05d9\u05d3\u05d4 \u05db\u05d3\u05d9 \u05e9\u05d4\u05ea\u05db\u05d5\u05e0\u05d4 \u05ea\u05e2\u05d1\u05d5\u05d3.",
"This course has automatic cohorting enabled for verified track learners, but the required cohort does not exist. You must create a manually-assigned cohort named '{verifiedCohortName}' for the feature to work.": "\u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4 \u05d9\u05e9 \u05de\u05d7\u05d6\u05d5\u05e8 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9 \u05e9\u05de\u05d5\u05e4\u05e2\u05dc \u05e2\u05d1\u05d5\u05e8 \u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d1\u05de\u05e1\u05dc\u05d5\u05dc \u05de\u05d0\u05d5\u05de\u05ea, \u05d0\u05da \u05de\u05d7\u05d6\u05d5\u05e8 \u05d4\u05dc\u05de\u05d9\u05d3\u05d4 \u05d4\u05d3\u05e8\u05d5\u05e9 \u05d0\u05d9\u05e0\u05d5 \u05e7\u05d9\u05d9\u05dd. \u05e2\u05dc\u05d9\u05da \u05dc\u05d9\u05e6\u05d5\u05e8 \u05de\u05d7\u05d6\u05d5\u05e8 \u05dc\u05de\u05d9\u05d3\u05d4 \u05e9\u05de\u05d5\u05e7\u05e6\u05d4 \u05d1\u05d0\u05d5\u05e4\u05df \u05d9\u05d3\u05e0\u05d9 \u05d4\u05de\u05db\u05d5\u05e0\u05d4 '{verifiedCohortName}' \u05db\u05d3\u05d9 \u05e9\u05d4\u05ea\u05db\u05d5\u05e0\u05d4 \u05ea\u05e2\u05d1\u05d5\u05d3.",
"This course uses automatic cohorting for verified track learners. You cannot disable cohorts, and you cannot rename the manual cohort named '{verifiedCohortName}'. To change the configuration for verified track cohorts, contact your edX partner manager.": "\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4 \u05de\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05d9\u05dd \u05e2\u05d1\u05d5\u05e8 \u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d1\u05de\u05e1\u05dc\u05d5\u05dc \u05de\u05d0\u05d5\u05de\u05ea. \u05d0\u05d9\u05e0\u05da \u05d9\u05db\u05d5\u05dc \u05dc\u05d4\u05e9\u05d1\u05d9\u05ea \u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d5\u05d0\u05d9\u05e0\u05da \u05d9\u05db\u05d5\u05dc \u05dc\u05e9\u05e0\u05d5\u05ea \u05d0\u05ea \u05d4\u05e9\u05dd \u05e9\u05dc \u05de\u05d7\u05d6\u05d5\u05e8 \u05dc\u05de\u05d9\u05d3\u05d4 \u05d9\u05d3\u05e0\u05d9 \u05d4\u05de\u05db\u05d5\u05e0\u05d4 '{verifiedCohortName}'. \u05db\u05d3\u05d9 \u05dc\u05e9\u05e0\u05d5\u05ea \u05d0\u05ea \u05d4\u05d4\u05d2\u05d3\u05e8\u05d4 \u05dc\u05de\u05d7\u05d6\u05d5\u05e8\u05d9 \u05dc\u05de\u05d9\u05d3\u05d4 \u05e2\u05dd \u05de\u05e2\u05e7\u05d1 \u05de\u05d0\u05d5\u05de\u05ea, \u05e6\u05d5\u05e8 \u05e7\u05e9\u05e8 \u05e2\u05dd \u05d4\u05de\u05e0\u05d4\u05dc \u05d4\u05e9\u05d5\u05ea\u05e3 \u05e9\u05dc\u05da \u05d1-edX.",
+ "This discussion could not be loaded. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05d0\u05ea \u05d4\u05d3\u05d9\u05d5\u05df. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"This image is for decorative purposes only and does not require a description.": "\u05ea\u05de\u05d5\u05e0\u05d4 \u05d6\u05d5 \u05e0\u05d5\u05e2\u05d3\u05d4 \u05dc\u05de\u05d8\u05e8\u05d5\u05ea \u05d3\u05e7\u05d5\u05e8\u05d8\u05d9\u05d1\u05d9\u05d5\u05ea \u05d1\u05dc\u05d1\u05d3 \u05d5\u05d0\u05d9\u05df \u05e6\u05d5\u05e8\u05da \u05d1\u05ea\u05d9\u05d0\u05d5\u05e8\u05d4.",
"This is the Description of the Group Configuration": "\u05d6\u05d4\u05d5 \u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05e7\u05d1\u05d5\u05e6\u05d4",
"This is the Name of the Group Configuration": "\u05d6\u05d4\u05d5 \u05e9\u05dd \u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05e7\u05d1\u05d5\u05e6\u05d4",
@@ -1407,14 +1443,26 @@
"This learner will be removed from the team, allowing another learner to take the available spot.": "\u05ea\u05dc\u05de\u05d9\u05d3 \u05d6\u05d4 \u05d9\u05d5\u05e1\u05e8 \u05de\u05d4\u05e6\u05d5\u05d5\u05ea, \u05db\u05da \u05e9\u05d9\u05ea\u05d0\u05e4\u05e9\u05e8 \u05dc\u05ea\u05dc\u05de\u05d9\u05d3 \u05d0\u05d7\u05e8 \u05dc\u05d4\u05e6\u05d8\u05e8\u05e3 \u05dc\u05de\u05e7\u05d5\u05dd \u05e9\u05d4\u05ea\u05e4\u05e0\u05d4.",
"This link will open in a modal window": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05d6\u05d4 \u05d9\u05e4\u05ea\u05d7 \u05d1\u05d7\u05dc\u05d5\u05e0\u05d9\u05ea \u05e9\u05d9\u05d7\u05d4",
"This link will open in a new browser window/tab": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05d6\u05d4 \u05d9\u05d9\u05e4\u05ea\u05d7 \u05d1\u05d7\u05dc\u05d5\u05df/\u05dc\u05e9\u05d5\u05e0\u05d9\u05ea \u05d3\u05e4\u05d3\u05e4\u05df \u05d7\u05d3\u05e9/\u05d4",
+ "This may be happening because of an error with our server or your internet connection. Try refreshing the page or making sure you are online.": "\u05d9\u05d9\u05ea\u05db\u05df \u05d5\u05d3\u05d1\u05e8 \u05d6\u05d4 \u05de\u05ea\u05e8\u05d7\u05e9 \u05d1\u05e9\u05dc \u05d8\u05e2\u05d5\u05ea \u05d1\u05e9\u05e8\u05ea \u05e9\u05dc\u05e0\u05d5 \u05d0\u05d5 \u05d1\u05d7\u05d9\u05d1\u05d5\u05e8 \u05d4\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8. \u05e0\u05e1\u05d4 \u05dc\u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d0\u05d5 \u05d5\u05d3\u05d0 \u05e9\u05d0\u05ea\u05d4 \u05de\u05e7\u05d5\u05d5\u05df.",
"This page contains information about orders that you have placed with {platform_name}.": "\u05e2\u05de\u05d5\u05d3 \u05d6\u05d4 \u05de\u05db\u05d9\u05dc \u05de\u05d9\u05d3\u05e2 \u05e2\u05dc \u05d4\u05d6\u05de\u05e0\u05d5\u05ea \u05e9\u05d1\u05d9\u05e6\u05e2\u05ea \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea {platform_name}.",
+ "This post could not be closed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e1\u05d2\u05d5\u05e8 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be flagged for abuse. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d3\u05d5\u05d5\u05d7 \u05e2\u05dc \u05d4\u05e4\u05d5\u05e1\u05d8 \u05db\u05d1\u05dc\u05ea\u05d9 \u05d4\u05d5\u05dc\u05dd. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be pinned. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e6\u05de\u05d9\u05d3 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be reopened. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e4\u05ea\u05d5\u05d7 \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be unflagged for abuse. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05d3\u05d9\u05d5\u05d5\u05d7 \u05e2\u05dc \u05d4\u05e4\u05d5\u05e1\u05d8 \u05db\u05d1\u05dc\u05ea\u05d9 \u05d4\u05d5\u05dc\u05dd. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This post could not be unpinned. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05e6\u05de\u05d3\u05ea \u05d4\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"This post is visible only to %(group_name)s.": "\u05e4\u05d5\u05e1\u05d8 \u05d6\u05d4 \u05d2\u05dc\u05d5\u05d9 \u05e8\u05e7 \u05dc-%(group_name)s.",
"This post is visible to everyone.": "\u05e4\u05d5\u05e1\u05d8 \u05d6\u05d4 \u05d2\u05dc\u05d5\u05d9 \u05dc\u05db\u05d5\u05dc\u05dd.",
"This problem has been reset.": "\u05d4\u05d1\u05e2\u05d9\u05d4 \u05dc\u05d0 \u05d0\u05d5\u05ea\u05d7\u05dc\u05d4.",
+ "This response could not be marked as an answer. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e1\u05de\u05df \u05d0\u05ea \u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05d4\u05d6\u05d5 \u05d1\u05ea\u05d5\u05e8 \u05ea\u05e9\u05d5\u05d1\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This response could not be marked as endorsed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e1\u05de\u05df \u05d0\u05ea \u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05d4\u05d6\u05d5 \u05d1\u05ea\u05d5\u05e8 \u05de\u05d5\u05de\u05dc\u05e6\u05ea. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This response could not be unendorsed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05e1\u05d9\u05de\u05d5\u05df \u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05d4\u05d6\u05d5 \u05d1\u05ea\u05d5\u05e8 \u05de\u05d5\u05de\u05dc\u05e6\u05ea. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "This response could not be unmarked as an answer. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05e1\u05d9\u05de\u05d5\u05df \u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05d4\u05d6\u05d5 \u05d1\u05ea\u05d5\u05e8 \u05ea\u05e9\u05d5\u05d1\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"This short name for the assignment type (for example, HW or Midterm) appears next to assignments on a learner's Progress page.": "\u05e9\u05dd \u05e7\u05e6\u05e8 \u05d6\u05d4 \u05dc\u05e1\u05d5\u05d2 \u05d4\u05de\u05e9\u05d9\u05de\u05d4 (\u05dc\u05d3\u05d5\u05d2\u05de\u05d4, \u05e9\"\u05d1 \u05d0\u05d5 \u05de\u05d1\u05d7\u05df \u05d0\u05de\u05e6\u05e2) \u05de\u05d5\u05e4\u05d9\u05e2 \u05dc\u05d9\u05d3 \u05d4\u05de\u05e9\u05d9\u05de\u05d5\u05ea \u05e9\u05d1\u05e2\u05de\u05d5\u05d3 \u05d4\u05d4\u05ea\u05e7\u05d3\u05de\u05d5\u05ea \u05e9\u05dc \u05d4\u05dc\u05d5\u05de\u05d3.",
"This team does not have any members.": "\u05d0\u05d9\u05df \u05d7\u05d1\u05e8\u05d9\u05dd \u05d1\u05e6\u05d5\u05d5\u05ea \u05d6\u05d4.",
"This team is full.": "\u05e6\u05d5\u05d5\u05ea \u05d6\u05d4 \u05de\u05dc\u05d0.",
"This thread is closed.": "\u05e9\u05e8\u05e9\u05d5\u05e8 \u05d6\u05d4 \u05e1\u05d2\u05d5\u05e8",
+ "This vote could not be processed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05d1\u05d3 \u05d0\u05ea \u05d4\u05d1\u05e7\u05e9\u05d4. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"Time Allotted (HH:MM):": "\u05d6\u05de\u05df \u05e9\u05d4\u05d5\u05e7\u05e6\u05d1 (\u05e9\u05e9:\u05d3\u05d3):",
"Time Sent": "\u05d6\u05de\u05df \u05d4\u05e9\u05dc\u05d9\u05d7\u05d4:",
"Time Sent:": "\u05d6\u05de\u05df \u05d4\u05e9\u05dc\u05d9\u05d7\u05d4:",
@@ -1466,6 +1514,7 @@
"Ungraded": "\u05dc\u05dc\u05d0 \u05e6\u05d9\u05d5\u05df",
"Unit": "\u05d9\u05d7\u05d9\u05d3\u05d4",
"Unit Visibility": "\u05e0\u05e8\u05d0\u05d5\u05ea \u05d9\u05d7\u05d9\u05d3\u05d4",
+ "Units": "\u05d9\u05d7\u05d9\u05d3\u05d5\u05ea",
"Unknown": "\u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2",
"Unknown Error Occurred.": "\u05d4\u05ea\u05e8\u05d7\u05e9\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4.",
"Unlink This Account": "\u05d4\u05e1\u05e8 \u05d0\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8 \u05e9\u05dc \u05d7\u05e9\u05d1\u05d5\u05df \u05d6\u05d4",
@@ -1503,7 +1552,9 @@
"Upload an image": "\u05d4\u05e2\u05dc\u05d4 \u05ea\u05de\u05d5\u05e0\u05d4",
"Upload an image or capture one with your web or phone camera.": "\u05d4\u05e2\u05dc\u05d4 \u05ea\u05de\u05d5\u05e0\u05d4 \u05d0\u05d5 \u05e6\u05dc\u05dd \u05d1\u05e2\u05d6\u05e8\u05ea \u05de\u05e6\u05dc\u05de\u05ea \u05d4\u05e8\u05e9\u05ea \u05d0\u05d5 \u05de\u05e6\u05dc\u05de\u05ea \u05d4\u05e0\u05d9\u05d9\u05d3 \u05e9\u05d1\u05e8\u05e9\u05d5\u05ea\u05da. ",
"Upload completed": "\u05d4\u05e2\u05dc\u05d0\u05d4 \u05d4\u05d5\u05e9\u05dc\u05de\u05d4",
+ "Upload completed for video {fileName}": "\u05d4\u05d4\u05e2\u05dc\u05d0\u05d4 \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d9\u05d3\u05d0\u05d5 {fileName} \u05d4\u05d5\u05e9\u05dc\u05de\u05d4",
"Upload failed": "\u05d4\u05e2\u05dc\u05d0\u05d4 \u05e0\u05db\u05e9\u05dc\u05d4",
+ "Upload failed for video {fileName}": "\u05d4\u05d4\u05e2\u05dc\u05d0\u05d4 \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d9\u05d3\u05d0\u05d5 {fileName} \u05dc\u05d0 \u05d4\u05e6\u05dc\u05d9\u05d7\u05d4",
"Upload instructor image.": "\u05d4\u05e2\u05dc\u05d4 \u05ea\u05de\u05d5\u05e0\u05ea \u05de\u05d3\u05e8\u05d9\u05da.",
"Upload is in progress. To avoid errors, stay on this page until the process is complete.": "\u05d4\u05e2\u05dc\u05d0\u05d4 \u05de\u05ea\u05d1\u05e6\u05e2\u05ea. \u05db\u05d3\u05d9 \u05dc\u05d4\u05d9\u05de\u05e0\u05e2 \u05de\u05e9\u05d2\u05d9\u05d0\u05d5\u05ea, \u05d4\u05d9\u05e9\u05d0\u05e8 \u05d1\u05e2\u05de\u05d5\u05d3 \u05d6\u05d4 \u05e2\u05d3 \u05e9\u05d4\u05ea\u05d4\u05dc\u05d9\u05da \u05d9\u05d5\u05e9\u05dc\u05dd.",
"Upload signature image.": "\u05d4\u05e2\u05dc\u05d4 \u05ea\u05de\u05d5\u05e0\u05ea \u05d7\u05ea\u05d9\u05de\u05d4.",
@@ -1528,10 +1579,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05e6\u05dc\u05de\u05ea \u05d4\u05e8\u05e9\u05ea \u05e9\u05dc\u05da \u05dc\u05e6\u05dc\u05dd \u05d0\u05ea \u05ea\u05de\u05d5\u05e0\u05ea \u05d4\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d4\u05de\u05d6\u05d4\u05d4 \u05e9\u05dc\u05da. \u05d0\u05e0\u05d5 \u05e0\u05ea\u05d0\u05d9\u05dd \u05d0\u05ea \u05d4\u05ea\u05de\u05d5\u05e0\u05d4 \u05d4\u05d6\u05d5 \u05dc\u05ea\u05de\u05d5\u05e0\u05ea \u05e4\u05e0\u05d9\u05da \u05d5\u05dc\u05e9\u05dd \u05d7\u05e9\u05d1\u05d5\u05e0\u05da. ",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05de\u05e6\u05dc\u05de\u05ea \u05d4\u05e8\u05e9\u05ea \u05e9\u05dc\u05da \u05dc\u05e6\u05dc\u05dd \u05d0\u05ea \u05e4\u05e0\u05d9\u05da. \u05d0\u05e0\u05d7\u05e0\u05d5 \u05e0\u05e9\u05d5\u05d5\u05d4 \u05d0\u05ea \u05d4\u05ea\u05de\u05d5\u05e0\u05d4 \u05dc\u05ea\u05de\u05d5\u05e0\u05ea\u05da \u05d1\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d4\u05de\u05d6\u05d4\u05d4.",
"Used": "\u05e0\u05e2\u05e9\u05d4 \u05e9\u05d9\u05de\u05d5\u05e9",
- "Used in {count} unit": [
- "\u05e0\u05e2\u05e9\u05d4 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05d9\u05d7\u05d9\u05d3\u05d4 {count}",
- "\u05e0\u05e2\u05e9\u05d4 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d1-{count} \u05d9\u05d7\u05d9\u05d3\u05d5\u05ea"
- ],
"User": "\u05de\u05e9\u05ea\u05de\u05e9",
"User Email": "\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e9\u05dc \u05de\u05e9\u05ea\u05de\u05e9",
"Username": "\u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9",
@@ -1575,6 +1622,7 @@
"\u05de\u05e6\u05d9\u05d2 \u05e7\u05d5\u05e8\u05e1 %s",
"\u05de\u05e6\u05d9\u05d2 %s \u05e7\u05d5\u05e8\u05e1\u05d9\u05dd"
],
+ "Visibility": "\u05ea\u05e6\u05d5\u05d2\u05d4",
"Visible to": "\u05d2\u05dc\u05d5\u05d9 \u05e2\u05d1\u05d5\u05e8:",
"Visible to Staff Only": "\u05d2\u05dc\u05d5\u05d9 \u05dc\u05e6\u05d5\u05d5\u05ea \u05d1\u05dc\u05d1\u05d3",
"Visual aids": "\u05e2\u05d6\u05e8\u05d9\u05dd \u05d5\u05d9\u05d6\u05d5\u05d0\u05dc\u05d9\u05dd",
@@ -1614,6 +1662,7 @@
"Would you like to sign in using your %(providerName)s credentials?": "\u05d4\u05d0\u05dd \u05ea\u05e8\u05e6\u05d4 \u05dc\u05d4\u05d9\u05db\u05e0\u05e1 \u05dc\u05d7\u05e9\u05d1\u05d5\u05df \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05e8\u05e9\u05d0\u05d5\u05ea %(providerName)s \u05e9\u05dc\u05da?",
"Year of Birth": "\u05e9\u05e0\u05ea \u05dc\u05d9\u05d3\u05d4",
"Yes, allow edits to the active Certificate": "\u05db\u05df, \u05d0\u05e4\u05e9\u05e8 \u05e2\u05e8\u05d9\u05db\u05d5\u05ea \u05d1\u05ea\u05e2\u05d5\u05d3\u05d4 \u05d4\u05e4\u05e2\u05d9\u05dc\u05d4",
+ "Yes, delete this {xblock_type}": "\u05db\u05df, \u05de\u05d7\u05e7 \u05d0\u05ea {xblock_type} \u05d6\u05d4",
"Yes, replace the edX transcript with the YouTube transcript": "\u05db\u05df, \u05d4\u05d7\u05dc\u05e3 \u05d0\u05ea \u05ea\u05de\u05dc\u05d9\u05dc edX \u05d1\u05ea\u05de\u05dc\u05d9\u05dc \u05d9\u05d5\u05d8\u05d9\u05d5\u05d1",
"You already belong to another team.": "\u05d0\u05ea\u05d4 \u05db\u05d1\u05e8 \u05e9\u05d9\u05d9\u05da \u05dc\u05e6\u05d5\u05d5\u05ea \u05d0\u05d7\u05e8.",
"You are a member of this team.": "\u05d0\u05ea\u05d4 \u05d7\u05d1\u05e8 \u05d1\u05e6\u05d5\u05d5\u05ea \u05d6\u05d4.",
@@ -1633,6 +1682,8 @@
"You cannot view the course as a student or beta tester before the course release date.": "\u05d0\u05d9\u05e0\u05da \u05d9\u05db\u05d5\u05dc \u05dc\u05e6\u05e4\u05d5\u05ea \u05d1\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4 \u05db\u05e1\u05d8\u05d5\u05d3\u05e0\u05d8 \u05d0\u05d5 \u05de\u05e9\u05ea\u05de\u05e9 \u05d1\u05d2\u05e8\u05e1\u05ea \u05d4\u05d1\u05d8\u05d0 \u05dc\u05e4\u05e0\u05d9 \u05ea\u05d0\u05e8\u05d9\u05da \u05d4\u05d4\u05e9\u05e7\u05d4 \u05e9\u05dc \u05d4\u05e7\u05d5\u05e8\u05e1.",
"You changed a video URL, but did not change the timed transcript file. Do you want to use the current timed transcript or upload a new .srt transcript file?": "\u05e9\u05d9\u05e0\u05d9\u05ea \u05d0\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05dc \u05e1\u05e8\u05d8\u05d5\u05df \u05d4\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5 \u05d0\u05da \u05dc\u05d0 \u05e9\u05d9\u05e0\u05d9\u05ea \u05d0\u05ea \u05e7\u05d5\u05d1\u05e5 \u05d4\u05ea\u05de\u05dc\u05d9\u05dc \u05d4\u05de\u05ea\u05d5\u05d6\u05de\u05df. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e7\u05d5\u05d1\u05e5 \u05d4\u05ea\u05de\u05dc\u05d9\u05dc \u05d4\u05e0\u05d5\u05db\u05d7\u05d9 \u05d0\u05d5 \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05e7\u05d5\u05d1\u05e5 \u05ea\u05de\u05dc\u05d9\u05dc SRT \u05d7\u05d3\u05e9?",
"You commented...": "\u05d4\u05d2\u05d1\u05ea...",
+ "You could not be subscribed to this post. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e8\u05e9\u05d5\u05dd \u05d0\u05d5\u05ea\u05da \u05dc\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
+ "You could not be unsubscribed from this post. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e9\u05dc\u05da \u05dc\u05e4\u05d5\u05e1\u05d8. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"You currently have no cohorts configured": "\u05dc\u05d0 \u05de\u05d5\u05d2\u05d3\u05e8\u05d5\u05ea \u05db\u05e2\u05ea \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05dc\u05d9\u05de\u05d5\u05d3",
"You did not select a content group": "\u05dc\u05d0 \u05d1\u05d7\u05e8\u05ea \u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df",
"You did not select any files to submit.": "\u05dc\u05d0 \u05d1\u05d7\u05e8\u05ea \u05d0\u05e3 \u05e7\u05d5\u05d1\u05e5 \u05dc\u05d4\u05d2\u05e9\u05d4.",
@@ -1641,22 +1692,22 @@
"You don't seem to have a webcam connected.": "\u05e0\u05e8\u05d0\u05d4 \u05db\u05d9 \u05dc\u05d0 \u05de\u05d7\u05d5\u05d1\u05e8\u05ea \u05de\u05e6\u05dc\u05de\u05ea \u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8.",
"You have already reported this annotation.": "\u05db\u05d1\u05e8 \u05d3\u05d9\u05d5\u05d5\u05d7\u05ea \u05e2\u05dc \u05d4\u05d4\u05e2\u05e8\u05d4 \u05d4\u05d6\u05d5.",
"You have already verified your ID!": "\u05d0\u05d9\u05de\u05ea\u05ea \u05db\u05d1\u05e8 \u05d0\u05ea \u05d6\u05d4\u05d5\u05ea\u05da!",
+ "You have been logged out of your edX account. Click Okay to log in again now. Click Cancel to stay on this page (you must log in again to save your work).": "\u05d9\u05e6\u05d0\u05ea \u05de\u05d7\u05e9\u05d1\u05d5\u05df edX \u05e9\u05dc\u05da. \u05dc\u05d7\u05e5 \u05e2\u05dc '\u05d0\u05d9\u05e9\u05d5\u05e8' \u05db\u05d3\u05d9 \u05dc\u05d4\u05d9\u05db\u05e0\u05e1 \u05e9\u05d5\u05d1 \u05db\u05e2\u05ea. \u05dc\u05d7\u05e5 \u05e2\u05dc '\u05d1\u05d9\u05d8\u05d5\u05dc' \u05db\u05d3\u05d9 \u05dc\u05d4\u05d9\u05e9\u05d0\u05e8 \u05d1\u05e2\u05de\u05d5\u05d3 (\u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05d9\u05db\u05e0\u05e1 \u05e9\u05d5\u05d1 \u05db\u05d3\u05d9 \u05dc\u05e9\u05de\u05d5\u05e8 \u05d0\u05ea \u05de\u05d4 \u05e9\u05e2\u05e9\u05d9\u05ea).",
"You have done a dry run of force publishing the course. Nothing has changed. Had you run it, the following course versions would have been change.": "\u05d1\u05d9\u05e6\u05e2\u05ea \u05d4\u05e4\u05e2\u05dc\u05d4 \u05de\u05d0\u05d5\u05dc\u05e6\u05ea \u05e9\u05dc \u05e4\u05e8\u05e1\u05d5\u05dd \u05d4\u05e7\u05d5\u05e8\u05e1. \u05d3\u05d1\u05e8 \u05dc\u05d0 \u05d4\u05e9\u05ea\u05e0\u05d4. \u05d0\u05dd \u05d4\u05d9\u05d9\u05ea \u05de\u05e4\u05e2\u05d9\u05dc \u05d0\u05d5\u05ea\u05d5, \u05d2\u05e8\u05e1\u05d0\u05d5\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05d4\u05d1\u05d0\u05d5\u05ea \u05d4\u05d9\u05d5 \u05de\u05e9\u05ea\u05e0\u05d5\u05ea.",
"You have no handouts defined": "\u05dc\u05d0 \u05d4\u05d5\u05d2\u05d3\u05e8\u05d5 \u05d3\u05e4\u05d9 \u05de\u05d9\u05d3\u05e2",
"You have not created any certificates yet.": "\u05dc\u05d0 \u05d9\u05e6\u05e8\u05ea \u05d0\u05e3 \u05ea\u05e2\u05d5\u05d3\u05d4 \u05e2\u05d3\u05d9\u05d9\u05df.",
"You have not created any content groups yet.": " \u05dc\u05d0 \u05d9\u05e6\u05e8\u05ea \u05e2\u05d3\u05d9\u05d9\u05df \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05ea\u05d5\u05db\u05df \u05db\u05dc\u05e9\u05d4\u05df.",
"You have not created any group configurations yet.": "\u05dc\u05d0 \u05d9\u05e6\u05e8\u05ea \u05e2\u05d3\u05d9\u05d9\u05df \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e7\u05d1\u05d5\u05e6\u05d4.",
+ "You have successfully signed into %(currentProvider)s, but your %(currentProvider)s account does not have a linked %(platformName)s account. To link your accounts, sign in now using your %(platformName)s password.": "\u05e0\u05e8\u05e9\u05de\u05ea \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05dc-%(currentProvider)s, \u05d0\u05da \u05dc\u05d7\u05e9\u05d1\u05d5\u05df %(currentProvider)s\u05d0\u05d9\u05df \u05d7\u05e9\u05d1\u05d5\u05df %(platformName)s \u05de\u05e7\u05d5\u05e9\u05e8. \u05db\u05d3\u05d9 \u05dc\u05e7\u05e9\u05e8 \u05d0\u05ea \u05d7\u05e9\u05d1\u05d5\u05e0\u05d5\u05ea\u05d9\u05d9\u05da, \u05d4\u05d9\u05db\u05e0\u05e1 \u05db\u05e2\u05ea \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05e1\u05d9\u05e1\u05de\u05ea %(platformName)s.",
"You have unsaved changes are you sure you want to navigate away?": "\u05d9\u05e9\u05e0\u05dd \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05dc\u05d0 \u05e0\u05e9\u05de\u05e8\u05d5, \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05e2\u05d6\u05d5\u05d1?",
"You have unsaved changes. Do you really want to leave this page?": "\u05d9\u05e9\u05e0\u05dd \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05dc\u05d0 \u05e0\u05e9\u05de\u05e8\u05d5. \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e2\u05d6\u05d5\u05d1 \u05e2\u05de\u05d5\u05d3 \u05d6\u05d4?",
"You haven't added any assets to this course yet.": "\u05e2\u05d3\u05d9\u05d9\u05df \u05dc\u05d0 \u05d4\u05d5\u05e1\u05e4\u05ea \u05e0\u05db\u05e1\u05d9\u05dd \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"You haven't added any content to this course yet.": " \u05dc\u05d0 \u05d4\u05d5\u05e1\u05e4\u05ea \u05e2\u05d3\u05d9\u05d9\u05df \u05ea\u05d5\u05db\u05df \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
"You haven't added any textbooks to this course yet.": "\u05dc\u05d0 \u05d4\u05d5\u05e1\u05e4\u05ea \u05e2\u05d3\u05d9\u05d9\u05df \u05e1\u05e4\u05e8\u05d9 \u05dc\u05d9\u05de\u05d5\u05d3 \u05dc\u05e7\u05d5\u05e8\u05e1 \u05d6\u05d4.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "\u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05d9\u05d5\u05ea \u05de\u05e2\u05dc \u05d2\u05d9\u05dc 13 \u05db\u05d3\u05d9 \u05dc\u05e9\u05ea\u05e3 \u05d0\u05ea \u05de\u05d9\u05d3\u05e2 \u05d4\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05d4\u05de\u05dc\u05d0 \u05e9\u05dc\u05da. \u05d0\u05dd \u05d0\u05ea\u05d4 \u05de\u05e2\u05dc \u05d2\u05d9\u05dc 13, \u05d5\u05d3\u05d0 \u05e9\u05e6\u05d9\u05d9\u05e0\u05ea \u05d0\u05ea \u05e9\u05e0\u05ea \u05d4\u05dc\u05d9\u05d3\u05d4 \u05e9\u05dc\u05da \u05d1{account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "\u05e2\u05dc\u05d9\u05da \u05dc\u05d4\u05d6\u05d9\u05df \u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05ea\u05e7\u05d9\u05e0\u05d4 \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d7\u05d1\u05e8 \u05e6\u05d5\u05d5\u05ea \u05d7\u05d3\u05e9.",
"You must sign out and sign back in before your language changes take effect.": "\u05e2\u05dc\u05d9\u05da \u05dc\u05e6\u05d0\u05ea \u05de\u05d4\u05d7\u05e9\u05d1\u05d5\u05df \u05d5\u05dc\u05d4\u05db\u05e0\u05e1 \u05d7\u05d6\u05e8\u05d4 \u05e2\u05dc \u05de\u05e0\u05ea \u05e9\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9 \u05d4\u05e9\u05e4\u05d4 \u05d9\u05d9\u05db\u05e0\u05e1\u05d5 \u05dc\u05ea\u05d5\u05e7\u05e3.",
"You must specify a name": "\u05e2\u05dc\u05d9\u05da \u05dc\u05ea\u05ea \u05e9\u05dd",
"You must specify a name for the cohort": "\u05e2\u05dc\u05d9\u05da \u05dc\u05e6\u05d9\u05d9\u05df \u05e9\u05dd \u05e9\u05dc \u05e7\u05d1\u05d5\u05e6\u05ea \u05dc\u05d9\u05de\u05d5\u05d3",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\u05e2\u05dc\u05d9\u05da \u05dc\u05e6\u05d9\u05d9\u05df \u05d0\u05ea \u05e9\u05e0\u05ea \u05d4\u05dc\u05d9\u05d3\u05d4 \u05e9\u05dc\u05da \u05dc\u05e4\u05e0\u05d9 \u05e9\u05ea\u05d5\u05db\u05dc \u05dc\u05d7\u05dc\u05d5\u05e7 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d5\u05e4\u05d9\u05dc \u05d4\u05de\u05dc\u05d0 \u05e9\u05dc\u05da. \u05d1\u05db\u05d3\u05d9 \u05dc\u05e6\u05d9\u05d9\u05df \u05d0\u05ea \u05e9\u05e0\u05ea \u05d4\u05dc\u05d9\u05d3\u05d4 \u05e9\u05dc\u05da \u05e2\u05d1\u05d5\u05e8 \u05dc{account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "\u05d0\u05ea\u05d4 \u05d6\u05e7\u05d5\u05e7 \u05dc\u05de\u05d7\u05e9\u05d1 \u05d1\u05e2\u05dc \u05de\u05e6\u05dc\u05de\u05ea \u05e8\u05e9\u05ea. \u05d1\u05e7\u05d1\u05dc\u05ea \u05d4\u05e0\u05d7\u05d9\u05d9\u05ea \u05d3\u05e4\u05d3\u05e4\u05df, \u05d5\u05d3\u05d0 \u05db\u05d9 \u05d0\u05ea\u05d4 \u05de\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05e9\u05d4 \u05dc\u05de\u05e6\u05dc\u05de\u05d4.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "\u05d0\u05ea\u05d4 \u05d6\u05e7\u05d5\u05e7 \u05dc\u05e8\u05d9\u05e9\u05d9\u05d5\u05df \u05e0\u05d4\u05d9\u05d2\u05d4, \u05d3\u05e8\u05db\u05d5\u05df \u05d0\u05d5 \u05ea\u05e2\u05d5\u05d3\u05ea \u05de\u05d6\u05d4\u05d4 \u05d0\u05d7\u05e8\u05ea \u05e9\u05de\u05d5\u05e4\u05d9\u05e2\u05d9\u05dd \u05d1\u05d4 \u05e9\u05de\u05da \u05d5\u05ea\u05de\u05d5\u05e0\u05ea\u05da.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "\u05d0\u05ea\u05d4 \u05d6\u05e7\u05d5\u05e7 \u05dc\u05ea\u05e2\u05d5\u05d3\u05d4 \u05de\u05d6\u05d4\u05d4 \u05e2\u05dd \u05e9\u05de\u05da \u05d5\u05e2\u05dd \u05ea\u05de\u05d5\u05e0\u05d4. \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e8\u05d9\u05e9\u05d9\u05d5\u05df \u05e0\u05d4\u05d9\u05d2\u05d4, \u05d3\u05e8\u05db\u05d5\u05df \u05d0\u05d5 \u05ea\u05e2\u05d5\u05d3\u05d4 \u05de\u05d6\u05d4\u05d4 \u05d0\u05d7\u05e8\u05ea \u05e9\u05d4\u05d5\u05e0\u05e4\u05e7\u05d4 \u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05de\u05de\u05e9\u05dc\u05d4. ",
@@ -1677,6 +1728,7 @@
"Your changes have been saved.": "\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e0\u05e9\u05de\u05e8\u05d5",
"Your changes will not take effect until you save your progress.": "\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05d1\u05d9\u05e6\u05e2\u05ea \u05dc\u05d0 \u05d9\u05db\u05e0\u05e1\u05d5 \u05dc\u05e4\u05d5\u05e2\u05dc \u05e2\u05d3 \u05e9\u05ea\u05e9\u05de\u05d5\u05e8 \u05d0\u05ea \u05e2\u05d1\u05d5\u05d3\u05ea\u05da.",
"Your changes will not take effect until you save your progress. Take care with key and value formatting, as validation is not implemented.": "\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05d1\u05d9\u05e6\u05e2\u05ea \u05dc\u05d0 \u05d9\u05db\u05e0\u05e1\u05d5 \u05dc\u05ea\u05d5\u05e7\u05e3 \u05e2\u05d3 \u05e9\u05ea\u05e9\u05de\u05d5\u05e8 \u05d0\u05ea \u05d4\u05d4\u05ea\u05e7\u05d3\u05de\u05d5\u05ea\u05da. \u05e9\u05d9\u05dd \u05dc\u05d1 \u05dc\u05e2\u05d9\u05e6\u05d5\u05d1 \u05d4\u05e7\u05d5 \u05d5\u05d4\u05e2\u05e8\u05da, \u05de\u05d0\u05d7\u05e8 \u05e9\u05d4\u05d0\u05d9\u05de\u05d5\u05ea \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05d8\u05de\u05e2.",
+ "Your course could not be exported to XML. There is not enough information to identify the failed component. Inspect your course to identify any problematic components and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05d9\u05e6\u05d0 \u05d0\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05dc-XML. \u05d0\u05d9\u05df \u05de\u05d9\u05d3\u05e2 \u05d1\u05de\u05d9\u05d3\u05d4 \u05de\u05e1\u05e4\u05e7\u05ea \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d6\u05d4\u05d5\u05ea \u05d0\u05ea \u05d4\u05e8\u05db\u05d9\u05d1 \u05d4\u05db\u05d5\u05e9\u05dc. \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d4\u05e7\u05d5\u05e8\u05e1 \u05e9\u05dc\u05da \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d6\u05d4\u05d5\u05ea \u05e8\u05db\u05d9\u05d1\u05d9\u05dd \u05d1\u05e2\u05d9\u05d9\u05ea\u05d9\u05dd \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1. ",
"Your donation could not be submitted.": "\u05d4\u05ea\u05e8\u05d5\u05de\u05d4 \u05e9\u05dc\u05da \u05dc\u05d0 \u05d9\u05db\u05dc\u05d4 \u05dc\u05d4\u05ea\u05e7\u05d1\u05dc.",
"Your email message was successfully queued for sending. In courses with a large number of learners, email messages to learners might take up to an hour to be sent.": "\u05d4\u05d5\u05d3\u05e2\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05e0\u05db\u05e0\u05e1\u05d4 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4 \u05dc\u05d4\u05de\u05ea\u05e0\u05d4 \u05dc\u05de\u05e9\u05dc\u05d5\u05d7. \u05d1\u05e7\u05d5\u05e8\u05e1\u05d9\u05dd \u05e2\u05dd \u05de\u05e1\u05e4\u05e8 \u05d2\u05d3\u05d5\u05dc \u05e9\u05dc \u05dc\u05d5\u05de\u05d3\u05d9\u05dd, \u05d9\u05d9\u05ea\u05db\u05df \u05e9\u05d9\u05d9\u05e7\u05d7 \u05e2\u05d3 \u05e9\u05e2\u05d4 \u05e2\u05d3 \u05e9\u05d4\u05d5\u05d3\u05e2\u05d5\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05dc\u05db\u05dc \u05d4\u05dc\u05d5\u05de\u05d3\u05d9\u05dd \u05d9\u05d9\u05e9\u05dc\u05d7\u05d5.",
"Your entire face fits inside the frame.": "\u05e4\u05e0\u05d9\u05da \u05de\u05ea\u05d0\u05d9\u05de\u05d9\u05dd \u05dc\u05d2\u05d1\u05d5\u05dc\u05d5\u05ea \u05d4\u05de\u05e1\u05d2\u05e8\u05ea.",
@@ -1685,13 +1737,19 @@
"Your file could not be uploaded": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e2\u05dc\u05d5\u05ea \u05d0\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5 \u05e9\u05dc\u05da",
"Your file has been deleted.": "\u05d4\u05e7\u05d5\u05d1\u05e5 \u05e9\u05dc\u05da \u05e0\u05de\u05d7\u05e7",
"Your file {filename} is too large (max size: {maxSize}MB).": "\u05d4\u05e7\u05d5\u05d1\u05e5 {filename} \u05d2\u05d3\u05d5\u05dc \u05de\u05d3\u05d9 (\u05d2\u05d5\u05d3\u05dc \u05de\u05e8\u05d1\u05d9: {maxSize}MB).",
+ "Your import has failed.": "\u05d4\u05d9\u05d1\u05d5\u05d0 \u05e0\u05db\u05e9\u05dc.",
+ "Your import is in progress; navigating away will abort it.": "\u05d4\u05d9\u05d1\u05d5\u05d0 \u05e9\u05dc\u05da \u05e0\u05de\u05e6\u05d0 \u05d1\u05ea\u05d4\u05dc\u05d9\u05da; \u05e0\u05d9\u05d5\u05d5\u05d8 \u05d4\u05d7\u05d5\u05e6\u05d4 \u05d9\u05d1\u05d8\u05dc \u05d6\u05d0\u05ea.",
+ "Your library could not be exported to XML. There is not enough information to identify the failed component. Inspect your library to identify any problematic components and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05d9\u05e6\u05d0 \u05d0\u05ea \u05e1\u05e4\u05e8\u05d9\u05d9\u05ea\u05da \u05dc\u05e7\u05d5\u05d1\u05e5 XML. \u05d0\u05d9\u05df \u05de\u05d9\u05d3\u05e2 \u05d1\u05de\u05d9\u05d3\u05d4 \u05de\u05e1\u05e4\u05e7\u05ea \u05dc\u05d6\u05d9\u05d4\u05d5\u05d9 \u05d4\u05e8\u05db\u05d9\u05d1 \u05d4\u05db\u05d5\u05e9\u05dc. \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05e1\u05e4\u05e8\u05d9\u05d9\u05ea\u05da, \u05d6\u05d4\u05d4 \u05e8\u05db\u05d9\u05d1\u05d9\u05dd \u05d1\u05e2\u05d9\u05ea\u05d9\u05d9\u05dd \u05d5\u05dc\u05d0\u05d7\u05e8 \u05de\u05db\u05df \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1. ",
"Your message cannot be blank.": "\u05d4\u05d5\u05d3\u05e2\u05ea\u05da \u05d0\u05d9\u05e0\u05d4 \u05d9\u05db\u05d5\u05dc\u05d4 \u05dc\u05d4\u05d9\u05d5\u05ea \u05e8\u05d9\u05e7\u05d4.",
"Your message must have a subject.": "\u05d4\u05d5\u05d3\u05e2\u05ea\u05da \u05d7\u05d9\u05d9\u05d1\u05ea \u05dc\u05d4\u05db\u05d9\u05dc \u05e0\u05d5\u05e9\u05d0.",
"Your message must have at least one target.": "\u05d4\u05d4\u05d5\u05d3\u05e2\u05d4 \u05e9\u05dc\u05da \u05d7\u05d9\u05d9\u05d1\u05ea \u05dc\u05d4\u05db\u05d9\u05dc \u05d9\u05e2\u05d3 \u05d0\u05d7\u05d3 \u05dc\u05e4\u05d7\u05d5\u05ea.",
"Your policy changes have been saved.": "\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9 \u05de\u05d3\u05d9\u05e0\u05d9\u05d5\u05ea\u05da \u05e0\u05e9\u05de\u05e8\u05d5.",
"Your post will be discarded.": "\u05d4\u05e4\u05d5\u05e1\u05d8 \u05e9\u05dc\u05da \u05d9\u05d1\u05d5\u05d8\u05dc.",
+ "Your question or idea (required)": "\u05e9\u05d0\u05dc\u05ea\u05da \u05d0\u05d5 \u05e8\u05e2\u05d9\u05d5\u05e0\u05da (\u05d7\u05d5\u05d1\u05d4)",
+ "Your request could not be completed due to a server problem. Reload the page and try again. If the issue persists, click the Help tab to report the problem.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05dc\u05d9\u05dd \u05d0\u05ea \u05d1\u05e7\u05e9\u05ea\u05da \u05d1\u05d2\u05dc\u05dc \u05d1\u05e2\u05d9\u05d4 \u05d1\u05e9\u05e8\u05ea. \u05d8\u05e2\u05df \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05d3\u05e3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1. \u05d0\u05dd \u05d4\u05d1\u05e2\u05d9\u05d4 \u05e0\u05de\u05e9\u05db\u05ea, \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05e9\u05d5\u05e0\u05d9\u05ea '\u05e2\u05d6\u05e8\u05d4' \u05db\u05d3\u05d9 \u05dc\u05d3\u05d5\u05d5\u05d7 \u05e2\u05dc \u05d4\u05d1\u05e2\u05d9\u05d4.",
"Your request could not be completed. Reload the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05dc\u05d9\u05dd \u05d0\u05ea \u05d1\u05e7\u05e9\u05ea\u05da. \u05d8\u05e2\u05df \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05d3\u05e3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.",
"Your request could not be completed. Reload the page and try again. If the issue persists, click the Help tab to report the problem.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05e9\u05dc\u05d9\u05dd \u05d0\u05ea \u05d1\u05e7\u05e9\u05ea\u05da. \u05d8\u05e2\u05df \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05d3\u05e3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1. \u05d0\u05dd \u05d4\u05d1\u05e2\u05d9\u05d4 \u05e0\u05de\u05e9\u05db\u05ea, \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05e9\u05d5\u05e0\u05d9\u05ea '\u05e2\u05d6\u05e8\u05d4' \u05db\u05d3\u05d9 \u05dc\u05d3\u05d5\u05d5\u05d7 \u05e2\u05dc \u05d4\u05d1\u05e2\u05d9\u05d4.",
+ "Your request could not be processed. Refresh the page and try again.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05d1\u05d3 \u05d0\u05ea \u05d1\u05e7\u05e9\u05ea\u05da. \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05e2\u05de\u05d5\u05d3 \u05d5\u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.",
"Your team could not be created.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05e6\u05d5\u05e8 \u05d0\u05ea \u05d4\u05e6\u05d5\u05d5\u05ea \u05e9\u05dc\u05da.",
"Your team could not be updated.": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05e2\u05d3\u05db\u05df \u05d0\u05ea \u05d4\u05e6\u05d5\u05d5\u05ea \u05e9\u05dc\u05da.",
"Your upload of '{file}' failed.": "\u05d4\u05e2\u05dc\u05ea \u05e7\u05d5\u05d1\u05e5 '{file}' \u05e0\u05db\u05e9\u05dc\u05d4.",
@@ -1732,6 +1790,7 @@
"dropped on target": "\u05e9\u05d5\u05d7\u05e8\u05e8 \u05e2\u05dc \u05d4\u05de\u05d8\u05e8\u05d4",
"e.g. 'Sky with clouds'. The description is helpful for users who cannot see the image.": "\u05dc\u05d3\u05d5\u05d2\u05de\u05d4 '\u05e9\u05de\u05d9\u05d9\u05dd \u05e2\u05dd \u05e2\u05e0\u05e0\u05d9\u05dd'. \u05d4\u05ea\u05d9\u05d0\u05d5\u05e8 \u05de\u05d5\u05e2\u05d9\u05dc \u05dc\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05e9\u05d0\u05d9\u05e0\u05dd \u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05dc\u05e8\u05d0\u05d5\u05ea \u05d0\u05ea \u05d4\u05ea\u05de\u05d5\u05e0\u05d4.",
"e.g. 'google'": "\u05dc\u05d3\u05d5\u05d2\u05de\u05d4: 'google'",
+ "e.g. 'http://google.com'": "\u05dc\u05de\u05e9\u05dc 'http://google.com'",
"e.g. johndoe@example.com, JaneDoe, joeydoe@example.com": "\u05dc\u05d3\u05d5\u05d2\u05de\u05d4 johndoe@example.com, JaneDoe, joeydoe@example.com",
"emphasized text": "\u05d8\u05e7\u05e1\u05d8 \u05de\u05d5\u05d3\u05d2\u05e9",
"endorsed %(time_ago)s": "\u05d0\u05d5\u05e9\u05e8 %(time_ago)s",
@@ -1746,6 +1805,7 @@
"less than a minute": "\u05e4\u05d7\u05d5\u05ea \u05de\u05d3\u05e7\u05d4",
"marked as answer %(time_ago)s": "\u05e1\u05d5\u05de\u05df \u05db\u05ea\u05e9\u05d5\u05d1\u05d4 %(time_ago)s",
"marked as answer %(time_ago)s by %(user)s": "\u05e1\u05d5\u05de\u05df \u05db\u05ea\u05e9\u05d5\u05d1\u05d4 \u05e2\u05dc \u05d9\u05d3\u05d9 %(time_ago)s \u05e2\u05dc \u05d9\u05d3\u05d9%(user)s",
+ "minutes": "\u05d3\u05e7\u05d5\u05ea",
"name": "\u05e9\u05dd",
"off": "\u05db\u05d1\u05d5\u05d9",
"on": "\u05e4\u05d5\u05e2\u05dc",
@@ -1787,6 +1847,8 @@
"{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.": "{browse_span_start}\u05e2\u05d9\u05d9\u05df \u05d1\u05e6\u05d5\u05d5\u05ea\u05d9\u05dd \u05d1\u05e0\u05d5\u05e9\u05d0\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9\u05dd {span_end}\u05d0\u05d5 {search_span_start}\u05d7\u05e4\u05e9 \u05e6\u05d5\u05d5\u05ea\u05d9\u05dd{span_end} \u05d1\u05e0\u05d5\u05e9\u05d0 \u05d6\u05d4. \u05d0\u05dd \u05e2\u05d3\u05d9\u05d9\u05df \u05dc\u05d0 \u05d4\u05e6\u05dc\u05d7\u05ea \u05dc\u05de\u05e6\u05d5\u05d0 \u05e6\u05d5\u05d5\u05ea \u05dc\u05d4\u05e6\u05d8\u05e8\u05e3 \u05d0\u05dc\u05d9\u05d5, {create_span_start}\u05e6\u05d5\u05e8 \u05e6\u05d5\u05d5\u05ea \u05d7\u05d3\u05e9 \u05d1\u05e0\u05d5\u05e9\u05d0 \u05d6\u05d4{span_end}.",
"{display_name} Settings": "\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea {display_name}",
"{email} is already on the {container} team. Recheck the email address if you want to add a new member.": "{email} \u05db\u05d1\u05e8 \u05e0\u05de\u05e6\u05d0 \u05d1\u05e6\u05d5\u05d5\u05ea {container}. \u05d1\u05d3\u05d5\u05e7 \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\"\u05dc \u05d1\u05de\u05d9\u05d3\u05d4 \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d7\u05d1\u05e8 \u05e6\u05d5\u05d5\u05ea \u05d7\u05d3\u05e9.",
+ "{filename} exceeds maximum size of {maxFileSizeInGB} GB.": "\u05d4\u05e7\u05d5\u05d1\u05e5 {filename} \u05d7\u05d5\u05e8\u05d2 \u05de\u05d4\u05d2\u05d5\u05d3\u05dc \u05d4\u05de\u05e8\u05d1\u05d9 \u05e9\u05dc {maxFileSizeInGB} GB.",
+ "{filename} is not in a supported file format. Supported file formats are {supportedFileFormats}.": "\u05d4\u05e4\u05d5\u05e8\u05de\u05d8 \u05e9\u05dc {filename} \u05d0\u05d9\u05e0\u05d5 \u05e0\u05ea\u05de\u05da. \u05e1\u05d5\u05d2\u05d9 \u05d4\u05e7\u05d1\u05e6\u05d9\u05dd \u05e9\u05e0\u05ea\u05de\u05db\u05d9\u05dd \u05d4\u05dd {supportedFileFormats}.",
"{hours}:{minutes} (current UTC time)": "{hours}:{minutes} (\u05d6\u05de\u05df \u05d0\u05d5\u05e0\u05d9\u05d1\u05e8\u05e1\u05dc\u05d9 \u05de\u05ea\u05d5\u05d0\u05dd (UTC) \u05e0\u05d5\u05db\u05d7\u05d9)",
"{label}: {status}": "{label}: {status}",
"{numResponses} other response": [
@@ -1802,7 +1864,7 @@
"{numVotes} \u05e7\u05d5\u05dc\u05d5\u05ea"
],
"{organization}\\'s logo": "\u05d4\u05e1\u05de\u05dc \u05e9\u05dc {organization}",
- "{platform_name} learners can see my:": "{platform_name} \u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05dc\u05e8\u05d0\u05d5\u05ea \u05d0\u05ea:",
+ "{paragraphStart}You entered {boldStart}{email}{boldEnd}. If this email address is associated with your {platform_name} account, we will send a message with password reset instructions to this email address.{paragraphEnd}{paragraphStart}If you do not receive a password reset message, verify that you entered the correct email address, or check your spam folder.{paragraphEnd}{paragraphStart}If you need further assistance, {anchorStart}contact technical support{anchorEnd}.{paragraphEnd}": "{paragraphStart}\u05d4\u05d6\u05e0\u05ea {boldStart}{email}{boldEnd}. \u05d0\u05dd \u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\"\u05dc \u05d4\u05d6\u05d5 \u05e7\u05e9\u05d5\u05e8\u05d4 \u05dc\u05d7\u05e9\u05d1\u05d5\u05df {platform_name} \u05e9\u05dc\u05da, \u05e0\u05e9\u05dc\u05d7 \u05d4\u05d5\u05d3\u05e2\u05d4 \u05e2\u05dd \u05d4\u05e0\u05d7\u05d9\u05d5\u05ea \u05dc\u05d0\u05d9\u05e4\u05d5\u05e1 \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05dc\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\"\u05dc \u05d4\u05d6\u05d5.{paragraphEnd}{paragraphStart}\u05d0\u05dd \u05dc\u05d0 \u05ea\u05e7\u05d1\u05dc \u05d4\u05d5\u05d3\u05e2\u05d4 \u05dc\u05d0\u05d9\u05e4\u05d5\u05e1 \u05e1\u05d9\u05e1\u05de\u05d4, \u05d1\u05d3\u05d5\u05e7 \u05e9\u05d4\u05d6\u05e0\u05ea \u05d0\u05ea \u05d4\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e0\u05db\u05d5\u05e0\u05d4 \u05d0\u05d5 \u05d1\u05d3\u05d5\u05e7 \u05d1\u05ea\u05d9\u05e7\u05d9\u05d9\u05ea \u05d3\u05d5\u05d0\u05e8 \u05d4\u05d6\u05d1\u05dc \u05d0\u05e6\u05dc\u05da.{paragraphEnd}{paragraphStart}\u05d0\u05dd \u05d9\u05e9 \u05dc\u05da \u05e6\u05d5\u05e8\u05da \u05d1\u05e2\u05d6\u05e8\u05d4 \u05e0\u05d5\u05e1\u05e4\u05ea, {anchorStart}\u05e4\u05e0\u05d4 \u05dc\u05ea\u05de\u05d9\u05db\u05d4 \u05d4\u05d8\u05db\u05e0\u05d9\u05ea{anchorEnd}.{paragraphEnd}",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}\u05d0\u05d6\u05d4\u05e8\u05d4:{screen_reader_end} \u05dc\u05d0 \u05e7\u05d9\u05d9\u05de\u05d5\u05ea \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05ea\u05d5\u05db\u05df.",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}\u05d0\u05d6\u05d4\u05e8\u05d4:{screen_reader_end} \u05e7\u05d1\u05d5\u05e6\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05e9\u05e0\u05d1\u05d7\u05e8\u05d4 \u05d1\u05e2\u05d1\u05e8, \u05e0\u05de\u05d7\u05e7\u05d4. \u05d1\u05d7\u05e8 \u05e7\u05d1\u05d5\u05e6\u05ea \u05ea\u05d5\u05db\u05df \u05d0\u05d7\u05e8\u05ea.",
"{start_strong}{total}{end_strong} words submitted in total.": "{start_strong}{total}{end_strong} \u05e1\u05da \u05db\u05dc \u05d4\u05de\u05d9\u05dc\u05d9\u05dd \u05e9\u05e0\u05e9\u05dc\u05d7\u05d5.",
diff --git a/lms/static/js/i18n/ko-kr/djangojs.js b/lms/static/js/i18n/ko-kr/djangojs.js
index 11d7850cf8..c1dff0e1d8 100644
--- a/lms/static/js/i18n/ko-kr/djangojs.js
+++ b/lms/static/js/i18n/ko-kr/djangojs.js
@@ -55,13 +55,9 @@
],
"%s ago": "%s \uc804",
"%s from now": "\uc9c0\uae08\uc73c\ub85c \ubd80\ud130 %s \uc774\ud6c4",
- "About me": "\uc790\uae30\uc18c\uac1c",
"Account Settings": "\uacc4\uc815 \uc124\uc815",
- "Account Settings page.": "\uacc4\uc815 \uc124\uc815 \ud398\uc774\uc9c0",
"Add Cohort": "\ud559\uc2b5\uc9d1\ub2e8 \ucd94\uac00\ud558\uae30",
- "Add Country": "\uad6d\uac00 \ucd94\uac00",
"Add a New Cohort": "\uc2e0\uaddc \ud559\uc2b5 \uc9d1\ub2e8 \ucd94\uac00",
- "Add language": "\uc5b8\uc5b4 \ucd94\uac00",
"Add to Dictionary": "\ubaa8\uc74c\uc5d0 \ucd94\uac00\ud558\uae30",
"Adding the selected course to your cart": "\uc7a5\ubc14\uad6c\ub2c8\uc5d0 \uc120\ud0dd\ub41c \uac15\uc88c\ub97c \ucd94\uac00\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.",
"Advanced": "\uace0\uae09",
@@ -244,7 +240,6 @@
"Format": "\ud615\uc2dd",
"Formats": "\ud615\uc2dd",
"Full Name": "\uc2e4\uba85",
- "Full Profile": "\uc804\uccb4 \ud504\ub85c\ud544",
"Fullscreen": "\uc804\uccb4 \ud654\uba74",
"Gender": "\uc131 ",
"General": "\uc77c\ubc18",
@@ -313,7 +308,6 @@
"Left": "\uc67c\ucabd \uc815\ub82c",
"Left to right": "\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",
"Less": "\uc801\uac8c",
- "Limited Profile": "\uc81c\ud55c\uc801 \ud504\ub85c\ud544",
"Linking": "\uc5f0\uacb0\ud558\uae30",
"Links are generated on demand and expire within 5 minutes due to the sensitive nature of student information.": "\uc694\uccad\uc5d0 \uc758\ud574 \uc0dd\uc131\ub41c \ub9c1\ud06c\ub294 \ud559\uc2b5\uc790 \uc815\ubcf4 \ubcf4\ud638\ub97c \uc704\ud574 5\ubd84 \ub0b4\uc5d0 \uc18c\uba78\ub429\ub2c8\ub2e4.",
"List item": "\ubb38\ub2e8\ubc88\ud638",
@@ -402,8 +396,6 @@
"Print": "\ud504\ub9b0\ud2b8",
"Professional Education": "\uc804\ubb38 \uad50\uc721 \uacfc\uc815",
"Professional Education Verified Certificate": "\uc804\ubb38 \uacfc\uc815 \uc774\uc218\uc99d",
- "Profile Image": "\ud504\ub85c\ud544 \uc774\ubbf8\uc9c0",
- "Profile image for {username}": "{username}\uc758 \ud504\ub85c\ud544 \uc774\ubbf8\uc9c0",
"Public": "\uacf5\uac1c",
"Reason field should not be left blank.": "\uc774\uc720\ub97c \uc785\ub825\ud558\ub294 \ud544\ub4dc\ub294 \ube44\uc6cc\ub458 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
"Recent Activity": "\ucd5c\uadfc \ud65c\ub3d9",
@@ -505,7 +497,6 @@
"Task Type": "\uc791\uc5c5 \uc720\ud615",
"Task inputs": "\uc791\uc5c5 \uc785\ub825",
"Teams": "\ud300",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\ub2e4\ub978 \ud559\uc2b5\uc790\ub4e4\uc5d0\uac8c \uac04\ub2e8\ud558\uac8c \ub098\ub97c \uc18c\uac1c\ud569\ub2c8\ub2e4. \uad00\uc2ec\uc0ac, \uc218\uac15 \uc774\uc720 \ub610\ub294 \ud559\uc2b5 \ubaa9\ud45c \uac19\uc740 \uac83\uc744 \uc4f0\uba74 \ub429\ub2c8\ub2e4. ",
"Templates": "\ud15c\ud50c\ub9bf",
"Text": "Text",
"Text color": "\uae00\uc790\uc0c9",
@@ -606,11 +597,9 @@
"You don't seem to have a webcam connected.": "\uc6f9\ucea0\uc774 \uc5f0\uacb0\ub418\uc9c0 \uc54a\uc740 \uac83 \uac19\uc2b5\ub2c8\ub2e4.",
"You have already reported this annotation.": "\uc774 \uc8fc\uc11d\uc740 \uc774\ubbf8 \uc2e0\uace0\ub418\uc5c8\uc2b5\ub2c8\ub2e4.",
"You have unsaved changes are you sure you want to navigate away?": "\uc800\uc7a5\ub418\uc9c0 \uc54a\uc740 \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uacc4\uc18d \ud0d0\uc0c9\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "\uc804\uccb4 \ud504\ub85c\ud544\uc744 \uacf5\uc720\ud558\ub824\uba74 13\uc138 \uc774\uc0c1\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. 13\uc138 \uc774\uc0c1\uc774\ub77c\uba74, {account_settings_page_link}\uc5d0\uc11c \ucd9c\uc0dd\uc5f0\ub3c4\ub97c \uc785\ub825\ud558\uc138\uc694.",
"You must sign out and sign back in before your language changes take effect.": "\uc5b8\uc5b4\uac00 \ubc14\ub00c\uc5b4\uc84c\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 \ub85c\uadf8\uc544\uc6c3 \ud558\uace0 \ub2e4\uc2dc \ub85c\uadf8\uc778 \ud558\uc138\uc694.",
"You must specify a name": "\uc774\ub984\uc744 \uba85\uc2dc\ud574\uc57c \ud569\ub2c8\ub2e4.",
"You must specify a name for the cohort": "\ud559\uc2b5 \uc9d1\ub2e8\uc758 \uc774\ub984\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\uadc0\ud558\uc758 \uc804\uccb4 \ud504\ub85c\ud544\uc744 \uacf5\uc720\ud558\uae30 \uc804\uc5d0 \ucd9c\uc0dd\uc5f0\ub3c4\ub97c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4. \ucd9c\uc0dd\uc5f0\ub3c4\ub97c \uc9c0\uc815\ud558\ub824\uba74 {account_settings_page_link}\ub85c \uac00\uba74 \ub429\ub2c8\ub2e4. ",
"You've made some changes": "\uc218\uc815 \uc644\ub8cc",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.": "\ube0c\ub77c\uc6b0\uc800\uac00 \ud074\ub9bd\ubcf4\ub4dc \uc9c1\uc811 \uc561\uc138\uc2a4\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 \ub2e8\ucd95\ud0a4 Ctrl+X/C/V \ub97c \uc774\uc6a9\ud558\uc138\uc694.",
"Your changes have been saved.": "\ubcc0\uacbd\uc0ac\ud56d\uc774 \uc800\uc7a5\ub418\uc5c8\uc2b5\ub2c8\ub2e4.",
@@ -647,7 +636,6 @@
"name": "\uc774\ub984",
"strong text": "\uac15\ud558\uac8c",
"team count": "\ud300 \uc778\uc6d0 \uc218",
- "{platform_name} learners can see my:": "{platform_name} \ud559\uc2b5\uc790\uac00 \ub098\uc5d0 \ub300\ud574 \ubcfc \uc218 \uc788\ub294 \uac83\uc740 :",
"\u2026": "\u2026"
};
diff --git a/lms/static/js/i18n/pt-br/djangojs.js b/lms/static/js/i18n/pt-br/djangojs.js
index dc72fad620..1b12fd9b2f 100644
--- a/lms/static/js/i18n/pt-br/djangojs.js
+++ b/lms/static/js/i18n/pt-br/djangojs.js
@@ -97,10 +97,8 @@
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"Abbreviation": "Abrevia\u00e7\u00e3o",
"About You": "Sobre Voc\u00ea",
- "About me": "Sobre mim",
"Account Not Activated": "Conta n\u00e3o ativada",
"Account Settings": "Configura\u00e7\u00f5es da Conta",
- "Account Settings page.": "P\u00e1gina de Configura\u00e7\u00f5es da conta.",
"Action": "A\u00e7\u00e3o",
"Actions": "A\u00e7\u00f5es",
"Activate": "Ativar",
@@ -110,7 +108,6 @@
"Add Additional Signatory": "Adicionar signat\u00e1rio adicional",
"Add Cohort": "Adicionar Grupo",
"Add Component:": "Adicionar componente:",
- "Add Country": "Adicionar pa\u00eds",
"Add New Component": "Adicionar Novo Componente",
"Add URLs for additional versions": "Adicionar URLs para vers\u00f5es adicionais",
"Add a Chapter": "Adicionar um Cap\u00edtulo",
@@ -118,7 +115,6 @@
"Add a Response": "Adicionar resposta",
"Add a comment": "Adicionar coment\u00e1rio",
"Add another group": "Adicionar outro grupo",
- "Add language": "Adicionar idioma",
"Add notes about this learner": "Adicionar coment\u00e1rios sobre esse aluno",
"Add to Dictionary": "Adicionar ao Dicion\u00e1rio",
"Add to Exception List": "Adicionar a Lista de Exce\u00e7\u00e3o",
@@ -439,7 +435,6 @@
"Edit Membership": "Editar assinatura.",
"Edit Team": "Editar equipe",
"Edit Your Name": "Edite o seu nome",
- "Edit the name": "Editar nome",
"Edit this certificate?": "Gostaria de editar este certificado?",
"Editable": "Edit\u00e1vel",
"Editing comment": "Editando coment\u00e1rios",
@@ -541,7 +536,6 @@
"Formats": "Formatos",
"Frequently Asked Questions": "Perguntas frequentes",
"Full Name": "Nome completo",
- "Full Profile": "Perfil completo",
"Fullscreen": "Tela cheia",
"Gender": "Sexo",
"General": "Geral",
@@ -681,7 +675,6 @@
"Library User": "Usu\u00e1rio da Biblioteca",
"License Display": "Exibi\u00e7\u00e3o de Licen\u00e7a",
"License Type": "Tipo de licen\u00e7a",
- "Limited Profile": "Perfil limitado",
"Link types should be unique.": "Tipos de link devem ser exclusivos.",
"Linking": "Vinculando",
"Links are generated on demand and expire within 5 minutes due to the sensitive nature of student information.": "Os links s\u00e3o gerados a pedido e expiram em 5 minutos devido \u00e0 natureza delicada das informa\u00e7\u00f5es do aluno.",
@@ -869,8 +862,6 @@
"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 Education": "Educa\u00e7\u00e3o Profissional",
"Professional Education Verified Certificate": "Certificado verificado de profissional de educa\u00e7\u00e3o",
- "Profile Image": "Imagem do perfil",
- "Profile image for {username}": "Imagem do perfil de {username}",
"Promote another member to Admin to remove your admin rights": "Promova outro membro a Administrador para remover seus direitos de administrador",
"Public": "P\u00fablico",
"Publish": "Publicar",
@@ -1072,7 +1063,6 @@
"Team member profiles": "Perfis dos Membros da Equipe",
"Team name cannot have more than 255 characters.": "O nome da equipe n\u00e3o pode exceder 255 caracteres.",
"Teams": "Equipes",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "Conte um pouco sobre voc\u00ea para outros estudantes do edX: onde voc\u00ea mora, quais s\u00e3o seus interesses, porqu\u00ea voc\u00ea est\u00e1 fazendo um curso no edX ou o que voc\u00ea espera aprender.",
"Templates": "Modelos",
"Text": "Texto",
"Text color": "Cor do texto",
@@ -1347,12 +1337,10 @@
"You haven't added any assets to this course yet.": "Voc\u00ea n\u00e3o adicionou nenhum ativo a este curso ainda",
"You haven't added any content to this course yet.": "Voc\u00ea ainda n\u00e3o adicionou nenhum conte\u00fado a este curso.",
"You haven't added any textbooks to this course yet.": "Voc\u00ea ainda n\u00e3o adicionou nenhum livro-texto a este curso.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "Voc\u00ea deve ter mais de 13 anos para compartilhar seu perfil completo. Se voc\u00ea tem mais de 13 anos, tenha certeza que voc\u00ea especificou o ano do seu nascimento na {account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "Voc\u00ea deve escrever um endere\u00e7o de e-mail v\u00e1lido para adicionar um novo membro do grupo",
"You must sign out and sign back in before your language changes take effect.": "Voc\u00ea deve sair e entrar antes que as mudan\u00e7as de idioma tenham efeito.",
"You must specify a name": "Voc\u00ea deve especificar um nome ",
"You must specify a name for the cohort": "Voc\u00ea deve especificar um nome para o grupo",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "Voc\u00ea deve especificar seu ano de nascimento antes de compartilhar seu perfil completo. Para especificar seu ano de anivers\u00e1rio, v\u00e1 para {account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "Voc\u00ea precisa de um computador com uma c\u00e2mera. Ao abrir o aviso, certifique-se de permitir o acesso a sua c\u00e2mera.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "Voc\u00ea precisa de uma carteira de habilita\u00e7\u00e3o, passaporte ou outra identifica\u00e7\u00e3o emitida pelo governo que possua o seu nome e foto.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "Voc\u00ea precisa de um documento com o seu nome e foto. Uma carteira de motorista, passaporte ou outro documento emitido pelo governo s\u00e3o aceit\u00e1veis.",
@@ -1459,7 +1447,6 @@
"with %(section_or_subsection)s": "com %(section_or_subsection)s",
"{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.": "{browse_span_start}D\u00ea uma olhada nas equipes de outros t\u00f3picos{span_end} ou {search_span_start}busque equipes{span_end} neste t\u00f3pico. Caso voc\u00ea ainda n\u00e3o tenha encontrado nenhuma, {create_span_start}crie uma nova equipe neste t\u00f3pico{span_end}.",
"{email} is already on the {container} team. Recheck the email address if you want to add a new member.": "{email} j\u00e1 est\u00e1 no grupo {container}. Verifique novamente o endere\u00e7o de email se voc\u00ea quiser adicionar um novo membro.",
- "{platform_name} learners can see my:": "Estudantes do {platform_name} podem visualizar meu:",
"\u2026": "\u2026"
};
diff --git a/lms/static/js/i18n/rtl/djangojs.js b/lms/static/js/i18n/rtl/djangojs.js
index 32c362ff95..70203b24ee 100644
--- a/lms/static/js/i18n/rtl/djangojs.js
+++ b/lms/static/js/i18n/rtl/djangojs.js
@@ -1451,6 +1451,7 @@
"Thanks for returning to verify your ID in: {courseName}": "\u0641\u0627\u0634\u0631\u0646\u0633 \u0628\u062e\u0642 \u0642\u062b\u0641\u0639\u0642\u0631\u0647\u0631\u0644 \u0641\u062e \u062f\u062b\u0642\u0647\u0628\u063a \u063a\u062e\u0639\u0642 \u0647\u064a \u0647\u0631: {courseName}",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0641\u0627\u062b \u0639\u0642\u0645 \u063a\u062e\u0639 \u062b\u0631\u0641\u062b\u0642\u062b\u064a \u0633\u062b\u062b\u0648\u0633 \u0641\u062e \u0632\u062b \u0634\u0631 \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633. \u064a\u062e \u063a\u062e\u0639 \u0635\u0634\u0631\u0641 \u0641\u062e \u0634\u064a\u064a \u0641\u0627\u062b \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u064a \u0648\u0634\u0647\u0645\u0641\u062e: \u062d\u0642\u062b\u0628\u0647\u0637?",
"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u0641\u0627\u062b \u0639\u0642\u0645 \u063a\u062e\u0639 \u062b\u0631\u0641\u062b\u0642\u062b\u064a \u0633\u062b\u062b\u0648\u0633 \u0641\u062e \u0632\u062b \u0634\u0631 \u062b\u0637\u0641\u062b\u0642\u0631\u0634\u0645 \u0645\u0647\u0631\u0646. \u064a\u062e \u063a\u062e\u0639 \u0635\u0634\u0631\u0641 \u0641\u062e \u0634\u064a\u064a \u0641\u0627\u062b \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u064a \u0627\u0641\u0641\u062d:// \u062d\u0642\u062b\u0628\u0647\u0637?",
+ "The certificate available date must be later than the enrollment start date.": "\u0641\u0627\u062b \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b \u0634\u062f\u0634\u0647\u0645\u0634\u0632\u0645\u062b \u064a\u0634\u0641\u062b \u0648\u0639\u0633\u0641 \u0632\u062b \u0645\u0634\u0641\u062b\u0642 \u0641\u0627\u0634\u0631 \u0641\u0627\u062b \u062b\u0631\u0642\u062e\u0645\u0645\u0648\u062b\u0631\u0641 \u0633\u0641\u0634\u0642\u0641 \u064a\u0634\u0641\u062b.",
"The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "\u0641\u0627\u062b \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 \u0645\u062b\u0634\u0642\u0631\u062b\u0642 \u0627\u0634\u0633 \u0632\u062b\u062b\u0631 \u0642\u062b-\u062f\u0634\u0645\u0647\u064a\u0634\u0641\u062b\u064a \u0634\u0631\u064a \u0641\u0627\u062b \u0633\u063a\u0633\u0641\u062b\u0648 \u0647\u0633 \u0642\u062b-\u0642\u0639\u0631\u0631\u0647\u0631\u0644 \u0641\u0627\u062b \u0644\u0642\u0634\u064a\u062b \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 \u0645\u062b\u0634\u0642\u0631\u062b\u0642.",
"The cohort cannot be added": "\u0641\u0627\u062b \u0630\u062e\u0627\u062e\u0642\u0641 \u0630\u0634\u0631\u0631\u062e\u0641 \u0632\u062b \u0634\u064a\u064a\u062b\u064a",
"The cohort cannot be saved": "\u0641\u0627\u062b \u0630\u062e\u0627\u062e\u0642\u0641 \u0630\u0634\u0631\u0631\u062e\u0641 \u0632\u062b \u0633\u0634\u062f\u062b\u064a",
@@ -1586,6 +1587,7 @@
"This team does not have any members.": "\u0641\u0627\u0647\u0633 \u0641\u062b\u0634\u0648 \u064a\u062e\u062b\u0633 \u0631\u062e\u0641 \u0627\u0634\u062f\u062b \u0634\u0631\u063a \u0648\u062b\u0648\u0632\u062b\u0642\u0633.",
"This team is full.": "\u0641\u0627\u0647\u0633 \u0641\u062b\u0634\u0648 \u0647\u0633 \u0628\u0639\u0645\u0645.",
"This thread is closed.": "\u0641\u0627\u0647\u0633 \u0641\u0627\u0642\u062b\u0634\u064a \u0647\u0633 \u0630\u0645\u062e\u0633\u062b\u064a.",
+ "This unit has validation issues.": "\u0641\u0627\u0647\u0633 \u0639\u0631\u0647\u0641 \u0627\u0634\u0633 \u062f\u0634\u0645\u0647\u064a\u0634\u0641\u0647\u062e\u0631 \u0647\u0633\u0633\u0639\u062b\u0633.",
"This vote could not be processed. Refresh the page and try again.": "\u0641\u0627\u0647\u0633 \u062f\u062e\u0641\u062b \u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0632\u062b \u062d\u0642\u062e\u0630\u062b\u0633\u0633\u062b\u064a. \u0642\u062b\u0628\u0642\u062b\u0633\u0627 \u0641\u0627\u062b \u062d\u0634\u0644\u062b \u0634\u0631\u064a \u0641\u0642\u063a \u0634\u0644\u0634\u0647\u0631.",
"This {parentCategory} has no {childCategory}": "\u0641\u0627\u0647\u0633 {parentCategory} \u0627\u0634\u0633 \u0631\u062e {childCategory}",
"Thumbnail": "\u0641\u0627\u0639\u0648\u0632\u0631\u0634\u0647\u0645",
diff --git a/lms/static/js/i18n/ru/djangojs.js b/lms/static/js/i18n/ru/djangojs.js
index 7510f75b44..b5705051ef 100644
--- a/lms/static/js/i18n/ru/djangojs.js
+++ b/lms/static/js/i18n/ru/djangojs.js
@@ -131,15 +131,10 @@
"A valid email address is required": "\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042d\u042e\u042f",
"Abbreviation": "\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0430",
- "About Me": "\u041e\u0431\u043e \u043c\u043d\u0435",
"About You": "\u041e \u0432\u0430\u0441",
- "About me": "\u041e \u0441\u0435\u0431\u0435",
- "Accomplishments": "\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f",
- "Accomplishments Pagination": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0439",
"Account Information": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438",
"Account Not Activated": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430",
"Account Settings": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438",
- "Account Settings page.": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.",
"Action": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
"Action required: Enter a valid date.": "\u0422\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435: \u0432\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u0434\u0430\u0442\u0443",
"Actions": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f",
@@ -151,7 +146,6 @@
"Add Additional Signatory": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0432\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442",
"Add Cohort": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443",
"Add Component:": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442:",
- "Add Country": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0443",
"Add New Component": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442",
"Add URLs for additional versions": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438",
"Add a Chapter": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u043b\u0430\u0432\u0443",
@@ -161,7 +155,6 @@
"Add a learning outcome here": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u0434\u0435\u0441\u044c",
"Add a response:": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442:",
"Add another group": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443",
- "Add language": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044f\u0437\u044b\u043a",
"Add notes about this learner": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435",
"Add to Dictionary": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c",
"Add to Exception List": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439",
@@ -307,7 +300,6 @@
"Change Manually": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e",
"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}": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f {display_name}",
"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",
@@ -522,7 +514,6 @@
"Edit Membership": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432",
"Edit Team": "\u0412\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443",
"Edit Your Name": "\u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f",
- "Edit the name": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
"Edit this certificate?": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442?",
"Editable": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u043e",
"Editing comment": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f",
@@ -639,7 +630,6 @@
"Free text notes": "\u0417\u0430\u043c\u0435\u0442\u043a\u0438",
"Frequently Asked Questions": "\u0427\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b",
"Full Name": "\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f",
- "Full Profile": "\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c",
"Fullscreen": "\u0412\u043e \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d",
"Fully Supported": "\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f",
"Gender": "\u041f\u043e\u043b",
@@ -799,7 +789,6 @@
"License Display": "\u041f\u043e\u043a\u0430\u0437 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438",
"License Type": "\u0422\u0438\u043f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438",
"Limit Access": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f",
- "Limited Profile": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c",
"Link Description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438",
"Link Your Account": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0441\u0432\u043e\u044e \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c",
"Link types should be unique.": "\u0421\u0441\u044b\u043b\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439.",
@@ -1029,9 +1018,6 @@
"Professional Certificate for {courseName}": "\u0421\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 {courseName}",
"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": "\u041f\u0440\u043e\u0444\u0438\u043b\u044c",
- "Profile Image": "\u0424\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f",
- "Profile image for {username}": "\u0424\u043e\u0442\u043e {username}",
"Promote another member to Admin to remove your admin rights": "\u041f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u043f\u0440\u0430\u0432\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430",
"Provisional": "\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f",
"Provisionally Supported": "\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f",
@@ -1271,7 +1257,6 @@
"Team name cannot have more than 255 characters.": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.",
"Teams": "\u041a\u043e\u043c\u0430\u043d\u0434\u044b",
"Teams Pagination": "\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e \u0441\u0435\u0431\u0435: \u0433\u0434\u0435 \u0432\u044b \u0436\u0438\u0432\u0451\u0442\u0435, \u0447\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0435\u0441\u044c, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0432\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u0435 \u043a\u0443\u0440\u0441\u044b \u0438 \u0447\u0435\u043c\u0443 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f.",
"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u044b",
"Text": "\u0422\u0435\u043a\u0441\u0442",
"Text color": "\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430",
@@ -1498,12 +1483,6 @@
"Use your webcam to take a photo of your ID. We will match this photo with the photo of your face and the name on your account.": "\u041f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \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. \u041c\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u0441\u043d\u0438\u043c\u043e\u043a \u0441\u043e \u0441\u043d\u0438\u043c\u043a\u043e\u043c \u0432\u0430\u0448\u0435\u0433\u043e \u043b\u0438\u0446\u0430 \u0438 \u0438\u043c\u0435\u043d\u0435\u043c \u0432 \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.",
"Use your webcam to take a photo of your face. We will match this photo with the photo on your ID.": "\u041f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0441\u043d\u0438\u043c\u043e\u043a \u0441\u0432\u043e\u0435\u0433\u043e \u043b\u0438\u0446\u0430. \u041c\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u0441\u043d\u0438\u043c\u043e\u043a \u0441 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u0432 \u0432\u0430\u0448\u0435\u043c \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0438 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438.",
"Used": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e",
- "Used in {count} unit": [
- "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 {count} \u0431\u043b\u043e\u043a\u0435",
- "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 {count} \u0431\u043b\u043e\u043a\u0430\u0445",
- "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 {count} \u0431\u043b\u043e\u043a\u0430\u0445",
- "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 {count} \u0431\u043b\u043e\u043a\u0430\u0445"
- ],
"User": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c",
"User Email": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f",
"Username": "\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f",
@@ -1617,12 +1596,10 @@
"You haven't added any assets to this course yet.": "\u0412\u044b \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043a \u044d\u0442\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443.",
"You haven't added any content to this course yet.": "\u0412\u044b \u0435\u0449\u0451 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043a\u0443\u0440\u0441\u0430.",
"You haven't added any textbooks to this course yet.": "\u0412\u044b \u0435\u0449\u0451 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430 \u043a \u044d\u0442\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443.",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "\u0414\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 13 \u043b\u0435\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0442\u0430\u0440\u0448\u0435 13 \u043b\u0435\u0442, \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0433\u043e\u0434 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 {account_settings_page_link}",
"You must enter a valid email address in order to add a new team member": "\u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e \u0447\u043b\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441",
"You must sign out and sign back in before your language changes take effect.": "\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430 \u0432\u0441\u0442\u0443\u043f\u0438\u043b\u043e \u0432 \u0441\u0438\u043b\u0443, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0439\u0442\u0438 \u0438 \u0441\u043d\u043e\u0432\u0430 \u0432\u043e\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443.",
"You must specify a name": "\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f",
"You must specify a name for the cohort": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\u0414\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0433\u043e\u0434 \u0432\u0430\u0448\u0435\u0433\u043e \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 {account_settings_page_link}",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "\u0412\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0441 \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u043e\u0439. \u041a\u043e\u0433\u0434\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u043e\u0442\u043e, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b\u0438 \u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u0430\u043c\u0435\u0440\u0435.",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "\u0412\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430, \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0432\u0430\u0448\u0435 \u0438\u043c\u044f \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f.",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "\u0412\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0441 \u0432\u0430\u0448\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439. \u041f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0432\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.",
@@ -1766,7 +1743,6 @@
"{numVotes} \u0433\u043e\u043b\u043e\u0441\u043e\u0432"
],
"{organization}\\'s logo": "\u043b\u043e\u0433\u043e\u0442\u0438\u043f {organization}",
- "{platform_name} learners can see my:": "\u0421\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0438 {platform_name} \u0432\u0438\u0434\u044f\u0442 \u043c\u043e\u0439:",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435:{screen_reader_end} \u043d\u0435\u0442 \u0433\u0440\u0443\u043f\u043f \u043f\u043e \u0438\u0437\u0443\u0447\u0430\u0435\u043c\u043e\u043c\u0443 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0443.",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435:{screen_reader_end} \u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e \u0438\u0437\u0443\u0447\u0430\u0435\u043c\u043e\u043c\u0443 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0443 \u0443\u0434\u0430\u043b\u0435\u043d\u0430. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0440\u0443\u0433\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443.",
"{totalItems} total": "{totalItems} \u0438\u0442\u043e\u0433",
diff --git a/lms/static/js/i18n/zh-cn/djangojs.js b/lms/static/js/i18n/zh-cn/djangojs.js
index 587528e2b3..5eaa9b66ff 100644
--- a/lms/static/js/i18n/zh-cn/djangojs.js
+++ b/lms/static/js/i18n/zh-cn/djangojs.js
@@ -83,26 +83,19 @@
"A name that identifies your team (maximum 255 characters).": "\u56e2\u961f\u540d\u79f0 (\u4e0d\u957f\u4e8e255\u4e2a\u5b57\u7b26)",
"A short description of the team to help other learners understand the goals or direction of the team (maximum 300 characters).": "\u7b80\u77ed\u7684\u56e2\u961f\u63cf\u8ff0\uff0c\u4ee5\u5e2e\u52a9\u5176\u4ed6\u5b66\u4e60\u8005\u4e86\u89e3\u6b64\u56e2\u961f\u7684\u76ee\u6807\u4e0e\u65b9\u5411 (\u6700\u5927\u4e3a300\u4e2a\u5b57\u7b26\u957f\u5ea6)",
"A valid email address is required": "\u9700\u8981\u4e00\u4e2a\u6709\u6548\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740",
- "About Me": "\u4e2a\u4eba\u8d44\u6599",
"About You": "\u5173\u4e8e\u60a8",
- "About me": "\u4e2a\u4eba\u7b80\u4ecb",
- "Accomplishments": "\u6210\u7ee9",
- "Accomplishments Pagination": "\u6210\u7ee9\u5206\u9875",
"Account Information": "\u5e10\u6237\u4fe1\u606f",
"Account Not Activated": "\u8d26\u6237\u672a\u6fc0\u6d3b",
"Account Settings": "\u8d26\u6237\u8bbe\u7f6e",
- "Account Settings page.": "\u8d26\u6237\u8bbe\u7f6e\u9875\u9762\u3002",
"Action": "\u64cd\u4f5c",
"Actions": "\u64cd\u4f5c",
"Activate Your Account": "\u6fc0\u6d3b\u4f60\u7684\u8d26\u6237",
"Activating a link in this group will skip to the corresponding point in the video.": "\u6fc0\u6d3b\u672c\u7ec4\u4e2d\u7684\u94fe\u63a5\u5c06\u8df3\u8f6c\u81f3\u89c6\u9891\u4e2d\u76f8\u5e94\u7684\u5730\u65b9\u3002",
"Add Cohort": "\u6dfb\u52a0\u7fa4\u7ec4",
- "Add Country": "\u6dfb\u52a0\u56fd\u5bb6",
"Add a New Cohort": "\u6dfb\u52a0\u65b0\u7fa4\u7ec4",
"Add a Response": "\u6dfb\u52a0\u56de\u590d",
"Add a comment": "\u6dfb\u52a0\u8bc4\u8bba",
"Add a response:": "\u6dfb\u52a0\u4e00\u6761\u56de\u590d\uff1a",
- "Add language": "\u6dfb\u52a0\u8bed\u8a00",
"Add notes about this learner": "\u6dfb\u52a0\u5173\u4e8e\u6b64\u5b66\u5458\u7684\u5907\u6ce8",
"Add to Dictionary": "\u52a0\u5165\u5230\u5b57\u5178",
"Add to Exception List": "\u6dfb\u52a0\u5230\u7279\u6b8a\u5904\u7406\u5217\u8868",
@@ -469,7 +462,6 @@
"Formats": "\u683c\u5f0f",
"Frequently Asked Questions": "\u5e38\u89c1\u95ee\u9898",
"Full Name": "\u5168\u540d",
- "Full Profile": "\u5168\u90e8\u8d44\u6599",
"Fullscreen": "\u5168\u5c4f",
"Gender": "\u6027\u522b",
"General": "\u4e00\u822c",
@@ -592,7 +584,6 @@
"Legal name": "\u6cd5\u5b9a\u59d3\u540d",
"Less": "\u6536\u8d77",
"Library User": "\u77e5\u8bc6\u5e93\u7528\u6237",
- "Limited Profile": "\u90e8\u5206\u8d44\u6599",
"Link Description": "\u94fe\u63a5\u7684\u63cf\u8ff0",
"Link Your Account": "\u5173\u8054\u60a8\u7684\u8d26\u6237",
"Link types should be unique.": "\u94fe\u63a5\u7c7b\u578b\u5e94\u5f53\u552f\u4e00\u3002",
@@ -760,9 +751,6 @@
"Professional Certificate for {courseName}": "{courseName} \u7684\u4e13\u4e1a\u8bc1\u4e66",
"Professional Education": "\u4e13\u4e1a\u6559\u80b2",
"Professional Education Verified Certificate": "\u4e13\u4e1a\u6559\u80b2\u8ba4\u8bc1\u8bc1\u4e66",
- "Profile": "\u7528\u6237\u8d44\u6599",
- "Profile Image": "\u8d44\u6599\u7167\u7247",
- "Profile image for {username}": "{username} \u7684\u5934\u50cf",
"Public": "\u516c\u5f00",
"Publish": "\u53d1\u5e03",
"Publishing": "\u6b63\u5728\u53d1\u5e03",
@@ -948,7 +936,6 @@
"Team name cannot have more than 255 characters.": "\u56e2\u961f\u540d\u79f0\u4e0d\u80fd\u8d85\u8fc7 255 \u4e2a\u5b57\u7b26",
"Teams": "\u56e2\u961f",
"Teams Pagination": "\u56e2\u961f\u5206\u9875",
- "Tell other learners a little about yourself: where you live, what your interests are, why you're taking courses, or what you hope to learn.": "\u5411\u5176\u4ed6\u7528\u6237\u7b80\u5355\u4ecb\u7ecd\u4e0b\u4f60\u81ea\u5df1\uff1a\u5982\u5c45\u4f4f\u5730\u3001\u5174\u8da3\u7231\u597d\u3001\u4e3a\u4ec0\u4e48\u9009\u62e9\u8fd9\u4e9b\u8bfe\u7a0b\uff0c\u53ca\u4f60\u5e0c\u671b\u5b66\u4e60\u54ea\u65b9\u9762\u7684\u77e5\u8bc6",
"Templates": "\u6a21\u677f",
"Text": "\u6587\u672c",
"Text color": "\u6587\u672c\u989c\u8272",
@@ -1190,12 +1177,10 @@
"You have not created any group configurations yet.": "\u60a8\u8fd8\u6ca1\u6709\u521b\u5efa\u4efb\u4f55\u7ec4\u914d\u7f6e\u3002",
"You have unsaved changes are you sure you want to navigate away?": "\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\u5417\uff1f",
"You have unsaved changes. Do you really want to leave this page?": "\u60a8\u5c1a\u6709\u672a\u4fdd\u5b58\u7684\u4fee\u6539\uff0c\u786e\u5b9a\u8981\u79bb\u6b64\u9875\u9762\u5417\uff1f",
- "You must be over 13 to share a full profile. If you are over 13, make sure that you have specified a birth year on the {account_settings_page_link}": "13\u5c81\u4ee5\u4e0a\u7684\u7528\u6237\u624d\u80fd\u5206\u4eab\u5b8c\u6574\u8d44\u6599\u3002\u5982\u679c\u60a8\u572813\u5c81\u4ee5\u4e0a\uff0c\u8bf7\u786e\u8ba4\u5df2\u5728 {account_settings_page_link} \u9875\u9762\u4e2d\u586b\u5199\u4e86\u51fa\u751f\u5e74\u4efd\u3002",
"You must enter a valid email address in order to add a new team member": "\u60a8\u5fc5\u987b\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u4ee5\u4fbf\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684\u56e2\u961f\u6210\u5458",
"You must sign out and sign back in before your language changes take effect.": "\u8bed\u8a00\u8bbe\u7f6e\u5c06\u5728\u60a8\u91cd\u65b0\u767b\u5f55\u540e\u751f\u6548",
"You must specify a name": "\u60a8\u5fc5\u987b\u6307\u5b9a\u4e00\u4e2a\u540d\u79f0",
"You must specify a name for the cohort": "\u60a8\u5fc5\u987b\u4e3a\u8be5\u7fa4\u7ec4\u547d\u540d\u3002",
- "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "\u60a8\u5fc5\u987b\u586b\u5199\u51fa\u751f\u5e74\u4efd\u624d\u80fd\u5206\u4eab\u5b8c\u6574\u8d44\u6599\u3002\u70b9\u51fb {account_settings_page_link} \u586b\u5199",
"You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "\u60a8\u9700\u8981\u4e00\u4e2a\u5177\u6709\u6444\u50cf\u5934\u7684\u7535\u8111\u3002\u5f53\u60a8\u6536\u5230\u6d4f\u89c8\u5668\u5f39\u7a97\u65f6\uff0c\u786e\u4fdd\u5b83\u6709\u6743\u9650\u4f7f\u7528\u6444\u50cf\u5934\u3002",
"You need a driver's license, passport, or other government-issued ID that has your name and photo.": "\u60a8\u9700\u8981\u9a7e\u7167\u3001\u62a4\u7167\u6216\u8005\u5176\u4ed6\u7531\u653f\u5e9c\u7b7e\u53d1\u7684\u5e26\u6709\u60a8\u59d3\u540d\u548c\u7167\u7247\u7684\u8eab\u4efd\u8bc1\u4ef6\u3002",
"You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "\u60a8\u9700\u8981\u4e00\u4efd\u5e26\u6709\u60a8\u59d3\u540d\u548c\u7167\u7247\u7684\u8eab\u4efd\u8bc1\u4ef6\uff0c\u6211\u4eec\u53ef\u4ee5\u63a5\u53d7\u9a7e\u7167\u3001\u62a4\u7167\u4ee5\u53ca\u5176\u4ed6\u7531\u653f\u5e9c\u7b7e\u53d1\u7684\u8eab\u4efd\u8bc1\u4ef6\u3002",
@@ -1291,7 +1276,6 @@
"{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.": "{browse_span_start} \u7528\u5176\u4ed6\u6807\u9898\u6d4f\u89c8\u56e2\u961f {span_end} \u6216 {search_span_start} \u641c\u7d22\u56e2\u961f{span_end} \u65bc\u6b64\u6807\u9898\u3002 \u5982\u679c\u4f60\u4ecd\u7136\u65e0\u6cd5\u627e\u5230\u56e2\u961f\u6765\u52a0\u5165\uff0c {create_span_start} \u5728\u6b64\u6807\u9898\u65b0\u521b\u4e00\u4e2a\u56e2\u961f{span_end}\u3002",
"{email} is already on the {container} team. Recheck the email address if you want to add a new member.": "{email}\u5df2\u5728{container}\u56e2\u961f\u4e2d\u3002\u5982\u679c\u60a8\u60f3\u6dfb\u52a0\u65b0\u6210\u5458\uff0c\u8bf7\u518d\u6b21\u68c0\u67e5\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002",
"{organization}\\'s logo": "{organization}\\'s \u7684\u6807\u8bc6",
- "{platform_name} learners can see my:": "\u5bf9{platform_name}\u7528\u6237\u53ef\u89c1\uff1a",
"{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}\u8b66\u544a\uff1a{screen_reader_end}\u4e0d\u5b58\u5728\u5185\u5bb9\u7ec4\u3002",
"{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}\u8b66\u544a\uff1a{screen_reader_end}\u4e4b\u524d\u9009\u62e9\u7684\u5185\u5bb9\u7ec4\u5df2\u88ab\u5220\u9664\u3002\u8bf7\u9009\u62e9\u53e6\u4e00\u4e2a\u5185\u5bb9\u7ec4\u3002",
"\u2026": "\u2026"
diff --git a/lms/static/js/instructor_dashboard/data_download.js b/lms/static/js/instructor_dashboard/data_download.js
index bd4e62b4d6..32636a76a4 100644
--- a/lms/static/js/instructor_dashboard/data_download.js
+++ b/lms/static/js/instructor_dashboard/data_download.js
@@ -122,16 +122,18 @@
});
this.$proctored_exam_csv_btn.click(function() {
var url = dataDownloadObj.$proctored_exam_csv_btn.data('endpoint');
+ var errorMessage = gettext('Error generating proctored exam results. Please try again.');
return $.ajax({
type: 'POST',
dataType: 'json',
url: url,
- error: function() {
+ error: function(error) {
+ if (error.responseText) {
+ errorMessage = JSON.parse(error.responseText);
+ }
dataDownloadObj.clear_display();
- dataDownloadObj.$reports_request_response_error.text(
- gettext('Error generating proctored exam results. Please try again.')
- );
- return $('.msg-error').css({
+ dataDownloadObj.$reports_request_response_error.text(errorMessage);
+ return dataDownloadObj.$reports_request_response_error.css({
display: 'block'
});
},
@@ -146,16 +148,18 @@
});
this.$survey_results_csv_btn.click(function() {
var url = dataDownloadObj.$survey_results_csv_btn.data('endpoint');
+ var errorMessage = gettext('Error generating survey results. Please try again.');
return $.ajax({
type: 'POST',
dataType: 'json',
url: url,
- error: function() {
+ error: function(error) {
+ if (error.responseText) {
+ errorMessage = JSON.parse(error.responseText);
+ }
dataDownloadObj.clear_display();
- dataDownloadObj.$reports_request_response_error.text(
- gettext('Error generating survey results. Please try again.')
- );
- return $('.msg-error').css({
+ dataDownloadObj.$reports_request_response_error.text(errorMessage);
+ return dataDownloadObj.$reports_request_response_error.css({
display: 'block'
});
},
@@ -170,16 +174,18 @@
});
this.$list_studs_csv_btn.click(function() {
var url = dataDownloadObj.$list_studs_csv_btn.data('endpoint') + '/csv';
+ var errorMessage = gettext('Error generating student profile information. Please try again.');
dataDownloadObj.clear_display();
return $.ajax({
type: 'POST',
dataType: 'json',
url: url,
- error: function() {
- dataDownloadObj.$reports_request_response_error.text(
- gettext('Error generating student profile information. Please try again.')
- );
- return $('.msg-error').css({
+ error: function(error) {
+ if (error.responseText) {
+ errorMessage = JSON.parse(error.responseText);
+ }
+ dataDownloadObj.$reports_request_response_error.text(errorMessage);
+ return dataDownloadObj.$reports_request_response_error.css({
display: 'block'
});
},
@@ -201,9 +207,13 @@
url: url,
error: function() {
dataDownloadObj.clear_display();
- return dataDownloadObj.$download_request_response_error.text(
+ dataDownloadObj.$download_request_response_error.text(
gettext('Error getting student list.')
);
+ return dataDownloadObj.$download_request_response_error.css({
+ display: 'block'
+ });
+
},
success: function(data) {
var $tablePlaceholder, columns, feature, gridData, options;
@@ -251,7 +261,7 @@
dataDownloadObj.$reports_request_response_error.text(
JSON.parse(error.responseText)
);
- return $('.msg-error').css({
+ return dataDownloadObj.$reports_request_response_error.css({
display: 'block'
});
},
@@ -265,16 +275,18 @@
});
this.$list_may_enroll_csv_btn.click(function() {
var url = dataDownloadObj.$list_may_enroll_csv_btn.data('endpoint');
+ var errorMessage = gettext('Error generating list of students who may enroll. Please try again.');
dataDownloadObj.clear_display();
return $.ajax({
type: 'POST',
dataType: 'json',
url: url,
- error: function() {
- dataDownloadObj.$reports_request_response_error.text(
- gettext('Error generating list of students who may enroll. Please try again.')
- );
- return $('.msg-error').css({
+ error: function(error) {
+ if (error.responseText) {
+ errorMessage = JSON.parse(error.responseText);
+ }
+ dataDownloadObj.$reports_request_response_error.text(errorMessage);
+ return dataDownloadObj.$reports_request_response_error.css({
display: 'block'
});
},
@@ -294,9 +306,12 @@
url: url,
error: function() {
dataDownloadObj.clear_display();
- return dataDownloadObj.$download_request_response_error.text(
+ dataDownloadObj.$download_request_response_error.text(
gettext('Error retrieving grading configuration.')
);
+ return dataDownloadObj.$download_request_response_error.css({
+ display: 'block'
+ });
},
success: function(data) {
dataDownloadObj.clear_display();
@@ -307,29 +322,27 @@
});
this.$async_report_btn.click(function(e) {
var url = $(e.target).data('endpoint');
+ var errorMessage = '';
dataDownloadObj.clear_display();
return $.ajax({
type: 'POST',
dataType: 'json',
url: url,
- error: statusAjaxError(function() {
- if (e.target.name === 'calculate-grades-csv') {
- dataDownloadObj.$grades_request_response_error.text(
- gettext('Error generating grades. Please try again.')
- );
+ error: function(error) {
+ if (error.responseText) {
+ errorMessage = JSON.parse(error.responseText);
+ } else if (e.target.name === 'calculate-grades-csv') {
+ errorMessage = gettext('Error generating grades. Please try again.');
} else if (e.target.name === 'problem-grade-report') {
- dataDownloadObj.$grades_request_response_error.text(
- gettext('Error generating problem grade report. Please try again.')
- );
+ errorMessage = gettext('Error generating problem grade report. Please try again.');
} else if (e.target.name === 'export-ora2-data') {
- dataDownloadObj.$grades_request_response_error.text(
- gettext('Error generating ORA data report. Please try again.')
- );
+ errorMessage = gettext('Error generating ORA data report. Please try again.');
}
- return $('.msg-error').css({
+ dataDownloadObj.$reports_request_response_error.text(errorMessage);
+ return dataDownloadObj.$reports_request_response_error.css({
display: 'block'
});
- }),
+ },
success: function(data) {
dataDownloadObj.$reports_request_response.text(data.status);
return $('.msg-confirm').css({
diff --git a/lms/static/js/instructor_dashboard/membership.js b/lms/static/js/instructor_dashboard/membership.js
index 45870df249..5d40391bd1 100644
--- a/lms/static/js/instructor_dashboard/membership.js
+++ b/lms/static/js/instructor_dashboard/membership.js
@@ -598,6 +598,7 @@ such that the value can be defined later than this assignment (file load order).
this.$reason_field = this.$container.find("textarea[name='reason-field']");
this.$checkbox_autoenroll = this.$container.find("input[name='auto-enroll']");
this.$checkbox_emailstudents = this.$container.find("input[name='email-students']");
+ this.checkbox_emailstudents_initialstate = this.$checkbox_emailstudents.is(':checked');
this.$task_response = this.$container.find('.request-response');
this.$request_response_error = this.$container.find('.request-response-error');
this.$enrollment_button.click(function(event) {
@@ -634,7 +635,7 @@ such that the value can be defined later than this assignment (file load order).
batchEnrollment.prototype.clear_input = function() {
this.$identifier_input.val('');
this.$reason_field.val('');
- this.$checkbox_emailstudents.attr('checked', true);
+ this.$checkbox_emailstudents.attr('checked', this.checkbox_emailstudents_initialstate);
return this.$checkbox_autoenroll.attr('checked', true);
};
diff --git a/lms/static/js/spec/staff_debug_actions_spec.js b/lms/static/js/spec/staff_debug_actions_spec.js
index f6a45fc5c7..53dd08c0f9 100644
--- a/lms/static/js/spec/staff_debug_actions_spec.js
+++ b/lms/static/js/spec/staff_debug_actions_spec.js
@@ -96,7 +96,7 @@ define([
error_msg: 'Failed to reset attempts for user.'
};
StaffDebug.doInstructorDashAction(action);
- AjaxHelpers.respondWithError(requests);
+ AjaxHelpers.respondWithTextError(requests);
expect($('#idash_msg').text()).toBe('Failed to reset attempts for user. ');
$('#result_' + locationName).remove();
});
diff --git a/lms/static/js/spec/student_account/register_spec.js b/lms/static/js/spec/student_account/register_spec.js
index d035155ac7..b50e82c8f8 100644
--- a/lms/static/js/spec/student_account/register_spec.js
+++ b/lms/static/js/spec/student_account/register_spec.js
@@ -30,6 +30,17 @@
confirm_email: 'xsy@edx.org',
honor_code: true
},
+ $email = null,
+ $name = null,
+ $username = null,
+ $password = null,
+ $levelOfEducation = null,
+ $gender = null,
+ $yearOfBirth = null,
+ $mailingAddress = null,
+ $goals = null,
+ $confirmEmail = null,
+ $honorCode = null,
THIRD_PARTY_AUTH = {
currentProvider: null,
providers: [
@@ -49,9 +60,26 @@
}
]
},
+ VALIDATION_DECISIONS_POSITIVE = {
+ validation_decisions: {
+ email: '',
+ username: '',
+ password: '',
+ confirm_email: ''
+ }
+ },
+ VALIDATION_DECISIONS_NEGATIVE = {
+ validation_decisions: {
+ email: 'Error.',
+ username: 'Error.',
+ password: 'Error.',
+ confirm_email: 'Error'
+ }
+ },
FORM_DESCRIPTION = {
method: 'post',
submit_url: '/user_api/v1/account/registration/',
+ validation_url: '/api/user/v1/validation/registration',
fields: [
{
placeholder: 'username@domain.com',
@@ -110,10 +138,10 @@
defaultValue: '',
type: 'select',
options: [
- {value: '', name: '--'},
- {value: 'p', name: 'Doctorate'},
- {value: 'm', name: "Master's or professional degree"},
- {value: 'b', name: "Bachelor's degree"}
+ {value: '', name: '--'},
+ {value: 'p', name: 'Doctorate'},
+ {value: 'm', name: "Master's or professional degree"},
+ {value: 'b', name: "Bachelor's degree"}
],
required: false,
instructions: 'Select your education level.',
@@ -126,10 +154,10 @@
defaultValue: '',
type: 'select',
options: [
- {value: '', name: '--'},
- {value: 'm', name: 'Male'},
- {value: 'f', name: 'Female'},
- {value: 'o', name: 'Other'}
+ {value: '', name: '--'},
+ {value: 'm', name: 'Male'},
+ {value: 'f', name: 'Female'},
+ {value: 'o', name: 'Other'}
],
required: false,
instructions: 'Select your gender.',
@@ -142,10 +170,10 @@
defaultValue: '',
type: 'select',
options: [
- {value: '', name: '--'},
- {value: 1900, name: '1900'},
- {value: 1950, name: '1950'},
- {value: 2014, name: '2014'}
+ {value: '', name: '--'},
+ {value: 1900, name: '1900'},
+ {value: 1950, name: '1950'},
+ {value: 2014, name: '2014'}
],
required: false,
instructions: 'Select your year of birth.',
@@ -185,7 +213,6 @@
}
]
};
-
var createRegisterView = function(that) {
// Initialize the register model
model = new RegisterModel({}, {
@@ -209,6 +236,43 @@
view.on('auth-complete', function() {
authComplete = true;
});
+
+ // Target each form field.
+ $email = $('#register-email');
+ $confirmEmail = $('#register-confirm_email');
+ $name = $('#register-name');
+ $username = $('#register-username');
+ $password = $('#register-password');
+ $levelOfEducation = $('#register-level_of_education');
+ $gender = $('#register-gender');
+ $yearOfBirth = $('#register-year_of_birth');
+ $mailingAddress = $('#register-mailing_address');
+ $goals = $('#register-goals');
+ $honorCode = $('#register-honor_code');
+ };
+
+ var fillData = function() {
+ $email.val(USER_DATA.email);
+ $confirmEmail.val(USER_DATA.email);
+ $name.val(USER_DATA.name);
+ $username.val(USER_DATA.username);
+ $password.val(USER_DATA.password);
+ $levelOfEducation.val(USER_DATA.level_of_education);
+ $gender.val(USER_DATA.gender);
+ $yearOfBirth.val(USER_DATA.year_of_birth);
+ $mailingAddress.val(USER_DATA.mailing_address);
+ $goals.val(USER_DATA.goals);
+ // Check the honor code checkbox
+ $honorCode.prop('checked', USER_DATA.honor_code);
+ };
+
+ var liveValidate = function($el, validationSuccess) {
+ $el.focus();
+ if (!_.isUndefined(validationSuccess) && !validationSuccess) {
+ model.trigger('validation', $el, VALIDATION_DECISIONS_NEGATIVE);
+ } else {
+ model.trigger('validation', $el, VALIDATION_DECISIONS_POSITIVE);
+ }
};
var submitForm = function(validationSuccess) {
@@ -216,19 +280,7 @@
var clickEvent = $.Event('click');
// Simulate manual entry of registration form data
- $('#register-email').val(USER_DATA.email);
- $('#register-confirm_email').val(USER_DATA.email);
- $('#register-name').val(USER_DATA.name);
- $('#register-username').val(USER_DATA.username);
- $('#register-password').val(USER_DATA.password);
- $('#register-level_of_education').val(USER_DATA.level_of_education);
- $('#register-gender').val(USER_DATA.gender);
- $('#register-year_of_birth').val(USER_DATA.year_of_birth);
- $('#register-mailing_address').val(USER_DATA.mailing_address);
- $('#register-goals').val(USER_DATA.goals);
-
- // Check the honor code checkbox
- $('#register-honor_code').prop('checked', USER_DATA.honor_code);
+ fillData();
// If validationSuccess isn't passed, we avoid
// spying on `view.validate` twice
@@ -238,6 +290,10 @@
isValid: validationSuccess,
message: 'Submission was validated.'
});
+ // Successful validation means there's no need to use AJAX calls from liveValidate,
+ if (validationSuccess) {
+ spyOn(view, 'liveValidate').and.callFake(function() {});
+ }
}
// Submit the email address
@@ -284,6 +340,7 @@
if (param === '?course_id') {
return encodeURIComponent(COURSE_ID);
}
+ return null;
});
// Attempt to register
@@ -308,17 +365,17 @@
expect($('.button-oa2-facebook')).toBeVisible();
});
- it('validates registration form fields', function() {
+ it('validates registration form fields on form submission', function() {
createRegisterView(this);
// Submit the form, with successful validation
submitForm(true);
// Verify that validation of form fields occurred
- expect(view.validate).toHaveBeenCalledWith($('#register-email')[0]);
- expect(view.validate).toHaveBeenCalledWith($('#register-name')[0]);
- expect(view.validate).toHaveBeenCalledWith($('#register-username')[0]);
- expect(view.validate).toHaveBeenCalledWith($('#register-password')[0]);
+ expect(view.validate).toHaveBeenCalledWith($email[0]);
+ expect(view.validate).toHaveBeenCalledWith($name[0]);
+ expect(view.validate).toHaveBeenCalledWith($username[0]);
+ expect(view.validate).toHaveBeenCalledWith($password[0]);
// Verify that no submission errors are visible
expect(view.$formFeedback.find('.' + view.formErrorsJsHook).length).toEqual(0);
@@ -327,7 +384,34 @@
expect(view.$submitButton).toHaveAttr('disabled');
});
- it('displays registration form validation errors', function() {
+ it('live validates registration form fields', function() {
+ var requiredValidationFields = [$email, $confirmEmail, $username, $password],
+ i,
+ $el;
+ createRegisterView(this);
+
+ for (i = 0; i < requiredValidationFields.length; ++i) {
+ $el = requiredValidationFields[i];
+
+ // Perform successful live validations.
+ liveValidate($el);
+
+ // Confirm success.
+ expect($el).toHaveClass('success');
+
+ // Confirm that since we've blurred from each input, required text doesn't show.
+ expect(view.getRequiredTextLabel($el)).toHaveClass('hidden');
+
+ // Confirm fa-check shows.
+ expect(view.getIcon($el)).toHaveClass('fa-check');
+ expect(view.getIcon($el)).toBeVisible();
+
+ // Confirm the error tip is empty.
+ expect(view.getErrorTip($el).val().length).toBe(0);
+ }
+ });
+
+ it('displays registration form validation errors on form submission', function() {
createRegisterView(this);
// Submit the form, with failed validation
@@ -343,7 +427,34 @@
expect(view.$submitButton).not.toHaveAttr('disabled');
});
- it('displays an error if the server returns an error while registering', function() {
+ it('displays live registration form validation errors', function() {
+ var requiredValidationFields = [$email, $confirmEmail, $username, $password],
+ i,
+ $el;
+ createRegisterView(this);
+
+ for (i = 0; i < requiredValidationFields.length; ++i) {
+ $el = requiredValidationFields[i];
+
+ // Perform invalid live validations.
+ liveValidate($el, false);
+
+ // Confirm error.
+ expect($el).toHaveClass('error');
+
+ // Confirm that since we've blurred from each input, required text still shows for errors.
+ expect(view.getRequiredTextLabel($el)).not.toHaveClass('hidden');
+
+ // Confirm fa-times shows.
+ expect(view.getIcon($el)).toHaveClass('fa-exclamation');
+ expect(view.getIcon($el)).toBeVisible();
+
+ // Confirm the error tip shows an error message.
+ expect(view.getErrorTip($el).val()).not.toBeEmpty();
+ }
+ });
+
+ it('displays an error on form submission if the server returns an error', function() {
createRegisterView(this);
// Submit the form, with successful validation
diff --git a/lms/static/js/staff_debug_actions.js b/lms/static/js/staff_debug_actions.js
index caf4b67750..d242e7f49c 100644
--- a/lms/static/js/staff_debug_actions.js
+++ b/lms/static/js/staff_debug_actions.js
@@ -54,12 +54,12 @@ var StaffDebug = (function() {
try {
responseJSON = $.parseJSON(request.responseText);
} catch (e) {
- responseJSON = {error: gettext('Unknown Error Occurred.')};
+ responseJSON = 'Unknown Error Occurred.';
}
var text = _.template('{error_msg} {error}', {interpolate: /\{(.+?)\}/g})(
{
error_msg: action.error_msg,
- error: responseJSON.error
+ error: gettext(responseJSON)
}
);
var html = _.template('
{text}
', {interpolate: /\{(.+?)\}/g})(
diff --git a/lms/static/js/student_account/tos_modal.js b/lms/static/js/student_account/tos_modal.js
index d4982833c5..b1c9ad0571 100644
--- a/lms/static/js/student_account/tos_modal.js
+++ b/lms/static/js/student_account/tos_modal.js
@@ -79,6 +79,7 @@
var buildIframe = function(link, modalSelector, contentSelector, tosLinkSelector) {
// Create an iframe with contents from the link and set its height to match the content area
return $('