Commit 061a4d93 by Will Daly

Merge remote-tracking branch 'origin/master' into authoring

parents 795b9ab9 2f360d23
...@@ -13,6 +13,6 @@ before_script: ...@@ -13,6 +13,6 @@ before_script:
- "sh -e /etc/init.d/xvfb start" - "sh -e /etc/init.d/xvfb start"
script: script:
- "./scripts/test.sh" - "./scripts/test.sh"
- "./scripts/i18n.sh" - "./scripts/i18n.sh eo"
after_success: after_success:
coveralls coveralls
...@@ -307,12 +307,18 @@ In the component editor, locate the following XML: ...@@ -307,12 +307,18 @@ In the component editor, locate the following XML:
<assessments> <assessments>
<assessment name="student-training"> <assessment name="student-training">
<example> <example>
<answer>Replace this text with a sample response for this assignment. You'll assess this sample response in the courseware, and students will then learn to assess responses by assessing this response and comparing the options that they select in the rubric with the options that you selected.</answer> <answer>
(optional) Replace this text with your own sample response for this assignment. Below, list the names of the criteria for this assignment, and then specify the name of the option that you would select for this response. Students will learn to assess responses by assessing this response and comparing the rubric options that they select with the rubric options that you specified.
If you don't want to provide sample responses and scores, delete the entire 'assessment name="student-training"' element.
</answer>
<select criterion="Ideas" option="Fair"/> <select criterion="Ideas" option="Fair"/>
<select criterion="Content" option="Good"/> <select criterion="Content" option="Good"/>
</example> </example>
<example> <example>
<answer>Replace this text with a sample response for this assignment. You'll assess this sample response in the courseware, and students will then learn to assess responses by assessing this response and comparing the options that they select in the rubric with the options that you selected.</answer> <answer>
(optional) Replace this text with another sample response, and then specify the options that you would select for this response below. To provide more sample responses, copy an "example" element and paste as many as you want before the closing "assessment" tag.
</answer>
<select criterion="Ideas" option="Poor"/> <select criterion="Ideas" option="Poor"/>
<select criterion="Content" option="Good"/> <select criterion="Content" option="Good"/>
</example> </example>
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
Public interface for AI training and grading, used by workers. Public interface for AI training and grading, used by workers.
""" """
import logging import logging
from httplib import HTTPException
from django.db import DatabaseError from django.db import DatabaseError
from dogapi import dog_stats_api from dogapi import dog_stats_api
from openassessment.assessment.models import ( from openassessment.assessment.models import (
...@@ -66,21 +67,16 @@ def get_grading_task_params(grading_workflow_uuid): ...@@ -66,21 +67,16 @@ def get_grading_task_params(grading_workflow_uuid):
raise AIGradingInternalError(msg) raise AIGradingInternalError(msg)
try: try:
classifiers = list(classifier_set.classifiers.select_related().all())
return { return {
'essay_text': workflow.essay_text, 'essay_text': workflow.essay_text,
'classifier_set': { 'classifier_set': workflow.classifier_set.classifier_data_by_criterion,
classifier.criterion.name: classifier.download_classifier_data()
for classifier in classifiers
},
'algorithm_id': workflow.algorithm_id, 'algorithm_id': workflow.algorithm_id,
'valid_scores': { 'valid_scores': workflow.classifier_set.valid_scores_by_criterion,
classifier.criterion.name: classifier.valid_scores
for classifier in classifiers
}
} }
except (DatabaseError, ClassifierSerializeError, IncompleteClassifierSet, ValueError) as ex: except (
DatabaseError, ClassifierSerializeError, IncompleteClassifierSet,
ValueError, IOError, HTTPException
) as ex:
msg = ( msg = (
u"An unexpected error occurred while retrieving " u"An unexpected error occurred while retrieving "
u"classifiers for the grading workflow with UUID {uuid}: {ex}" u"classifiers for the grading workflow with UUID {uuid}: {ex}"
...@@ -291,3 +287,65 @@ def create_classifiers(training_workflow_uuid, classifier_set): ...@@ -291,3 +287,65 @@ def create_classifiers(training_workflow_uuid, classifier_set):
).format(uuid=training_workflow_uuid, ex=ex) ).format(uuid=training_workflow_uuid, ex=ex)
logger.exception(msg) logger.exception(msg)
raise AITrainingInternalError(msg) raise AITrainingInternalError(msg)
def is_training_workflow_complete(workflow_uuid):
"""
Check whether the training workflow is complete.
Args:
workflow_uuid (str): The UUID of the training workflow
Returns:
bool
Raises:
AITrainingRequestError
AITrainingInternalError
"""
try:
return AITrainingWorkflow.is_workflow_complete(workflow_uuid)
except AITrainingWorkflow.DoesNotExist:
msg = (
u"Could not retrieve training workflow "
u"with uuid {uuid} to check whether it's complete."
).format(uuid=workflow_uuid)
raise AITrainingRequestError(msg)
except DatabaseError:
msg = (
u"An unexpected error occurred while checking "
u"the training workflow with uuid {uuid} for completeness"
).format(uuid=workflow_uuid)
raise AITrainingInternalError(msg)
def is_grading_workflow_complete(workflow_uuid):
"""
Check whether the grading workflow is complete.
Args:
workflow_uuid (str): The UUID of the grading workflow
Returns:
bool
Raises:
AIGradingRequestError
AIGradingInternalError
"""
try:
return AIGradingWorkflow.is_workflow_complete(workflow_uuid)
except AIGradingWorkflow.DoesNotExist:
msg = (
u"Could not retrieve grading workflow "
u"with uuid {uuid} to check whether it's complete."
).format(uuid=workflow_uuid)
raise AIGradingRequestError(msg)
except DatabaseError:
msg = (
u"An unexpected error occurred while checking "
u"the grading workflow with uuid {uuid} for completeness"
).format(uuid=workflow_uuid)
raise AIGradingInternalError(msg)
...@@ -24,14 +24,22 @@ logger = logging.getLogger(__name__) ...@@ -24,14 +24,22 @@ logger = logging.getLogger(__name__)
# Use an in-memory cache to hold classifier data, but allow settings to override this. # Use an in-memory cache to hold classifier data, but allow settings to override this.
# The classifier data will generally be larger than memcached's default max size # The classifier data will generally be larger than memcached's default max size
CLASSIFIERS_CACHE = getattr( CLASSIFIERS_CACHE_IN_MEM = getattr(
settings, 'ORA2_CLASSIFIERS_CACHE', settings, 'ORA2_CLASSIFIERS_CACHE_IN_MEM',
get_cache( get_cache(
'django.core.cache.backends.locmem.LocMemCache', 'django.core.cache.backends.locmem.LocMemCache',
LOCATION='openassessment.ai.classifiers_dict' LOCATION='openassessment.ai.classifiers_dict'
) )
) )
CLASSIFIERS_CACHE_IN_FILE = getattr(
settings, 'ORA2_CLASSIFIERS_CACHE_IN_FILE',
get_cache(
'django.core.cache.backends.filebased.FileBasedCache',
LOCATION='/tmp/ora2_classifier_cache'
)
)
class IncompleteClassifierSet(Exception): class IncompleteClassifierSet(Exception):
""" """
...@@ -263,41 +271,99 @@ class AIClassifierSet(models.Model): ...@@ -263,41 +271,99 @@ class AIClassifierSet(models.Model):
# If we get to this point, no classifiers exist with this rubric and algorithm. # If we get to this point, no classifiers exist with this rubric and algorithm.
return None return None
# Number of seconds to store downloaded classifiers in the in-memory cache.
DEFAULT_CLASSIFIER_CACHE_TIMEOUT = 300
@property @property
def classifiers_dict(self): def classifier_data_by_criterion(self):
""" """
Return all classifiers in this classifier set in a dictionary Return info for all classifiers in this classifier set in a dictionary
that maps criteria names to classifier data. that maps criteria names to classifier data.
Returns: Returns:
dict: keys are criteria names, values are JSON-serializable classifier data dict: keys are criteria names, values are JSON-serializable classifier data
If there are no classifiers in the set, returns None If there are no classifiers in the set, returns None
Raises:
ValueError
IOError
httplib.HTTPException
""" """
# First check the in-memory cache # First check the in-memory cache
# We use an in-memory cache because the classifier data will most often # We use an in-memory cache because the classifier data will most often
# be several megabytes, which exceeds the default memcached size limit. # be several megabytes, which exceeds the default memcached size limit.
# If we find it, we can avoid calls to the database, S3, and json. # If we find it, we can avoid calls to the database, S3, and json.
cache_key = unicode(self.id) cache_key = self._cache_key("classifier_data_by_criterion")
classifiers_dict = CLASSIFIERS_CACHE.get(cache_key) classifiers_dict = CLASSIFIERS_CACHE_IN_MEM.get(cache_key)
# If we can't find the classifier in-memory, check the filesystem cache
# We can't always rely on the in-memory cache because worker processes
# terminate when max retries are exceeded.
if classifiers_dict is None:
msg = (
u"Could not find classifiers dict in the in-memory "
u"cache for key {key}. Falling back to the file-based cache."
).format(key=cache_key)
logger.info(msg)
classifiers_dict = CLASSIFIERS_CACHE_IN_FILE.get(cache_key)
else:
msg = (
u"Found classifiers dict in the in-memory cache "
u"(cache key was {key})"
).format(key=cache_key)
logger.info(msg)
# If we can't find the classifiers dict in the cache, # If we can't find the classifiers dict in the cache,
# we need to look up the classifiers in the database, # we need to look up the classifiers in the database,
# then download the classifier data. # then download the classifier data.
if classifiers_dict is None: if classifiers_dict is None:
classifiers = list(self.classifiers.all()) # pylint: disable=E1101
classifiers_dict = { classifiers_dict = {
classifier.criterion.name: classifier.download_classifier_data() classifier.criterion.name: classifier.download_classifier_data()
for classifier in classifiers for classifier in self.classifiers.select_related().all() # pylint: disable=E1101
} }
timeout = getattr(settings, 'ORA2_CLASSIFIER_CACHE_TIMEOUT', self.DEFAULT_CLASSIFIER_CACHE_TIMEOUT) CLASSIFIERS_CACHE_IN_MEM.set(cache_key, classifiers_dict)
CLASSIFIERS_CACHE.set(cache_key, classifiers_dict, timeout) CLASSIFIERS_CACHE_IN_FILE.set(cache_key, classifiers_dict)
msg = (
u"Could not find classifiers dict in either the in-memory "
u"or file-based cache. Downloaded the data from S3 and cached "
u"it using key {key}"
).format(key=cache_key)
logger.info(msg)
return classifiers_dict if classifiers_dict else None return classifiers_dict if classifiers_dict else None
@property
def valid_scores_by_criterion(self):
"""
Return the valid scores for each classifier in this classifier set.
Returns:
dict: maps rubric criterion names to lists of valid scores.
"""
cache_key = self._cache_key("valid_scores_by_criterion")
valid_scores_by_criterion = cache.get(cache_key)
if valid_scores_by_criterion is None:
valid_scores_by_criterion = {
classifier.criterion.name: classifier.valid_scores
for classifier in self.classifiers.select_related().all() # pylint: disable=E1101
}
cache.set(cache_key, valid_scores_by_criterion)
return valid_scores_by_criterion
def _cache_key(self, data_name):
"""
Return a cache key for this classifier set.
Args:
data_name (unicode): Name for the data associated with this key.
Returns:
unicode
"""
return u"openassessment.assessment.ai.classifier_set.{pk}.{data_name}".format(
pk=self.pk, data_name=data_name
)
# Directory in which classifiers will be stored # Directory in which classifiers will be stored
# For instance, if we're using the default file system storage backend # For instance, if we're using the default file system storage backend
...@@ -364,6 +430,7 @@ class AIClassifier(models.Model): ...@@ -364,6 +430,7 @@ class AIClassifier(models.Model):
Raises: Raises:
ValueError ValueError
IOError IOError
httplib.HTTPException
""" """
return json.loads(self.classifier_data.read()) # pylint:disable=E1101 return json.loads(self.classifier_data.read()) # pylint:disable=E1101
...@@ -378,12 +445,7 @@ class AIClassifier(models.Model): ...@@ -378,12 +445,7 @@ class AIClassifier(models.Model):
list of integer scores, in ascending order. list of integer scores, in ascending order.
""" """
cache_key = u"openassessment.assessment.ai.classifier.{pk}.valid_scores".format(pk=self.pk) return sorted([option.points for option in self.criterion.options.all()])
valid_scores = cache.get(cache_key)
if valid_scores is None:
valid_scores = sorted([option.points for option in self.criterion.options.all()])
cache.set(cache_key, valid_scores)
return valid_scores
class AIWorkflow(models.Model): class AIWorkflow(models.Model):
...@@ -481,6 +543,25 @@ class AIWorkflow(models.Model): ...@@ -481,6 +543,25 @@ class AIWorkflow(models.Model):
workflow = cls.objects.get(uuid=workflow_uuid) workflow = cls.objects.get(uuid=workflow_uuid)
yield workflow yield workflow
@classmethod
def is_workflow_complete(cls, workflow_uuid):
"""
Check whether the workflow with a given UUID has been marked complete.
Args:
workflow_uuid (str): The UUID of the workflow to check.
Returns:
bool
Raises:
DatabaseError
cls.DoesNotExist
"""
workflow = cls.objects.get(uuid=workflow_uuid)
return workflow.is_complete
def _log_start_workflow(self): def _log_start_workflow(self):
""" """
A logging operation called at the beginning of an AI Workflows life. A logging operation called at the beginning of an AI Workflows life.
......
...@@ -500,6 +500,7 @@ class AssessmentPart(models.Model): ...@@ -500,6 +500,7 @@ class AssessmentPart(models.Model):
MAX_FEEDBACK_SIZE = 1024 * 100 MAX_FEEDBACK_SIZE = 1024 * 100
assessment = models.ForeignKey(Assessment, related_name='parts') assessment = models.ForeignKey(Assessment, related_name='parts')
criterion = models.ForeignKey(Criterion, null=True, related_name="+")
option = models.ForeignKey(CriterionOption, related_name="+") option = models.ForeignKey(CriterionOption, related_name="+")
# Free-form text feedback for the specific criterion # Free-form text feedback for the specific criterion
...@@ -537,9 +538,11 @@ class AssessmentPart(models.Model): ...@@ -537,9 +538,11 @@ class AssessmentPart(models.Model):
None None
""" """
options = CriterionOption.objects.select_related().filter(pk__in=option_ids)
cls.objects.bulk_create([ cls.objects.bulk_create([
cls(assessment=assessment, option_id=option_id) cls(assessment=assessment, option_id=option.pk, criterion_id=option.criterion.pk)
for option_id in option_ids for option in options
]) ])
if criterion_feedback is not None: if criterion_feedback is not None:
......
...@@ -107,7 +107,7 @@ class AITrainingTest(CacheResetTest): ...@@ -107,7 +107,7 @@ class AITrainingTest(CacheResetTest):
self.assertIsNot(classifier_set, None) self.assertIsNot(classifier_set, None)
# Retrieve a dictionary mapping criteria names to deserialized classifiers # Retrieve a dictionary mapping criteria names to deserialized classifiers
classifiers = classifier_set.classifiers_dict classifiers = classifier_set.classifier_data_by_criterion
# Check that we have classifiers for all criteria in the rubric # Check that we have classifiers for all criteria in the rubric
criteria = set(criterion['name'] for criterion in RUBRIC['criteria']) criteria = set(criterion['name'] for criterion in RUBRIC['criteria'])
......
...@@ -6,7 +6,8 @@ import copy ...@@ -6,7 +6,8 @@ import copy
from django.test.utils import override_settings from django.test.utils import override_settings
from openassessment.test_utils import CacheResetTest from openassessment.test_utils import CacheResetTest
from openassessment.assessment.models import ( from openassessment.assessment.models import (
AIClassifierSet, AIClassifier, AIGradingWorkflow, AI_CLASSIFIER_STORAGE AIClassifierSet, AIClassifier, AIGradingWorkflow, AI_CLASSIFIER_STORAGE,
CLASSIFIERS_CACHE_IN_MEM
) )
from openassessment.assessment.serializers import rubric_from_dict from openassessment.assessment.serializers import rubric_from_dict
from .constants import RUBRIC from .constants import RUBRIC
...@@ -58,6 +59,7 @@ class AIClassifierSetTest(CacheResetTest): ...@@ -58,6 +59,7 @@ class AIClassifierSetTest(CacheResetTest):
Tests for the AIClassifierSet model. Tests for the AIClassifierSet model.
""" """
def setUp(self): def setUp(self):
super(AIClassifierSetTest, self).setUp()
rubric = rubric_from_dict(RUBRIC) rubric = rubric_from_dict(RUBRIC)
self.classifier_set = AIClassifierSet.create_classifier_set( self.classifier_set = AIClassifierSet.create_classifier_set(
CLASSIFIERS_DICT, rubric, "test_algorithm", COURSE_ID, ITEM_ID CLASSIFIERS_DICT, rubric, "test_algorithm", COURSE_ID, ITEM_ID
...@@ -67,15 +69,33 @@ class AIClassifierSetTest(CacheResetTest): ...@@ -67,15 +69,33 @@ class AIClassifierSetTest(CacheResetTest):
# Retrieve the classifier dict twice, which should hit the caching code. # Retrieve the classifier dict twice, which should hit the caching code.
# We can check that we're using the cache by asserting that # We can check that we're using the cache by asserting that
# the number of database queries decreases. # the number of database queries decreases.
with self.assertNumQueries(3): with self.assertNumQueries(1):
first = self.classifier_set.classifiers_dict first = self.classifier_set.classifier_data_by_criterion
with self.assertNumQueries(0): with self.assertNumQueries(0):
second = self.classifier_set.classifiers_dict second = self.classifier_set.classifier_data_by_criterion
# Verify that we got the same value both times # Verify that we got the same value both times
self.assertEqual(first, second) self.assertEqual(first, second)
def test_file_cache_downloads(self):
# Retrieve the classifiers dict, which should be cached
# both in memory and on the file system
first = self.classifier_set.classifier_data_by_criterion
# Clear the in-memory cache
# This simulates what happens when a worker process dies
# after exceeding the maximum number of retries.
CLASSIFIERS_CACHE_IN_MEM.clear()
# We should still be able to retrieve the classifiers dict
# from the on-disk cache, even if memory has been cleared
with self.assertNumQueries(0):
second = self.classifier_set.classifier_data_by_criterion
# Verify that we got the correct classifiers dict back
self.assertEqual(first, second)
class AIGradingWorkflowTest(CacheResetTest): class AIGradingWorkflowTest(CacheResetTest):
""" """
......
...@@ -117,7 +117,7 @@ class AIWorkerTrainingTest(CacheResetTest): ...@@ -117,7 +117,7 @@ class AIWorkerTrainingTest(CacheResetTest):
# Expect that the classifier set was created with the correct data # Expect that the classifier set was created with the correct data
self.assertIsNot(workflow.classifier_set, None) self.assertIsNot(workflow.classifier_set, None)
saved_classifiers = workflow.classifier_set.classifiers_dict saved_classifiers = workflow.classifier_set.classifier_data_by_criterion
self.assertItemsEqual(CLASSIFIERS, saved_classifiers) self.assertItemsEqual(CLASSIFIERS, saved_classifiers)
def test_create_classifiers_no_workflow(self): def test_create_classifiers_no_workflow(self):
...@@ -177,7 +177,7 @@ class AIWorkerTrainingTest(CacheResetTest): ...@@ -177,7 +177,7 @@ class AIWorkerTrainingTest(CacheResetTest):
# Expect that the classifier set was created with the correct data # Expect that the classifier set was created with the correct data
self.assertIsNot(workflow.classifier_set, None) self.assertIsNot(workflow.classifier_set, None)
saved_classifiers = workflow.classifier_set.classifiers_dict saved_classifiers = workflow.classifier_set.classifier_data_by_criterion
self.assertItemsEqual(CLASSIFIERS, saved_classifiers) self.assertItemsEqual(CLASSIFIERS, saved_classifiers)
def test_create_classifiers_no_training_examples(self): def test_create_classifiers_no_training_examples(self):
...@@ -188,6 +188,22 @@ class AIWorkerTrainingTest(CacheResetTest): ...@@ -188,6 +188,22 @@ class AIWorkerTrainingTest(CacheResetTest):
with self.assertRaises(AITrainingInternalError): with self.assertRaises(AITrainingInternalError):
ai_worker_api.create_classifiers(workflow.uuid, CLASSIFIERS) ai_worker_api.create_classifiers(workflow.uuid, CLASSIFIERS)
def test_is_workflow_complete(self):
self.assertFalse(ai_worker_api.is_training_workflow_complete(self.workflow_uuid))
workflow = AITrainingWorkflow.objects.get(uuid=self.workflow_uuid)
workflow.mark_complete_and_save()
self.assertTrue(ai_worker_api.is_training_workflow_complete(self.workflow_uuid))
def test_is_workflow_complete_no_such_workflow(self):
with self.assertRaises(AITrainingRequestError):
ai_worker_api.is_training_workflow_complete('no such workflow')
@mock.patch.object(AITrainingWorkflow.objects, 'get')
def test_is_workflow_complete_database_error(self, mock_call):
mock_call.side_effect = DatabaseError("Oh no!")
with self.assertRaises(AITrainingInternalError):
ai_worker_api.is_training_workflow_complete(self.workflow_uuid)
class AIWorkerGradingTest(CacheResetTest): class AIWorkerGradingTest(CacheResetTest):
""" """
...@@ -234,12 +250,12 @@ class AIWorkerGradingTest(CacheResetTest): ...@@ -234,12 +250,12 @@ class AIWorkerGradingTest(CacheResetTest):
self.assertItemsEqual(params, expected_params) self.assertItemsEqual(params, expected_params)
def test_get_grading_task_params_num_queries(self): def test_get_grading_task_params_num_queries(self):
with self.assertNumQueries(5): with self.assertNumQueries(6):
ai_worker_api.get_grading_task_params(self.workflow_uuid) ai_worker_api.get_grading_task_params(self.workflow_uuid)
# The second time through we should be caching the queries # The second time through we should be caching the queries
# to determine the valid scores for a classifier # to determine the valid scores for a classifier
with self.assertNumQueries(3): with self.assertNumQueries(2):
ai_worker_api.get_grading_task_params(self.workflow_uuid) ai_worker_api.get_grading_task_params(self.workflow_uuid)
def test_get_grading_task_params_no_workflow(self): def test_get_grading_task_params_no_workflow(self):
...@@ -301,3 +317,19 @@ class AIWorkerGradingTest(CacheResetTest): ...@@ -301,3 +317,19 @@ class AIWorkerGradingTest(CacheResetTest):
mock_call.side_effect = DatabaseError("KABOOM!") mock_call.side_effect = DatabaseError("KABOOM!")
with self.assertRaises(AIGradingInternalError): with self.assertRaises(AIGradingInternalError):
ai_worker_api.create_assessment(self.workflow_uuid, self.SCORES) ai_worker_api.create_assessment(self.workflow_uuid, self.SCORES)
def test_is_workflow_complete(self):
self.assertFalse(ai_worker_api.is_grading_workflow_complete(self.workflow_uuid))
workflow = AIGradingWorkflow.objects.get(uuid=self.workflow_uuid)
workflow.mark_complete_and_save()
self.assertTrue(ai_worker_api.is_grading_workflow_complete(self.workflow_uuid))
def test_is_workflow_complete_no_such_workflow(self):
with self.assertRaises(AIGradingRequestError):
ai_worker_api.is_grading_workflow_complete('no such workflow')
@mock.patch.object(AIGradingWorkflow.objects, 'get')
def test_is_workflow_complete_database_error(self, mock_call):
mock_call.side_effect = DatabaseError("Oh no!")
with self.assertRaises(AIGradingInternalError):
ai_worker_api.is_grading_workflow_complete(self.workflow_uuid)
...@@ -150,7 +150,7 @@ class TestPeerApi(CacheResetTest): ...@@ -150,7 +150,7 @@ class TestPeerApi(CacheResetTest):
Tests for the peer assessment API functions. Tests for the peer assessment API functions.
""" """
CREATE_ASSESSMENT_NUM_QUERIES = 60 CREATE_ASSESSMENT_NUM_QUERIES = 61
def test_create_assessment_points(self): def test_create_assessment_points(self):
self._create_student_and_submission("Tim", "Tim's answer") self._create_student_and_submission("Tim", "Tim's answer")
......
...@@ -18,7 +18,9 @@ from openassessment.assessment.worker.algorithm import ( ...@@ -18,7 +18,9 @@ from openassessment.assessment.worker.algorithm import (
from openassessment.assessment.serializers import ( from openassessment.assessment.serializers import (
deserialize_training_examples, rubric_from_dict deserialize_training_examples, rubric_from_dict
) )
from openassessment.assessment.errors import AITrainingRequestError, AIGradingInternalError from openassessment.assessment.errors import (
AITrainingRequestError, AIGradingInternalError, AIGradingRequestError
)
from openassessment.assessment.test.constants import ( from openassessment.assessment.test.constants import (
EXAMPLES, RUBRIC, STUDENT_ITEM, ANSWER EXAMPLES, RUBRIC, STUDENT_ITEM, ANSWER
) )
...@@ -135,6 +137,26 @@ class AITrainingTaskTest(CeleryTaskTest): ...@@ -135,6 +137,26 @@ class AITrainingTaskTest(CeleryTaskTest):
train_classifiers(self.workflow_uuid) train_classifiers(self.workflow_uuid)
@override_settings(ORA2_AI_ALGORITHMS=AI_ALGORITHMS) @override_settings(ORA2_AI_ALGORITHMS=AI_ALGORITHMS)
def test_skip_completed_workflow(self):
# Mark the grading workflow as complete
workflow = AITrainingWorkflow.objects.get(uuid=self.workflow_uuid)
workflow.mark_complete_and_save()
# The training task should short-circuit immediately, skipping calls
# to get parameters for the task.
actual_call = ai_worker_api.get_training_task_params
patched = 'openassessment.assessment.worker.grading.ai_worker_api.get_training_task_params'
with mock.patch(patched) as mock_call:
mock_call.side_effect = actual_call
train_classifiers(self.workflow_uuid)
self.assertFalse(mock_call.called)
@override_settings(ORA2_AI_ALGORITHMS=AI_ALGORITHMS)
def test_check_complete_error(self):
with self.assert_retry(train_classifiers, AITrainingRequestError):
train_classifiers("no such workflow uuid")
@override_settings(ORA2_AI_ALGORITHMS=AI_ALGORITHMS)
def test_unable_to_load_algorithm_class(self): def test_unable_to_load_algorithm_class(self):
# The algorithm is defined in the settings, but the class does not exist. # The algorithm is defined in the settings, but the class does not exist.
self._set_algorithm_id(UNDEFINED_CLASS_ALGORITHM_ID) self._set_algorithm_id(UNDEFINED_CLASS_ALGORITHM_ID)
...@@ -266,6 +288,26 @@ class AIGradingTaskTest(CeleryTaskTest): ...@@ -266,6 +288,26 @@ class AIGradingTaskTest(CeleryTaskTest):
workflow.classifier_set = classifier_set workflow.classifier_set = classifier_set
workflow.save() workflow.save()
@override_settings(ORA2_AI_ALGORITHMS=AI_ALGORITHMS)
def test_skip_completed_workflow(self):
# Mark the grading workflow as complete
workflow = AIGradingWorkflow.objects.get(uuid=self.workflow_uuid)
workflow.mark_complete_and_save()
# The grading task should short-circuit immediately, skipping calls
# to get parameters for the task.
actual_call = ai_worker_api.get_grading_task_params
patched = 'openassessment.assessment.worker.grading.ai_worker_api.get_grading_task_params'
with mock.patch(patched) as mock_call:
mock_call.side_effect = actual_call
grade_essay(self.workflow_uuid)
self.assertFalse(mock_call.called)
@override_settings(ORA2_AI_ALGORITHMS=AI_ALGORITHMS)
def test_check_complete_error(self):
with self.assert_retry(grade_essay, AIGradingRequestError):
grade_essay("no such workflow uuid")
@mock.patch('openassessment.assessment.api.ai_worker.create_assessment') @mock.patch('openassessment.assessment.api.ai_worker.create_assessment')
@override_settings(ORA2_AI_ALGORITHMS=AI_ALGORITHMS) @override_settings(ORA2_AI_ALGORITHMS=AI_ALGORITHMS)
def test_algorithm_gives_invalid_score(self, mock_create_assessment): def test_algorithm_gives_invalid_score(self, mock_create_assessment):
......
...@@ -48,6 +48,21 @@ def grade_essay(workflow_uuid): ...@@ -48,6 +48,21 @@ def grade_essay(workflow_uuid):
AIAlgorithmError: An error occurred while retrieving or using an AI algorithm. AIAlgorithmError: An error occurred while retrieving or using an AI algorithm.
""" """
# Short-circuit if the workflow is already marked complete
# This is an optimization, but grading tasks could still
# execute multiple times depending on when they get picked
# up by workers and marked complete.
try:
if ai_worker_api.is_grading_workflow_complete(workflow_uuid):
return
except AIError:
msg = (
u"An unexpected error occurred while checking the "
u"completion of grading workflow with UUID {uuid}"
).format(uuid=workflow_uuid)
logger.exception(msg)
raise grade_essay.retry()
# Retrieve the task parameters # Retrieve the task parameters
try: try:
params = ai_worker_api.get_grading_task_params(workflow_uuid) params = ai_worker_api.get_grading_task_params(workflow_uuid)
......
...@@ -65,6 +65,21 @@ def train_classifiers(workflow_uuid): ...@@ -65,6 +65,21 @@ def train_classifiers(workflow_uuid):
InvalidExample: The training examples provided by the AI API were not valid. InvalidExample: The training examples provided by the AI API were not valid.
""" """
# Short-circuit if the workflow is already marked complete
# This is an optimization, but training tasks could still
# execute multiple times depending on when they get picked
# up by workers and marked complete.
try:
if ai_worker_api.is_training_workflow_complete(workflow_uuid):
return
except AIError:
msg = (
u"An unexpected error occurred while checking the "
u"completion of training workflow with UUID {uuid}"
).format(uuid=workflow_uuid)
logger.exception(msg)
raise train_classifiers.retry()
# Retrieve task parameters # Retrieve task parameters
try: try:
params = ai_worker_api.get_training_task_params(workflow_uuid) params = ai_worker_api.get_training_task_params(workflow_uuid)
......
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:21-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Amharic (http://www.transifex.com/projects/p/edx-platform/"
"language/am/)\n"
"Language: am\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
# Nabeel El-Dughailib <nabeel@qordoba.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:21-0400\n"
"PO-Revision-Date: 2014-06-23 07:51+0000\n"
"Last-Translator: Nabeel El-Dughailib <nabeel@qordoba.com>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/edx-platform/"
"language/ar/)\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr "لا يمكن إجراء عملية التحميل"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
"لقد تمّ نشر هذه المسألة بالفعل. ستتطبّق أية تغييرات على التقييمات المستقبلية "
"فقط.."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr "حالة الرد الخاص بك."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
"إذا غادرت هذه الصفحة دون حفظ أو تقديم الرد الخاص بك، فسوف تفقد أي عملٍ قمت به "
"في ما يتعلّق بالرد."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr "لم يتمّ حفظ هذا الردّ."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr "جاري الحفظ..."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr "تمّ حفظ هذا الردّ لكن لم يتم تقديمه."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr "خطأ"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr "لا يمكن تحميل هذا القسم."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr "لا يمكن تقديم هذا الرد."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr "لا يمكن حفظ هذا الردّ."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr "لا يمكن تقديم هذه الآراء والملاحظات."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr "لا يمكن تقديم هذا التقييم."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr "لا يمكن تحميل هذه المسألة."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr "لا يمكن حفظ هذه المسألة."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr "لا يمكن الاتصال بالمخدّم."
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:22-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Azerbaijani (http://www.transifex.com/projects/p/edx-platform/"
"language/az/)\n"
"Language: az\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:22-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/edx-"
"platform/language/bg_BG/)\n"
"Language: bg_BG\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:23-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/edx-"
"platform/language/bn_BD/)\n"
"Language: bn_BD\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:23-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Bengali (India) (http://www.transifex.com/projects/p/edx-"
"platform/language/bn_IN/)\n"
"Language: bn_IN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:24-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Bosnian (http://www.transifex.com/projects/p/edx-platform/"
"language/bs/)\n"
"Language: bs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:24-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/edx-platform/"
"language/ca/)\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:25-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Catalan (Valencian) (http://www.transifex.com/projects/p/edx-"
"platform/language/ca@valencia/)\n"
"Language: ca@valencia\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:25-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Czech (http://www.transifex.com/projects/p/edx-platform/"
"language/cs/)\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:26-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Welsh (http://www.transifex.com/projects/p/edx-platform/"
"language/cy/)\n"
"Language: cy\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != "
"11) ? 2 : 3;\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:26-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Danish (http://www.transifex.com/projects/p/edx-platform/"
"language/da/)\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:27-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: German (Germany) (http://www.transifex.com/projects/p/edx-"
"platform/language/de_DE/)\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
# STERGIOU IOANNIS <stergiou_john@yahoo.gr>, 2014
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:27-0400\n"
"PO-Revision-Date: 2014-06-24 10:07+0000\n"
"Last-Translator: STERGIOU IOANNIS <stergiou_john@yahoo.gr>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/edx-platform/"
"language/el/)\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
...@@ -7,7 +7,7 @@ msgid "" ...@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.1a\n" "Project-Id-Version: 0.1a\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-09 11:02-0400\n" "POT-Creation-Date: 2014-06-24 09:28-0400\n"
"PO-Revision-Date: 2014-06-04 15:41-0400\n" "PO-Revision-Date: 2014-06-04 15:41-0400\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: openedx-translation <openedx-translation@googlegroups.com>\n" "Language-Team: openedx-translation <openedx-translation@googlegroups.com>\n"
......
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:28-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: LOLCAT English (http://www.transifex.com/projects/p/edx-"
"platform/language/en@lolcat/)\n"
"Language: en@lolcat\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:29-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Pirate English (http://www.transifex.com/projects/p/edx-"
"platform/language/en@pirate/)\n"
"Language: en@pirate\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
# EdX Team <info@edx.org>, 2014
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:29-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: Will Daly <will@edx.org>\n"
"Language-Team: English (United States) (http://www.transifex.com/projects/p/"
"edx-platform/language/en_US/)\n"
"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
...@@ -7,7 +7,7 @@ msgid "" ...@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.1a\n" "Project-Id-Version: 0.1a\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-09 11:02-0400\n" "POT-Creation-Date: 2014-06-24 09:28-0400\n"
"PO-Revision-Date: 2014-06-04 15:41-0400\n" "PO-Revision-Date: 2014-06-04 15:41-0400\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: openedx-translation <openedx-translation@googlegroups.com>\n" "Language-Team: openedx-translation <openedx-translation@googlegroups.com>\n"
......
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
# Juan Camilo Montoya Franco <juan.montoya@hmltda.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:30-0400\n"
"PO-Revision-Date: 2014-06-12 17:54+0000\n"
"Last-Translator: Cristian Salamea <ovnicraft@gmail.com>\n"
"Language-Team: Spanish (Latin America) (http://www.transifex.com/projects/p/"
"edx-platform/language/es_419/)\n"
"Language: es_419\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr "No se ha podido cargar"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
"Este problema ya ha sido liberado. Cualquier cambio en el mismo se aplicará "
"solo a los envío futuros."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr "Estado de su respuesta"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
"Si abandona esta página sin guardar o enviar su respuesta, perderá todo el "
"trabajo realizado en su respuesta."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr "Esta respuesta no ha sido guardada."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr "Guardando..."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr "La respuesta ha sido guardada, pero no enviada."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr "Error"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr "Esta sección no pudo ser cargada."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr "Esta respuesta no pudo ser enviada."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr "Esta respuesta no pudo ser guardada."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr "Este comentario no pudo ser enviado."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr "Esta revisión no pudo ser enviada."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr "Este problema no pudo ser cargado"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr "Este problema no pudo ser guardado."
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr "No se ha podido contactar con el servidor."
# edX translation file.
# Copyright (C) 2014 EdX
# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: edx-platform\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-24 09:31-0400\n"
"PO-Revision-Date: 2014-06-11 13:04+0000\n"
"Last-Translator: \n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/edx-"
"platform/language/es_AR/)\n"
"Language: es_AR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_base.js:151
msgid "Unable to Load"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_edit.js:81
msgid ""
"This problem has already been released. Any changes will apply only to "
"future assessments."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:174
msgid "Status of Your Response"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:200
msgid ""
"If you leave this page without saving or submitting your response, you'll "
"lose any work you've done on the response."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:274
msgid "This response has not been saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:292
msgid "Saving..."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:310
msgid "This response has been saved but not submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_response.js:313
msgid "Error"
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:59
#: openassessment/xblock/static/js/src/oa_server.js:90
#: openassessment/xblock/static/js/src/oa_server.js:109
msgid "This section could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:144
msgid "This response could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:170
msgid "This response could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:207
msgid "This feedback could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:253
#: openassessment/xblock/static/js/src/oa_server.js:293
#: openassessment/xblock/static/js/src/oa_server.js:334
#: openassessment/xblock/static/js/src/oa_server.js:368
msgid "This assessment could not be submitted."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:392
msgid "One or more rescheduling tasks failed."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:420
msgid "This problem could not be loaded."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:449
msgid "This problem could not be saved."
msgstr ""
#: openassessment/xblock/static/js/openassessment.min.js:1
#: openassessment/xblock/static/js/src/oa_server.js:479
msgid "The server could not be contacted."
msgstr ""
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment