From ba0fbf0762a740f25be5c3f3f22f2b5cdace9d8f Mon Sep 17 00:00:00 2001 From: Sarina Canelake Date: Fri, 7 Feb 2014 19:00:35 -0500 Subject: [PATCH] i18n points possible display LMS-2201 --- .../js/fixtures/crowdsource_hinter.html | 4 +-- .../xmodule/js/spec/capa/display_spec.coffee | 2 +- .../xmodule/js/src/capa/display.coffee | 24 ++++++++++++------ conf/locale/eo/LC_MESSAGES/django.mo | Bin 355704 -> 355704 bytes conf/locale/eo/LC_MESSAGES/django.po | 2 +- conf/locale/eo/LC_MESSAGES/djangojs.mo | Bin 39002 -> 39360 bytes conf/locale/eo/LC_MESSAGES/djangojs.po | 22 ++++++++++++++-- .../courseware/features/problems.feature | 16 ++++++------ 8 files changed, 48 insertions(+), 22 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/fixtures/crowdsource_hinter.html b/common/lib/xmodule/xmodule/js/fixtures/crowdsource_hinter.html index e390685fc7..d7edb42a79 100644 --- a/common/lib/xmodule/xmodule/js/fixtures/crowdsource_hinter.html +++ b/common/lib/xmodule/xmodule/js/fixtures/crowdsource_hinter.html @@ -12,7 +12,7 @@ Numerical Input -
(1/1 points)
+
(1/1 point)

The answer is 2*x^2*y + 5 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/common/lib/xmodule/xmodule/js/spec/capa/display_spec.coffee b/common/lib/xmodule/xmodule/js/spec/capa/display_spec.coffee index 9d58fcacf6..ddb5f1b0f6 100644 --- a/common/lib/xmodule/xmodule/js/spec/capa/display_spec.coffee +++ b/common/lib/xmodule/xmodule/js/spec/capa/display_spec.coffee @@ -93,7 +93,7 @@ describe 'Problem', -> @problem.el.data('progress_status', 'foo') @problem.el.data('progress_detail', '1/1') @problem.renderProgressState() - expect(@problem.$('.problem-progress').html()).toEqual "(1/1 points)" + expect(@problem.$('.problem-progress').html()).toEqual "(1/1 point)" describe 'render', -> beforeEach -> diff --git a/common/lib/xmodule/xmodule/js/src/capa/display.coffee b/common/lib/xmodule/xmodule/js/src/capa/display.coffee index db85b5af7f..4a193cc418 100644 --- a/common/lib/xmodule/xmodule/js/src/capa/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/capa/display.coffee @@ -39,17 +39,25 @@ class @Problem renderProgressState: => detail = @el.data('progress_detail') status = @el.data('progress_status') - # i18n - progress = "(#{detail} points)" + + # Render 'x/y point(s)' if student has attempted question + if status != 'none' and detail? and detail.indexOf('/') > 0 + a = detail.split('/') + earned = parseFloat(a[0]) + possible = parseFloat(a[1]) + # This comment needs to be on one line to be properly scraped for the translators. Sry for length. + `// Translators: %(earned)s is the number of points earned. %(total)s is the total number of points (examples: 0/1, 1/1, 2/3, 5/10). The total number of points will always be at least 1. We pluralize based on the total number of points (example: 0/1 point; 1/2 points)` + progress_template = ngettext('(%(earned)s/%(possible)s point)', '(%(earned)s/%(possible)s points)', possible) + progress = interpolate(progress_template, {'earned': earned, 'possible': possible}, true) + + # Render 'x point(s) possible' if student has not yet attempted question if status == 'none' and detail? and detail.indexOf('/') > 0 a = detail.split('/') possible = parseFloat(a[1]) - if possible == 1 - # i18n - progress = "(#{possible} point possible)" - else - # i18n - progress = "(#{possible} points possible)" + `// Translators: %(num_points)s is the number of points possible (examples: 1, 3, 10). There will always be at least 1 point possible.` + progress_template = ngettext("(%(num_points)s point possible)", "(%(num_points)s points possible)", possible) + progress = interpolate(progress_template, {'num_points': possible}, true) + @$('.problem-progress').html(progress) updateProgress: (response) => diff --git a/conf/locale/eo/LC_MESSAGES/django.mo b/conf/locale/eo/LC_MESSAGES/django.mo index a5299c9d92497d1560d4add3071cbee9df516e66..ada1ef24bd86a999d3a077cac1dcc5e37a3bfe7b 100644 GIT binary patch delta 36 ocmexyOZ3Mr(S{brElg?QEEZNq2JKnlOhC*G#4Ovh!ddym01*xhp#T5? delta 36 ocmexyOZ3Mr(S{brElg?QET&e*hV5D5OhC*G#4Ovh!ddym01)#Gpa1{> diff --git a/conf/locale/eo/LC_MESSAGES/django.po b/conf/locale/eo/LC_MESSAGES/django.po index da80cab8e6..a5597cd979 100644 --- a/conf/locale/eo/LC_MESSAGES/django.po +++ b/conf/locale/eo/LC_MESSAGES/django.po @@ -37,7 +37,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2014-02-11 15:31-0500\n" +"POT-Creation-Date: 2014-02-11 18:20-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/conf/locale/eo/LC_MESSAGES/djangojs.mo b/conf/locale/eo/LC_MESSAGES/djangojs.mo index f26ad64c99904c186b53ab6d088a88be3a94cd16..97dacab201a06eb809a94e8528bf5b73079e5b57 100644 GIT binary patch delta 6525 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 diff --git a/conf/locale/eo/LC_MESSAGES/djangojs.po b/conf/locale/eo/LC_MESSAGES/djangojs.po index 1d4d399502..9c3d87d1c9 100644 --- a/conf/locale/eo/LC_MESSAGES/djangojs.po +++ b/conf/locale/eo/LC_MESSAGES/djangojs.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: 0.1a\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2014-02-11 15:30-0500\n" -"PO-Revision-Date: 2014-02-11 20:31:26.169682\n" +"POT-Creation-Date: 2014-02-11 18:19-0500\n" +"PO-Revision-Date: 2014-02-11 23:20:19.199916\n" "Last-Translator: \n" "Language-Team: openedx-translation \n" "MIME-Version: 1.0\n" @@ -60,6 +60,24 @@ msgstr "Çömméntärý Ⱡ#" msgid "Reply to Annotation" msgstr "Réplý tö Ànnötätïön Ⱡ'σя#" +#. Translators: %(earned)s is the number of points earned. %(total)s is the +#. total number of points (examples: 0/1, 1/1, 2/3, 5/10). The total number of +#. points will always be at least 1. We pluralize based on the total number of +#. points (example: 0/1 point; 1/2 points); +#: common/lib/xmodule/xmodule/js/src/capa/display.js +msgid "(%(earned)s/%(possible)s point)" +msgid_plural "(%(earned)s/%(possible)s points)" +msgstr[0] "(%(earned)s/%(possible)s pöïnt) Ⱡ'#" +msgstr[1] "(%(earned)s/%(possible)s pöïnts) Ⱡ'σ#" + +#. Translators: %(num_points)s is the number of points possible (examples: 1, +#. 3, 10). There will always be at least 1 point possible.; +#: common/lib/xmodule/xmodule/js/src/capa/display.js +msgid "(%(num_points)s point possible)" +msgid_plural "(%(num_points)s points possible)" +msgstr[0] "(%(num_points)s pöïnt pössïßlé) Ⱡ'σя#" +msgstr[1] "(%(num_points)s pöïnts pössïßlé) Ⱡ'σя#" + #. Translators: the word Answer here refers to the answer to a problem the #. student must solve.; #: common/lib/xmodule/xmodule/js/src/capa/display.js diff --git a/lms/djangoapps/courseware/features/problems.feature b/lms/djangoapps/courseware/features/problems.feature index 8e2d937b71..960cfc4a0a 100644 --- a/lms/djangoapps/courseware/features/problems.feature +++ b/lms/djangoapps/courseware/features/problems.feature @@ -146,23 +146,23 @@ Feature: LMS.Answer problems Examples: | ProblemType | Correctness | Score | Points Possible | - | drop down | correct | 1/1 points | 1 point possible | + | drop down | correct | 1/1 point | 1 point possible | | drop down | incorrect | 1 point possible | 1 point possible | - | multiple choice | correct | 1/1 points | 1 point possible | + | multiple choice | correct | 1/1 point | 1 point possible | | multiple choice | incorrect | 1 point possible | 1 point possible | - | checkbox | correct | 1/1 points | 1 point possible | + | checkbox | correct | 1/1 point | 1 point possible | | checkbox | incorrect | 1 point possible | 1 point possible | - | radio | correct | 1/1 points | 1 point possible | + | radio | correct | 1/1 point | 1 point possible | | radio | incorrect | 1 point possible | 1 point possible | - | string | correct | 1/1 points | 1 point possible | + | string | correct | 1/1 point | 1 point possible | | string | incorrect | 1 point possible | 1 point possible | - | numerical | correct | 1/1 points | 1 point possible | + | numerical | correct | 1/1 point | 1 point possible | | numerical | incorrect | 1 point possible | 1 point possible | - | formula | correct | 1/1 points | 1 point possible | + | formula | correct | 1/1 point | 1 point possible | | formula | incorrect | 1 point possible | 1 point possible | | script | correct | 2/2 points | 2 points possible | | script | incorrect | 2 points possible | 2 points possible | - | image | correct | 1/1 points | 1 point possible | + | image | correct | 1/1 point | 1 point possible | | image | incorrect | 1 point possible | 1 point possible | Scenario: I can see my score on a problem to which I submit a blank answer