Compare commits

...

119 Commits

Author SHA1 Message Date
mubbsharanwar
ebb263414c chore: upgrade frontend-component-header version
upgrade frontend-component-header version to enable show/hide username from header based on flag

VAN-1804
2024-02-07 07:11:31 +05:00
Omar Al-Ithawi
4a708da50c feat: tutor-mfe compatiblilty for atlas pull (#312)
- install atlas
 - remove `--filter` to pull all languages by default
 - use ATLAS_OPTIONS to allow custom `--filter`
 - include frontend-platform in `atlas pull`

Refs: FC-0012 OEP-58
2024-02-05 16:58:28 -05:00
Jenkins
f135f9a111 chore(i18n): update translations 2024-02-04 10:46:33 -05:00
Jhon Vente
44d6dc616c fix: test problems jest dom and paragon (#311) 2024-02-02 12:13:12 -05:00
renovate[bot]
a9771fbf49 chore(deps): update dependency @testing-library/jest-dom to v6 2024-01-26 07:48:36 -05:00
renovate[bot]
8f58b72919 fix(deps): update react-router monorepo to v6.21.3 2024-01-26 05:59:50 -05:00
renovate[bot]
8da2a60b37 fix(deps): update dependency moment to v2.30.1 2024-01-26 03:17:56 -05:00
renovate[bot]
ff3e56c3f7 fix(deps): update dependency classnames to v2.5.1 2024-01-25 22:31:21 -05:00
renovate[bot]
204586e79b fix(deps): update dependency @edx/frontend-component-header to v4.11.1 2024-01-25 20:25:00 -05:00
renovate[bot]
31be6daac3 fix(deps): update dependency @edx/frontend-component-footer to v12.7.1 2024-01-25 17:43:59 -05:00
renovate[bot]
9f1c950080 chore(deps): update dependency node to 18.19 2024-01-25 14:50:00 -05:00
renovate[bot]
66b793a1d4 fix(deps): update dependency whatwg-fetch to v3.6.20 2024-01-25 10:24:19 -05:00
renovate[bot]
72db51b65c fix(deps): update dependency regenerator-runtime to v0.14.1 2024-01-25 06:08:35 -05:00
renovate[bot]
9121b3f1e7 fix(deps): update dependency @zip.js/zip.js to v2.7.32 2024-01-25 04:41:05 -05:00
renovate[bot]
f7e51fd1d0 fix(deps): update dependency @testing-library/user-event to v14.5.2 2024-01-25 01:58:02 -05:00
renovate[bot]
77b4f9b47e fix(deps): update dependency core-js to v3.35.1 2024-01-25 01:25:50 -05:00
Jenkins
3ef24a626b chore(i18n): update translations 2023-12-17 10:46:17 -05:00
renovate[bot]
d810913038 fix(deps): update dependency @edx/brand to v1.2.3 2023-10-29 15:44:21 -04:00
renovate[bot]
a6436997bb fix(deps): update dependency core-js to v3.33.1 2023-10-23 15:16:43 -04:00
renovate[bot]
7959a39267 fix(deps): update react-router monorepo to v6.17.0 2023-10-23 13:51:41 -04:00
Feanil Patel
3a1dbfdee5 chore: Update to the new version of brand-openedx in the new scope. (#277)
Part of https://github.com/openedx/axim-engineering/issues/23

This updates the `@edx/brand` alias to point to the `brand-openedx` package at
the `openedx` scope. This does not impact imports because this package is used
via an alias.
2023-10-20 17:26:09 -04:00
renovate[bot]
9b326f1ee8 fix(deps): update dependency core-js to v3.33.0 2023-10-19 03:14:33 -04:00
renovate[bot]
3a87ebda1a fix(deps): update dependency @testing-library/user-event to v14.5.1 2023-10-19 00:43:26 -04:00
renovate[bot]
25389ff296 fix(deps): update dependency @edx/frontend-component-header to v4.8.0 2023-10-18 20:59:19 -04:00
renovate[bot]
80f782b87f fix(deps): update dependency @edx/frontend-component-footer to v12.5.0 2023-10-18 18:57:41 -04:00
renovate[bot]
8a2d767263 chore(deps): update dependency node to 18.18 2023-10-18 15:38:22 -04:00
renovate[bot]
264bed987e chore(deps): update dependency jest to v29.7.0 2023-10-18 11:37:15 -04:00
renovate[bot]
738d460505 chore(deps): update dependency axios-mock-adapter to v1.22.0 2023-10-18 11:34:18 -04:00
Syed Ali Abbas Zaidi
b8f43b92a1 feat: upgrade react router to v6 (#174)
Co-authored-by: Matthew Carter <mcarter@edx.org>
2023-10-18 11:33:42 -04:00
renovate[bot]
7afffa4509 fix(deps): update dependency whatwg-fetch to v3.6.19 2023-10-18 08:44:56 -04:00
renovate[bot]
b9ad13e354 fix(deps): update dependency @zip.js/zip.js to v2.7.30 2023-10-18 05:50:38 -04:00
renovate[bot]
8ceb9e308f fix(deps): update dependency @reduxjs/toolkit to v1.9.7 2023-10-18 03:25:31 -04:00
renovate[bot]
b58cab1249 fix(deps): update dependency @edx/paragon to v20.46.3 2023-10-17 20:47:07 -04:00
renovate[bot]
f6d8c324d9 fix(deps): update dependency @edx/frontend-platform to v4.6.3 2023-10-17 17:42:46 -04:00
renovate[bot]
0c8d2017db chore(deps): update dependency @edx/frontend-build to v12.9.17 2023-10-17 15:28:45 -04:00
Leangseu Kim
c644da3dcc fix: decodeURIComponent for locationId
Squashed commit of the following:

commit af4d469ef241a504112dceda2cb94bff24ba4a9c
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Wed Oct 4 11:27:58 2023 +0700

    update test cases

commit d0c28fb99bede979fbcc8f57036ecb8027996772
Merge: 1f4d50b 5492520
Author: vunguyen-dmt <34919039+vunguyen-dmt@users.noreply.github.com>
Date:   Wed Oct 4 11:22:24 2023 +0700

    Merge branch 'openedx:master' into fix_location_id_error

commit 1f4d50b36514a6e4e9e575b938bf93b81317a21c
Merge: a280a35 eb73457
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Fri Jul 21 03:45:05 2023 +0700

    Merge branch 'fix_location_id_error' of https://github.com/vunguyen-dmt/frontend-app-ora-grading into fix_location_id_error

commit a280a350fcf595dd2011018d113467a9cd88cd61
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Fri Jul 21 03:44:28 2023 +0700

    fix: decodeURIComponent for locationId

commit eb734574bd0daae0c2523904763a8d755baa31f3
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Fri Jul 21 03:41:28 2023 +0700

    update src/data/constants/app.test.js

commit 513dd324a5adc7312ac92c30164e0120784acd4b
Merge: e899846 78ada8c
Author: vunguyen-dmt <34919039+vunguyen-dmt@users.noreply.github.com>
Date:   Wed Jul 19 16:12:14 2023 +0700

    Merge branch 'master' into fix_location_id_error

commit e8998461de8ba9cbbe00a1726ad6266bde5d5ef5
Author: Vu Nguyen <vu.nguyen@dmttek.com>
Date:   Thu Jun 8 10:29:45 2023 +0700

    fix: decodeURIComponent for locationId
2023-10-10 11:30:26 -04:00
Illia Shestakov
cc11ce0f81 fix(deps): replace edx.org brand dependency with openedx brand (#199) 2023-10-10 10:48:33 -04:00
Jenkins
549252038f chore(i18n): update translations 2023-10-01 11:51:20 -04:00
Jenkins
192c8b4601 chore(i18n): update translations 2023-09-24 11:51:22 -04:00
Jhon Vente
70e13eccfa [DOCS] Readme updated according OEP-55 (#194)
* docs: README updated

* docs: update some badges and content

* fix: getting help url

---------

Co-authored-by: Edward Zarecor <ezarecor@tcril.org>
Co-authored-by: Matthew Carter <mcarter@edx.org>
2023-09-12 13:01:10 -04:00
Emad Rad
e25a5a9549 Persian language (#246)
* fix: corrected typos

explaination -> explanation
Critera -> Criteria
addtional -> additional
arbitary -> arbitrary
penging -> pending
downladFiles -> downloadFiles
isLoadeed -> isLoaded
selectror -> selector
commnents -> comments
stirng -> string
isGragrding -> isGrading
queu -> queue
seleted -> selected
feecback -> feedback

* feat: Persian language (fa_IR) added

* chore: Persian translations added

* chore: sort language codes alphabetically

* chore: camelCase variable used for translated messages

* chore: deprecated styling updated

---------

Co-authored-by: Leangseu Kim <lkim@edx.org>
2023-09-11 09:15:52 -04:00
renovate[bot]
358263de3c fix(deps): update dependency regenerator-runtime to ^0.14.0 2023-09-05 11:35:20 -04:00
renovate[bot]
dc7fc94ab5 fix(deps): update dependency core-js to v3.32.1 2023-09-05 10:29:35 -04:00
renovate[bot]
b643afd1b8 fix(deps): update dependency @edx/frontend-component-header to v4.6.0 2023-09-05 05:30:04 -04:00
renovate[bot]
5ac1868d30 fix(deps): update dependency @edx/frontend-component-footer to v12.2.1 2023-09-05 03:35:52 -04:00
renovate[bot]
65063df731 chore(deps): update dependency node to 18.17 2023-09-05 00:55:32 -04:00
renovate[bot]
9aee97dccb fix(deps): update dependency whatwg-fetch to v3.6.18 2023-09-04 20:24:14 -04:00
renovate[bot]
be1ce502c8 fix(deps): update dependency @zip.js/zip.js to v2.7.28 2023-09-04 18:32:59 -04:00
renovate[bot]
19e2f35522 fix(deps): update dependency @edx/frontend-platform to v4.6.1 2023-09-04 14:25:59 -04:00
renovate[bot]
d24ab3358b chore(deps): update dependency jest to v29.6.4 2023-09-04 12:18:38 -04:00
renovate[bot]
56803fb874 chore(deps): update dependency @edx/frontend-build to v12.9.10 2023-09-04 09:43:58 -04:00
Bilal Qamar
b7b94531aa feat: update react & react-dom to v17 (#190)
* feat: update react & react-dom to v17

* build: update pkgs

* fix: fix lint issue

* build: update paragon

* refactor: updated edx packages

* build: update -react-redux

* refactor: updated package-lock

* refactor: updated package-lock

* refactor: updated package-lock

---------

Co-authored-by: mashal-m <mashal.malik@arbisoft.com>
Co-authored-by: Mashal Malik <107556986+Mashal-m@users.noreply.github.com>
2023-08-28 10:36:11 -04:00
leangseu-edx
78ada8ce34 chore: disable cycle dependency error for eslint (#227)
* chore: disable cycle dependency error for eslint

* chore: remove done from async function

* chore: downgrade @testing-library/react to 12 for react@16 support

* fix: update integration test selection and waiting

---------

Co-authored-by: Ben Warzeski <bwarzesk@gmail.com>
2023-07-17 11:17:58 -04:00
renovate[bot]
194e61380c fix(deps): update dependency @testing-library/user-event to v14 2023-07-16 09:58:12 -04:00
renovate[bot]
fa36e20de9 chore(deps): update dependency jest to v29 2023-07-16 05:34:46 -04:00
renovate[bot]
61cf386ee6 chore(deps): update dependency @testing-library/react to v14 2023-07-16 03:27:30 -04:00
renovate[bot]
445cd15d9a fix(deps): update react-router monorepo to v5.3.4 2023-07-16 00:32:05 -04:00
renovate[bot]
db1cf48257 fix(deps): update dependency redux-thunk to v2.4.2 2023-07-15 20:19:32 -04:00
renovate[bot]
942d471097 fix(deps): update dependency redux to v4.2.1 2023-07-15 17:34:16 -04:00
renovate[bot]
1a769a4e70 fix(deps): update dependency query-string to v7.1.3 2023-07-15 15:15:53 -04:00
renovate[bot]
b5cb2af513 fix(deps): update dependency prop-types to v15.8.1 2023-07-15 11:46:48 -04:00
renovate[bot]
6666c0df83 fix(deps): update dependency history to v5.3.0 2023-07-15 09:28:25 -04:00
renovate[bot]
fa60d7d234 fix(deps): update dependency dompurify to v2.4.7 2023-07-15 05:53:57 -04:00
renovate[bot]
78cce21f10 fix(deps): update dependency core-js to v3.31.1 2023-07-15 03:31:40 -04:00
renovate[bot]
e21c2a63e7 fix(deps): update dependency axios to ^0.27.0 2023-07-14 23:40:41 -04:00
renovate[bot]
514792786d fix(deps): update dependency @zip.js/zip.js to v2.7.20 2023-07-14 21:59:46 -04:00
renovate[bot]
5ef2f1ba4f fix(deps): update dependency @fortawesome/react-fontawesome to ^0.2.0 2023-07-14 17:25:11 -04:00
renovate[bot]
b986849c85 fix(deps): update dependency @edx/frontend-platform to v4.6.0 2023-07-14 15:16:53 -04:00
renovate[bot]
f8565c30d1 fix(deps): update dependency @edx/paragon to v20.45.1 2023-07-14 11:52:35 -04:00
renovate[bot]
3a7e103317 chore(deps): update dependency @edx/frontend-build to v12.8.65 2023-07-14 10:29:33 -04:00
renovate[bot]
f977e14ea6 fix(deps): update dependency @edx/frontend-component-header to v4.4.3 2023-07-14 05:47:28 -04:00
renovate[bot]
ab4f1864f2 fix(deps): update dependency @edx/frontend-component-header to v4.4.2 2023-07-14 03:10:45 -04:00
renovate[bot]
6e4d4c479c fix(deps): update dependency @edx/frontend-component-footer to v12.1.2 2023-07-14 00:33:53 -04:00
renovate[bot]
d74532f988 fix(deps): update dependency @edx/brand to v2.1.2 2023-07-13 21:26:17 -04:00
renovate[bot]
d577bc79f7 chore(deps): update dependency @edx/frontend-build to v12.8.64 2023-07-13 19:25:50 -04:00
renovate[bot]
43ab328545 chore(deps): update dependency node to 18.16 2023-07-13 15:48:22 -04:00
renovate[bot]
3ddfdf34d0 chore(deps): update dependency jest-expect-message to v1.1.3 2023-07-13 13:36:24 -04:00
renovate[bot]
b751d41caf chore(deps): update dependency jest to v27.5.1 2023-07-13 08:05:51 -04:00
renovate[bot]
4f4b28e6f5 chore(deps): update dependency @edx/reactifex to v2.2.0 2023-07-13 05:44:51 -04:00
renovate[bot]
038bd117e1 chore(deps): update dependency @edx/frontend-build to v12.8.63 2023-07-13 03:16:03 -04:00
renovate[bot]
7bb31a9aa0 fix(deps): update dependency util to v0.12.5 2023-07-13 00:03:44 -04:00
renovate[bot]
b2f59fc3a1 chore(deps): update dependency semantic-release to v19.0.5 2023-07-12 20:29:24 -04:00
renovate[bot]
60b63944bd chore(deps): update dependency enzyme-adapter-react-16 to v1.15.7 2023-07-12 18:50:22 -04:00
leangseu-edx
2893a9e698 chore: make renovate run weekly instead of daily 2023-07-12 14:57:38 -04:00
renovate[bot]
de4d0fb7f2 chore(deps): update dependency @testing-library/jest-dom to v5.16.5 2023-07-12 14:39:10 -04:00
leangseu-edx
ca7254c3b0 chore: update schedule to widen the range renovate to update 2023-07-12 14:37:33 -04:00
Leangseu Kim
6095869271 chore: change renovate to daily to for testing 2023-07-11 12:07:11 -04:00
leangseu-edx
8fe67f918f chore: remove depends on from catalog-info.yaml 2023-07-05 09:22:17 -04:00
leangseu-edx
b28e58e7cd chore: update links for catalog-info.yaml 2023-07-05 09:16:31 -04:00
leangseu-edx
a1436c3266 chore: update header and footer package (#195)
* chore: update header and footer package

* chore: unit test
2023-06-30 13:00:29 -04:00
Moisés Arévalo
9b5e85a236 chore: updated security contact email 2023-06-29 10:08:02 -04:00
Leangseu Kim
fe1388666a feat: add renovate for js dependency update 2023-06-28 11:31:54 -04:00
Leangseu Kim
a07d6f9b80 fix: when there is no options, the validation should be valid 2023-06-07 11:04:41 -04:00
Adolfo R. Brandes
3e685be116 Merge pull request #183 from arbrandes/runtime-config 2023-05-31 16:42:09 +01:00
Adolfo R. Brandes
0bb5f50917 refactor: use getConfig 2023-05-31 12:32:09 -03:00
Adolfo R. Brandes
49357a4e87 feat: Support runtime configuration
frontend-platform supports runtime configuration since 2.5.0 (see the PR
that introduced it[1], but it requires MFE cooperation.  This implements
just that: by avoiding making configuration values constant, it should
now be possible to change them after initialization.

Almost all changes here relate to the `LMS_BASE_URL` setting, which in
most places was treated as a constant.

[1] openedx/frontend-platform#335
2023-05-25 11:28:28 -03:00
Leangseu Kim
33ba1cdd08 feat: upgraded to node v18, added .nvmrc and updated workflows 2023-05-22 11:20:32 -04:00
Nathan Sprenkle
7012fa82c9 docs: fix bad readme styling (#182) 2023-05-15 11:08:48 -04:00
Adolfo R. Brandes
7b418ff6e3 Merge pull request #167 from raccoongang/fix-location-id 2023-05-15 10:37:00 -03:00
Eugene Dyudyunov
cc349faeb2 fix: BadOraLocationResponse error
Refactor the locationId constant for the subdirectory-based
deployments support.

Exclude the MFE's `PUBLIC_PATH` from the constant.

The `window.location.pathname` example:
```
<PUBLIC_PATH>block-v1:oragrading+oragrading+oragrading+type@openassessment+block@ee217e897a954c1faa3b29317da0f2e7
```
Where the `PUBLIC_PATH` could be:
- `'/'` - for subdomain-based deployments (default)
- `'/mfe-specifix-public-path/'` - for subdirectory-based deployments
2023-05-12 15:33:01 +03:00
Nathan Sprenkle
455ca15af9 docs: remove old readme.md (#180) 2023-05-11 13:36:32 -04:00
Nathan Sprenkle
f992331bf4 docs: maintainership prep (#178)
* docs: add codeowners file

* docs: add catalog-info.yaml

* docs: update README

* docs: add deploy information

* docs: update contributing info
2023-05-09 14:30:31 -04:00
Omar Al-Ithawi
4158231d7a feat: use atlas in make pull_translations (#179)
Changes
-------
 - Bump frontend-platform to bring `intl-imports.js` script
 - Move all i18n imports into `src/i18n/index.js` so `intl-imports.js` can
   override it with latest translations
 - Add `atlas` into `make pull_translations` when `OPENEDX_ATLAS_PULL`
   environment variable is set.
 - package.json and package-lock.json are copied from https://github.com/openedx/frontend-app-ora-grading/pull/176
 - updated snapshots and updated tests in sync with `frontend-platform`
 - require package-lock.json version 3: same as https://github.com/openedx/frontend-app-ora-grading/pull/176

Refs: [FC-0012 project](https://openedx.atlassian.net/l/cp/XGS0iCcQ) implementing Translation Infrastructure OEP-58.
2023-05-09 10:12:40 -04:00
Jenkins
2fa46ab00e chore(i18n): update translations 2023-04-16 11:45:43 -04:00
Jenkins
adade6e48d chore(i18n): update translations 2023-03-26 11:50:42 -04:00
Yoiber
06aea1ff68 chore(i18n): add more languages (#160) 2023-03-25 13:00:56 -04:00
Mashal Malik
054304902f refactor: remove unused tranisfex v2 url (#172) 2023-03-06 12:18:24 +05:00
Leangseu Kim
ba9bddbda1 fix: removed coveralls and codecov packages with update in ci uploader 2023-03-02 09:51:13 -05:00
Feanil Patel
706d69aeca build: Creating a missing workflow file add-remove-label-on-comment.yml.
The .github/workflows/add-remove-label-on-comment.yml workflow is missing or needs an update to stay in
sync with the current standard for this workflow as defined in the
`.github` repo of the `openedx` GitHub org.
2023-02-28 10:32:02 -05:00
Feanil Patel
6d3ed03cac build: Creating a missing workflow file add-depr-ticket-to-depr-board.yml.
The .github/workflows/add-depr-ticket-to-depr-board.yml workflow is missing or needs an update to stay in
sync with the current standard for this workflow as defined in the
`.github` repo of the `openedx` GitHub org.
2023-02-28 10:32:02 -05:00
Feanil Patel
21a35cde82 build: Creating a missing workflow file self-assign-issue.yml.
The .github/workflows/self-assign-issue.yml workflow is missing or needs an update to stay in
sync with the current standard for this workflow as defined in the
`.github` repo of the `openedx` GitHub org.
2023-02-28 10:32:02 -05:00
Leangseu Kim
66f85ee17e chore: upgrade transifex push translation to v3 2023-02-23 10:54:53 -05:00
Leangseu Kim
140cfc1639 chore: upgrade transifex push translation to v3 2023-02-23 10:30:35 -05:00
Leangseu Kim
26906d45f7 fix: upgrade frontend-build to v12 2023-02-23 10:20:59 -05:00
Leangseu Kim
a753170cb7 chore!: Dropped support for Node 12 2023-02-23 09:56:25 -05:00
Jenkins
690140ce46 chore(i18n): update translations 2023-02-22 10:44:03 -05:00
Nathan Sprenkle
6764a9766c docs: add CODEOWNERS (#149) 2022-12-06 16:38:39 -05:00
Diana Olarte
c646b88543 feat: allow runtime configuration (#144)
* feat: allow runtime configuration

* test: organize Head test
2022-11-21 10:06:24 -05:00
Leangseu Kim
b1d11119db fix: update transifex flag for tx cli 1.4.0 2022-10-18 12:09:17 -04:00
99 changed files with 11072 additions and 40964 deletions

2
.env
View File

@@ -30,3 +30,5 @@ ENTERPRISE_MARKETING_URL=''
ENTERPRISE_MARKETING_UTM_SOURCE=''
ENTERPRISE_MARKETING_UTM_CAMPAIGN=''
ENTERPRISE_MARKETING_FOOTER_UTM_MEDIUM=''
APP_ID=''
MFE_CONFIG_API_URL=''

View File

@@ -36,3 +36,5 @@ ENTERPRISE_MARKETING_URL='http://example.com'
ENTERPRISE_MARKETING_UTM_SOURCE='example.com'
ENTERPRISE_MARKETING_UTM_CAMPAIGN='example.com Referral'
ENTERPRISE_MARKETING_FOOTER_UTM_MEDIUM='Footer'
APP_ID=''
MFE_CONFIG_API_URL=''

View File

@@ -4,9 +4,14 @@ const config = createConfig('eslint', {
rules: {
'import/no-named-as-default': 'off',
'import/no-named-as-default-member': 'off',
'import/no-import-module-exports': 'off',
'import/no-self-import': 'off',
'spaced-comment': ['error', 'always', { 'block': { 'exceptions': ['*'] } }],
'react-hooks/rules-of-hooks': 'off',
"react/forbid-prop-types": ["error", { "forbid": ["any", "array"] }], // arguable object proptype is use when I do not care about the shape of the object
'no-import-assign': 'off',
'no-promise-executor-return': 'off',
'import/no-cycle': 'off',
},
});

6
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1,6 @@
# Code owners for frontend-app-ora-grading
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence, they will
# be requested for review when someone opens a pull request.
* @edx/content-aurora

View File

@@ -0,0 +1,19 @@
# Run the workflow that adds new tickets that are either:
# - labelled "DEPR"
# - title starts with "[DEPR]"
# - body starts with "Proposal Date" (this is the first template field)
# to the org-wide DEPR project board
name: Add newly created DEPR issues to the DEPR project board
on:
issues:
types: [opened]
jobs:
routeissue:
uses: openedx/.github/.github/workflows/add-depr-ticket-to-depr-board.yml@master
secrets:
GITHUB_APP_ID: ${{ secrets.GRAPHQL_AUTH_APP_ID }}
GITHUB_APP_PRIVATE_KEY: ${{ secrets.GRAPHQL_AUTH_APP_PEM }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_ISSUE_BOT_TOKEN }}

View File

@@ -0,0 +1,20 @@
# This workflow runs when a comment is made on the ticket
# If the comment starts with "label: " it tries to apply
# the label indicated in rest of comment.
# If the comment starts with "remove label: ", it tries
# to remove the indicated label.
# Note: Labels are allowed to have spaces and this script does
# not parse spaces (as often a space is legitimate), so the command
# "label: really long lots of words label" will apply the
# label "really long lots of words label"
name: Allows for the adding and removing of labels via comment
on:
issue_comment:
types: [created]
jobs:
add_remove_labels:
uses: openedx/.github/.github/workflows/add-remove-label-on-comment.yml@master

View File

@@ -11,17 +11,16 @@ on:
jobs:
tests:
runs-on: ubuntu-20.04
strategy:
matrix:
node: [12, 14, 16]
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Setup Nodejs Env
run: echo "NODE_VER=`cat .nvmrc`" >> $GITHUB_ENV
- name: Setup Nodejs
uses: actions/setup-node@v2
uses: actions/setup-node@v3
# Because of node 18 bug (https://github.com/nodejs/node/issues/47563), Pinning node version 18.15 until the next release of node
with:
node-version: ${{ matrix.node }}
node-version: 18.15
- name: Install dependencies
run: npm ci
@@ -39,7 +38,7 @@ jobs:
run: npm run build
- name: Run Coverage
uses: codecov/codecov-action@v2
uses: codecov/codecov-action@v3
- name: Send failure notification
if: ${{ failure() }}

View File

@@ -10,4 +10,4 @@ on:
jobs:
version-check:
uses: openedx/.github/.github/workflows/lockfileversion-check.yml@master
uses: openedx/.github/.github/workflows/lockfileversion-check-v3.yml@master

12
.github/workflows/self-assign-issue.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
# This workflow runs when a comment is made on the ticket
# If the comment starts with "assign me" it assigns the author to the
# ticket (case insensitive)
name: Assign comment author to ticket if they say "assign me"
on:
issue_comment:
types: [created]
jobs:
self_assign_by_comment:
uses: openedx/.github/.github/workflows/self-assign-issue.yml@master

1
.nvmrc Normal file
View File

@@ -0,0 +1 @@
18.19

View File

@@ -3,18 +3,17 @@ npm-install-%: ## install specified % npm package
git add package.json
transifex_resource = frontend-app-ora-grading
transifex_langs = "ar,fr,es_419,zh_CN"
transifex_langs = "ar,de_DE,es_419,fa_IR,fr,fr_CA,hi,it_IT,pt_PT,uk,ru,zh_CN"
intl_imports = ./node_modules/.bin/intl-imports.js
transifex_utils = ./node_modules/.bin/transifex-utils.js
i18n = ./src/i18n
transifex_input = $(i18n)/transifex_input.json
tx_url1 = https://www.transifex.com/api/2/project/edx-platform/resource/$(transifex_resource)/translation/en/strings/
tx_url2 = https://www.transifex.com/api/2/project/edx-platform/resource/$(transifex_resource)/source/
# This directory must match .babelrc .
transifex_temp = ./temp/babel-plugin-react-intl
NPM_TESTS=build i18n_extract lint test is-es5
NPM_TESTS=build i18n_extract lint test
.PHONY: test
test: $(addprefix test.npm.,$(NPM_TESTS)) ## validate ci suite
@@ -49,15 +48,31 @@ push_translations:
# Pushing strings to Transifex...
tx push -s
# Fetching hashes from Transifex...
./node_modules/reactifex/bash_scripts/get_hashed_strings.sh $(tx_url1)
./node_modules/@edx/reactifex/bash_scripts/get_hashed_strings_v3.sh
# Writing out comments to file...
$(transifex_utils) $(transifex_temp) --comments
$(transifex_utils) $(transifex_temp) --comments --v3-scripts-path
# Pushing comments to Transifex...
./node_modules/reactifex/bash_scripts/put_comments.sh $(tx_url2)
./node_modules/@edx/reactifex/bash_scripts/put_comments_v3.sh
ifeq ($(OPENEDX_ATLAS_PULL),)
# Pulls translations from Transifex.
pull_translations:
tx pull -f --mode reviewed --languages=$(transifex_langs)
tx pull -t -f --mode reviewed --languages=$(transifex_langs)
else
# Experimental: OEP-58 Pulls translations using atlas
pull_translations:
rm -rf src/i18n/messages
mkdir src/i18n/messages
cd src/i18n/messages \
&& atlas pull $(ATLAS_OPTIONS) \
translations/frontend-component-footer/src/i18n/messages:frontend-component-footer \
translations/frontend-component-header/src/i18n/messages:frontend-component-header \
translations/frontend-platform/src/i18n/messages:frontend-platform \
translations/paragon/src/i18n/messages:paragon \
translations/frontend-app-ora-grading/src/i18n/messages:frontend-app-ora-grading
$(intl_imports) frontend-component-footer frontend-component-header frontend-platform paragon frontend-app-ora-grading
endif
# This target is used by CI.
validate-no-uncommitted-package-lock-changes:

View File

@@ -1,21 +0,0 @@
# frontend-app-ora-grading
The ORA Staff Grading App is a microfrontend (MFE) staff grading experience for Open Response Assessments (ORAs). This experience was designed to streamline the grading process and enable richer previews of submission content.
When enabled, ORAs with a staff grading step will link to this new MFE when clicking "Grade Available Responses" from the ORA or link in the instructor dashboard.
## Quickstart
To start the MFE and enable the feature in LMS:
1. Start the MFE with `npm run start`. Take a note of the path/port (defaults to `http://localhost:1993`).
2. Add the route root to `edx-platform` settings: In `edx-platform/lms/envs/private.py` or similar, add `ORA_GRADING_MICROFRONTEND_URL = 'http://localhost:1993'`
3. Enable the feature: In Django Admin go to django-waffle > Flags and add/enable a new flag called `openresponseassessment.enhanced_staff_grader`.
From there, visit the new experience by going to the Instructor Dashboard > Open Responses or an ORA with a Staff Graded Step and click a link to begin grading.
## Resources
See the [ORA Staff Grading](https://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/open_response_assessments/ORA_Staff_Grading.html#ora-staff-grading) section on ReadTheDocs for usage information.

233
README.rst Normal file
View File

@@ -0,0 +1,233 @@
frontend-app-ora-grading
#############################
|license-badge| |status-badge| |ci-badge| |codecov-badge|
Purpose
*******
The ORA Staff Grading App is a micro-frontend (MFE) staff grading experience
for Open Response Assessments (ORAs). This experience was designed to
streamline the grading process and enable richer previews of submission content
and, eventually, replace on-platform grading workflows for ORA.
When enabled, ORAs with a staff grading step will link to this new MFE when
clicking "Grade Available Responses" from the ORA or link in the instructor
dashboard.
The ORA Staff Grader depends on the `lms/djangoapps/ora_staff_grader
<https://github.com/openedx/edx-platform/tree/master/lms/djangoapps/ora_staff_grader>`_
app in ``edx-platform``.
Getting Started
***************
Prerequisites
=============
The `devstack`_ is currently recommended as a development environment for your
new MFE. If you start it with ``make dev.up.lms`` that should give you
everything you need as a companion to this frontend.
Note that it is also possible to use `Tutor`_ to develop an MFE. You can refer
to the `relevant tutor-mfe documentation`_ to get started using it.
.. _Devstack: https://github.com/openedx/devstack
.. _Tutor: https://github.com/overhangio/tutor
.. _relevant tutor-mfe documentation: https://github.com/overhangio/tutor-mfe#mfe-development
Developing
==========
Cloning and Startup
--------------
First, clone the repo, install code prerequisites, and start the app.
.. code-block::
1. Clone your new repo:
``git clone git@github.com:openedx/frontend-app-ora-grading.git``
2. Use node v18.x.
The current version of the micro-frontend build scripts support node 18.
Using other major versions of node *may* work, but this is unsupported. For
convenience, this repository includes an .nvmrc file to help in setting the
correct node version via `nvm <https://github.com/nvm-sh/nvm>`_.
3. Install npm dependencies:
``cd frontend-app-ora-grading && npm install``
4. Update the application port to use for local development:
Default port is 1993. If this does not work for you, update the line
`PORT=1993` to your port in all .env.* files
5. Start the dev server:
``npm start``
The app will, by default, run on `http://localhost:1993` unless otherwise
specified in ``.env.development:PORT`` and ``.env.development:BASE_URL``.
Next, enable the ORA Grading micro-frontend in `edx-platform`
#. Add the path to the ORA Grading app in `edx-platform`:
#. Go to your environment settings (e.g. `edx-platform/lms/envs/private.py`)
#. Add the environment variable, ``ORA_GRADING_MICROFRONTEND_URL`` pointing
to the ORA Grading app location (e.g. ``http://localhost:1993``).
#. Start / restart the ``edx-platform`` ``lms``.
#. Enable the ORA Grading feature in Django Admin.
#. Go to Django Admin (`{lms-root}/admin`)
#. Navigate to ``django-waffle`` > ``Flags`` and click ``add/enable a new
flag``.
#. Add a new flag called ``openresponseassessment.enhanced_staff_grader``
and enable it.
From there, visit an Open Response Assessment with a Staff Graded Step and
click the "View and grade responses" button to begin grading in the ORA Staff
Grader experience.
Making Changes
--------------
Get / install the latest code:
.. code-block::
# Grab the latest code
git checkout master
git pull
# Install/update the dev requirements
npm install
Before committing:
.. code-block::
# Make a new branch for your changes
git checkout -b <your_github_username>/<short_description>
# Using your favorite editor, edit the code to make your change.
# Run your new tests
npm test
# Commit all your changes
git commit ...
git push
# Open a PR and ask for review.
Deploying
=========
This component follows the standard deploy process for MFEs. For details, see
the `MFE production deployment guide`_
.. _MFE production deployment guide: https://openedx.github.io/frontend-platform/#production-deployment-strategy
Internationalization
====================
Please see refer to the `frontend-platform i18n howto`_ for documentation on
internationalization.
.. _frontend-platform i18n howto: https://github.com/openedx/frontend-platform/blob/master/docs/how_tos/i18n.rst
Getting Help
************
If you're having trouble, we have discussion forums at
https://discuss.openedx.org where you can connect with others in the community.
Our real-time conversations are on Slack. You can request a `Slack
invitation`_, then join our `community Slack workspace`_. Because this is a
frontend repository, the best place to discuss it would be in the `#wg-frontend
channel`_.
For anything non-trivial, the best path is to open an issue in this repository
with as many details about the issue you are facing as you can provide.
https://github.com/openedx/frontend-app-ora-grading/issues
For more information about these options, see the `Getting Help`_ page.
.. _Slack invitation: https://openedx.org/slack
.. _community Slack workspace: https://openedx.slack.com/
.. _#wg-frontend channel: https://openedx.slack.com/archives/C04BM6YC7A6
.. _Getting Help: https://openedx.org/community/connect
License
*******
The code in this repository is licensed under the AGPLv3 unless otherwise
noted.
Please see `LICENSE <LICENSE>`_ for details.
Contributing
************
Contributions are very welcome. Please read `How To Contribute`_ for details.
.. _How To Contribute: https://openedx.org/r/how-to-contribute
This project is currently accepting all types of contributions, bug fixes,
security fixes, maintenance work, or new features. However, please make sure
to have a discussion about your new feature idea with the maintainers prior to
beginning development to maximize the chances of your change being accepted.
You can start a conversation by creating a new issue on this repo summarizing
your idea.
The Open edX Code of Conduct
****************************
All community members are expected to follow the `Open edX Code of Conduct`_.
.. _Open edX Code of Conduct: https://openedx.org/code-of-conduct/
People
******
The assigned maintainers for this component and other project details may be
found in `Backstage`_. Backstage pulls this data from the ``catalog-info.yaml``
file in this repo.
.. _Backstage: https://open-edx-backstage.herokuapp.com/catalog/default/component/frontend-app-ora-grading
Reporting Security Issues
*************************
Please do not report security issues in public, and email security@openedx.org instead.
.. |license-badge| image:: https://img.shields.io/github/license/openedx/frontend-app-ora-grading.svg
:target: https://github.com/openedx/frontend-app-ora-grading/blob/master/LICENSE
:alt: License
.. |status-badge| image:: https://img.shields.io/badge/Status-Maintained-brightgreen
.. |ci-badge| image:: https://github.com/openedx/frontend-app-ora-grading/actions/workflows/ci.yml/badge.svg
:target: https://github.com/openedx/frontend-app-ora-grading/actions/workflows/ci.yml
:alt: Continuous Integration
.. |codecov-badge| image:: https://codecov.io/github/openedx/frontend-app-ora-grading/coverage.svg?branch=master
:target: https://codecov.io/github/openedx/frontend-app-ora-grading?branch=master
:alt: Codecov

19
catalog-info.yaml Normal file
View File

@@ -0,0 +1,19 @@
# This file records information about this repo. Its use is described in OEP-55:
# https://open-edx-proposals.readthedocs.io/en/latest/processes/oep-0055-proc-project-maintainers.html
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: 'frontend-app-ora-grading'
description: "Frontend grading experience for Open Response Assessments (ORAs)"
links:
- url: "https://ora-grading.edx.org"
title: "Production Site"
icon: "Web"
- url: "https://ora-grading.stage.edx.org"
title: "Stage Site"
icon: "Web"
spec:
owner: group:content-aurora
type: 'website'
lifecycle: 'production'

View File

@@ -26,4 +26,3 @@ There are only two requirements for a good `make target` name
What `make validate-no-uncommitted-package-lock-changes` does is `git diff`s for any `package-lock.json` file changes in your project.
This is important because `npm` uses the pinned dependencies in your `package-lock.json` file to build the `node_modules` directory. However, the dependencies defined within the `package.json` file can be modified manually, for example, to become misaligned with the dependencies defined within the `package-lock.json`. So when `npm install` executes, the `package-lock.json` file will be updated to mirror the modified `package.json` changes.

View File

@@ -18,4 +18,8 @@ module.exports = createConfig('jest', {
],
testTimeout: 120000,
testEnvironment: 'jsdom',
moduleNameMapper: {
'^@openedx/paragon$': '<rootDir>/mockParagon.js',
'^@openedx/paragon/(.*)$': '<rootDir>/mockParagon.js',
},
});

1
mockParagon.js Normal file
View File

@@ -0,0 +1 @@
module.exports = {};

49517
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,6 @@
},
"scripts": {
"build": "fedx-scripts webpack",
"coveralls": "cat ./coverage/lcov.info | coveralls",
"is-es5": "es-check es5 ./dist/*.js",
"i18n_extract": "BABEL_ENV=i18n fedx-scripts babel src --quiet > /dev/null",
"lint": "fedx-scripts eslint --ext .jsx,.js src/",
"lint-fix": "fedx-scripts eslint --fix --ext .jsx,.js src/",
@@ -26,22 +24,23 @@
"access": "public"
},
"dependencies": {
"@edx/brand": "npm:@edx/brand-edx.org@^2.0.3",
"@edx/frontend-component-footer": "^11.1.1",
"@edx/frontend-component-header": "^3.1.1",
"@edx/frontend-platform": "^2.4.0",
"@edx/paragon": "^19.9.0",
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
"@edx/frontend-component-footer": "12.7.1",
"@edx/frontend-component-header": "4.11.1",
"@edx/frontend-platform": "5.6.1",
"@edx/openedx-atlas": "^0.6.0",
"@edx/paragon": "^20.44.0",
"@fortawesome/fontawesome-svg-core": "^1.2.36",
"@fortawesome/free-brands-svg-icons": "^5.15.4",
"@fortawesome/free-solid-svg-icons": "^5.15.4",
"@fortawesome/react-fontawesome": "^0.1.15",
"@fortawesome/react-fontawesome": "^0.2.0",
"@redux-beacon/segment": "^1.1.0",
"@reduxjs/toolkit": "^1.6.1",
"@testing-library/user-event": "^13.5.0",
"@testing-library/user-event": "^14.0.0",
"@zip.js/zip.js": "^2.4.6",
"axios": "^0.21.4",
"axios": "^0.27.0",
"classnames": "^2.3.1",
"core-js": "3.16.2",
"core-js": "3.35.1",
"dompurify": "^2.3.1",
"email-prop-type": "^3.0.1",
"enzyme": "^3.11.0",
@@ -49,45 +48,46 @@
"file-saver": "^2.0.5",
"filesize": "^8.0.6",
"font-awesome": "4.7.0",
"history": "5.0.1",
"history": "5.3.0",
"html-react-parser": "^1.3.0",
"lodash": "^4.17.21",
"moment": "^2.29.3",
"prop-types": "15.7.2",
"query-string": "7.0.1",
"react": "^16.14.0",
"react-dom": "^16.14.0",
"prop-types": "15.8.1",
"query-string": "7.1.3",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-helmet": "^6.1.0",
"react-intl": "^5.20.9",
"react-pdf": "^5.5.0",
"react-redux": "^7.2.4",
"react-router": "5.2.0",
"react-router-dom": "5.2.0",
"react-redux": "^7.2.9",
"react-router": "6.21.3",
"react-router-dom": "6.21.3",
"react-router-redux": "^5.0.0-alpha.9",
"redux": "4.1.1",
"redux": "4.2.1",
"redux-beacon": "^2.1.0",
"redux-devtools-extension": "2.13.9",
"redux-logger": "3.0.6",
"redux-thunk": "2.3.0",
"regenerator-runtime": "^0.13.9",
"redux-thunk": "2.4.2",
"regenerator-runtime": "^0.14.0",
"reselect": "^4.0.0",
"util": "^0.12.4",
"whatwg-fetch": "^3.6.2"
},
"devDependencies": {
"@edx/frontend-build": "^11.0.2",
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^12.1.0",
"@edx/browserslist-config": "^1.2.0",
"@edx/frontend-build": "^12.7.0",
"@edx/reactifex": "^2.1.1",
"@testing-library/jest-dom": "^6.0.0",
"@testing-library/react": "12.1.5",
"@wojtekmaj/enzyme-adapter-react-17": "0.8.0",
"axios-mock-adapter": "^1.20.0",
"codecov": "^3.8.3",
"enzyme-adapter-react-16": "^1.15.6",
"es-check": "^6.0.0",
"fetch-mock": "^9.11.0",
"husky": "^7.0.0",
"identity-obj-proxy": "^3.0.0",
"jest": "27.0.6",
"jest": "29.7.0",
"jest-expect-message": "^1.0.2",
"react-dev-utils": "^12.0.1",
"react-test-renderer": "^16.14.0",
"react-test-renderer": "^17.0.2",
"reactifex": "1.1.1",
"redux-mock-store": "^1.5.4",
"semantic-release": "^19.0.3"

34
renovate.json Normal file
View File

@@ -0,0 +1,34 @@
{
"extends": [
"config:base",
"schedule:weekly",
":automergeLinters",
":automergeMinor",
":automergeTesters",
":enableVulnerabilityAlerts",
":rebaseStalePrs",
":semanticCommits",
":updateNotScheduled"
],
"packageRules": [
{
"matchDepTypes": [
"devDependencies"
],
"matchUpdateTypes": [
"lockFileMaintenance",
"minor",
"patch",
"pin"
],
"automerge": true
},
{
"matchPackagePatterns": ["@edx", "@openedx"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
}
],
"timezone": "America/New_York",
"schedule": ["before 11pm"]
}

View File

@@ -13,10 +13,12 @@ import CTA from 'containers/CTA';
import ListView from 'containers/ListView';
import './App.scss';
import Head from './components/Head';
export const App = ({ courseMetadata, isEnabled }) => (
<Router>
<div>
<Head />
<Header
courseTitle={courseMetadata.title}
courseNumber={courseMetadata.number}

View File

@@ -25,6 +25,7 @@ jest.mock('@edx/frontend-component-footer', () => 'Footer');
jest.mock('containers/DemoWarning', () => 'DemoWarning');
jest.mock('containers/CTA', () => 'CTA');
jest.mock('containers/ListView', () => 'ListView');
jest.mock('components/Head', () => 'Head');
const logo = 'fakeLogo.png';
let el;

View File

@@ -3,6 +3,7 @@
exports[`App router component snapshot: disabled (show demo warning) 1`] = `
<BrowserRouter>
<div>
<Head />
<Header
courseNumber="course-number"
courseOrg="course-org"
@@ -23,6 +24,7 @@ exports[`App router component snapshot: disabled (show demo warning) 1`] = `
exports[`App router component snapshot: enabled 1`] = `
<BrowserRouter>
<div>
<Head />
<Header
courseNumber="course-number"
courseOrg="course-org"

View File

@@ -7,29 +7,18 @@ exports[`app registry subscribe: APP_INIT_ERROR. snapshot: displays an ErrorPag
`;
exports[`app registry subscribe: APP_READY. links App to root element 1`] = `
<IntlProvider
defaultFormats={Object {}}
defaultLocale="en"
fallbackOnEmptyString={true}
formats={Object {}}
locale="en"
messages={Object {}}
onError={[Function]}
onWarn={[Function]}
textComponent={Symbol(react.fragment)}
>
<AppProvider
store={
Object {
"dispatch": [Function],
"getState": [Function],
"replaceReducer": [Function],
"subscribe": [Function],
Symbol(Symbol.observable): [Function],
}
<AppProvider
store={
Object {
"dispatch": [Function],
"getState": [Function],
"replaceReducer": [Function],
"subscribe": [Function],
Symbol(Symbol.observable): [Function],
}
>
<App />
</AppProvider>
</IntlProvider>
}
wrapWithRouter={false}
>
<App />
</AppProvider>
`;

View File

@@ -81,13 +81,12 @@ describe('Text file preview hooks', () => {
});
});
describe('onError', () => {
it('calls get on the passed url when it changes', async (done) => {
it('calls get on the passed url when it changes', async () => {
axios.get.mockReturnValueOnce(Promise.reject(
{ response: { status: testValue } },
));
await hooks.fetchFile({ ...props, setContent: state.setState.content });
expect(props.onError).toHaveBeenCalledWith(testValue);
done();
});
});
});

View File

@@ -28,6 +28,6 @@
@include media-breakpoint-down(sm) {
.file-card-title {
width: map-get($container-max-widths, "sm")/2;
width: calc(map-get($container-max-widths, "sm")/2);
}
}

View File

@@ -26,7 +26,7 @@ export const FileInfo = ({ onClick, children }) => (
)}
>
<Button
size="small"
size="sm"
variant="tertiary"
onClick={onClick}
iconAfter={InfoOutline}

View File

@@ -21,7 +21,7 @@ exports[`File Preview Card component snapshot 1`] = `
<Button
iconAfter={[MockFunction icons.InfoOutline]}
onClick={[MockFunction this.props.onClick]}
size="small"
size="sm"
variant="tertiary"
>
<FormattedMessage

View File

@@ -0,0 +1,14 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Head snapshot 1`] = `
<Helmet>
<title>
ORA staff grading | site-name
</title>
<link
href="favicon-url"
rel="shortcut icon"
type="image/x-icon"
/>
</Helmet>
`;

View File

@@ -0,0 +1,20 @@
import React from 'react';
import { Helmet } from 'react-helmet';
import { useIntl } from '@edx/frontend-platform/i18n';
import { getConfig } from '@edx/frontend-platform';
import messages from './messages';
const Head = () => {
const { formatMessage } = useIntl();
return (
<Helmet>
<title>
{formatMessage(messages.PageTitle, { siteName: getConfig().SITE_NAME })}
</title>
<link rel="shortcut icon" href={getConfig().FAVICON_URL} type="image/x-icon" />
</Helmet>
);
};
export default Head;

View File

@@ -0,0 +1,25 @@
import React from 'react';
import { getConfig } from '@edx/frontend-platform';
import { shallow } from 'enzyme';
import Head from '.';
jest.mock('react-helmet', () => ({
Helmet: 'Helmet',
}));
jest.mock('@edx/frontend-platform', () => ({
getConfig: () => ({
SITE_NAME: 'site-name',
FAVICON_URL: 'favicon-url',
}),
}));
describe('Head', () => {
it('snapshot', () => {
const el = shallow(<Head />);
expect(el).toMatchSnapshot();
expect(el.find('title').text()).toContain(getConfig().SITE_NAME);
expect(el.find('link').prop('href')).toEqual(getConfig().FAVICON_URL);
});
});

View File

@@ -0,0 +1,11 @@
import { defineMessages } from '@edx/frontend-platform/i18n';
const messages = defineMessages({
PageTitle: {
id: 'PageTitle',
defaultMessage: 'ORA staff grading | {siteName}',
description: 'Title tag',
},
});
export default messages;

View File

@@ -1,16 +0,0 @@
const configuration = {
// BASE_URL: process.env.BASE_URL,
LMS_BASE_URL: process.env.LMS_BASE_URL,
// LOGIN_URL: process.env.LOGIN_URL,
// LOGOUT_URL: process.env.LOGOUT_URL,
// CSRF_TOKEN_API_PATH: process.env.CSRF_TOKEN_API_PATH,
// REFRESH_ACCESS_TOKEN_ENDPOINT: process.env.REFRESH_ACCESS_TOKEN_ENDPOINT,
// DATA_API_BASE_URL: process.env.DATA_API_BASE_URL,
// SECURE_COOKIES: process.env.NODE_ENV !== 'development',
// SEGMENT_KEY: process.env.SEGMENT_KEY,
// ACCESS_TOKEN_COOKIE_NAME: process.env.ACCESS_TOKEN_COOKIE_NAME,
};
const features = {};
export { configuration, features };

View File

@@ -163,7 +163,7 @@ describe('Criterion Feedback', () => {
});
describe('mapStateToProps', () => {
const testState = { abitaryState: 'some data' };
const testState = { arbitraryState: 'some data' };
const ownProps = { orderNum: props.orderNum };
let mapped;
beforeEach(() => {

View File

@@ -33,27 +33,25 @@ export class RadioCriterion extends React.Component {
isInvalid,
} = this.props;
return (
<>
<Form.RadioSet name={config.name} value={data}>
{config.options.map((option) => (
<Form.Radio
className="criteria-option"
key={option.name}
value={option.name}
description={intl.formatMessage(messages.optionPoints, { points: option.points })}
onChange={this.onChange}
disabled={!isGrading}
>
{option.label}
</Form.Radio>
))}
{isInvalid && (
<Form.Control.Feedback type="invalid" className="feedback-error-msg">
{intl.formatMessage(messages.rubricSelectedError)}
</Form.Control.Feedback>
)}
</Form.RadioSet>
</>
<Form.RadioSet name={config.name} value={data}>
{config.options.map((option) => (
<Form.Radio
className="criteria-option"
key={option.name}
value={option.name}
description={intl.formatMessage(messages.optionPoints, { points: option.points })}
onChange={this.onChange}
disabled={!isGrading}
>
{option.label}
</Form.Radio>
))}
{isInvalid && (
<Form.Control.Feedback type="invalid" className="feedback-error-msg">
{intl.formatMessage(messages.rubricSelectedError)}
</Form.Control.Feedback>
)}
</Form.RadioSet>
);
}
}

View File

@@ -40,14 +40,14 @@ describe('Radio Criterion Container', () => {
feedback: 'feedback mock',
options: [
{
explanation: 'explaination',
explanation: 'explanation',
feedback: 'option feedback',
label: 'this label',
name: 'option name',
points: 1,
},
{
explanation: 'explaination 2',
explanation: 'explanation 2',
feedback: 'option feedback 2',
label: 'this label 2',
name: 'option name 2',
@@ -129,7 +129,7 @@ describe('Radio Criterion Container', () => {
});
describe('mapStateToProps', () => {
const testState = { arbitary: 'some data' };
const testState = { arbitrary: 'some data' };
const ownProps = { orderNum: props.orderNum };
let mapped;
beforeEach(() => {

View File

@@ -29,14 +29,14 @@ describe('Review Crition Container', () => {
feedback: 'feedback mock',
options: [
{
explanation: 'explaination',
explanation: 'explanation',
feedback: 'option feedback',
label: 'this label',
name: 'option name',
points: 1,
},
{
explanation: 'explaination 2',
explanation: 'explanation 2',
feedback: 'option feedback 2',
label: 'this label 2',
name: 'option name 2',
@@ -78,7 +78,7 @@ describe('Review Crition Container', () => {
});
describe('mapStateToProps', () => {
const testState = { arbitary: 'some data' };
const testState = { arbitrary: 'some data' };
const ownProps = { orderNum: props.orderNum };
let mapped;
beforeEach(() => {

View File

@@ -1,91 +1,85 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Radio Criterion Container snapshot is grading 1`] = `
<React.Fragment>
<Form.RadioSet
name="random name"
value="selected radio option"
<Form.RadioSet
name="random name"
value="selected radio option"
>
<Form.Radio
className="criteria-option"
description="1 points"
disabled={false}
onChange={[MockFunction this.onChange]}
value="option name"
>
<Form.Radio
className="criteria-option"
description="1 points"
disabled={false}
onChange={[MockFunction this.onChange]}
value="option name"
>
this label
</Form.Radio>
<Form.Radio
className="criteria-option"
description="2 points"
disabled={false}
onChange={[MockFunction this.onChange]}
value="option name 2"
>
this label 2
</Form.Radio>
</Form.RadioSet>
</React.Fragment>
this label
</Form.Radio>
<Form.Radio
className="criteria-option"
description="2 points"
disabled={false}
onChange={[MockFunction this.onChange]}
value="option name 2"
>
this label 2
</Form.Radio>
</Form.RadioSet>
`;
exports[`Radio Criterion Container snapshot is not grading 1`] = `
<React.Fragment>
<Form.RadioSet
name="random name"
value="selected radio option"
<Form.RadioSet
name="random name"
value="selected radio option"
>
<Form.Radio
className="criteria-option"
description="1 points"
disabled={true}
onChange={[MockFunction this.onChange]}
value="option name"
>
<Form.Radio
className="criteria-option"
description="1 points"
disabled={true}
onChange={[MockFunction this.onChange]}
value="option name"
>
this label
</Form.Radio>
<Form.Radio
className="criteria-option"
description="2 points"
disabled={true}
onChange={[MockFunction this.onChange]}
value="option name 2"
>
this label 2
</Form.Radio>
</Form.RadioSet>
</React.Fragment>
this label
</Form.Radio>
<Form.Radio
className="criteria-option"
description="2 points"
disabled={true}
onChange={[MockFunction this.onChange]}
value="option name 2"
>
this label 2
</Form.Radio>
</Form.RadioSet>
`;
exports[`Radio Criterion Container snapshot radio contain invalid response 1`] = `
<React.Fragment>
<Form.RadioSet
name="random name"
value="selected radio option"
<Form.RadioSet
name="random name"
value="selected radio option"
>
<Form.Radio
className="criteria-option"
description="1 points"
disabled={false}
onChange={[MockFunction this.onChange]}
value="option name"
>
<Form.Radio
className="criteria-option"
description="1 points"
disabled={false}
onChange={[MockFunction this.onChange]}
value="option name"
>
this label
</Form.Radio>
<Form.Radio
className="criteria-option"
description="2 points"
disabled={false}
onChange={[MockFunction this.onChange]}
value="option name 2"
>
this label 2
</Form.Radio>
<Form.Control.Feedback
className="feedback-error-msg"
type="invalid"
>
Rubric selection is required
</Form.Control.Feedback>
</Form.RadioSet>
</React.Fragment>
this label
</Form.Radio>
<Form.Radio
className="criteria-option"
description="2 points"
disabled={false}
onChange={[MockFunction this.onChange]}
value="option name 2"
>
this label 2
</Form.Radio>
<Form.Control.Feedback
className="feedback-error-msg"
type="invalid"
>
Rubric selection is required
</Form.Control.Feedback>
</Form.RadioSet>
`;

View File

@@ -19,7 +19,7 @@ exports[`Criterion Container snapshot is graded and is not grading 1`] = `
this label
</strong>
<br />
explaination
explanation
</div>
<div
className="help-popover-option"
@@ -29,7 +29,7 @@ exports[`Criterion Container snapshot is graded and is not grading 1`] = `
this label 2
</strong>
<br />
explaination 2
explanation 2
</div>
</InfoPopover>
</Form.Label>
@@ -67,7 +67,7 @@ exports[`Criterion Container snapshot is ungraded and is grading 1`] = `
this label
</strong>
<br />
explaination
explanation
</div>
<div
className="help-popover-option"
@@ -77,7 +77,7 @@ exports[`Criterion Container snapshot is ungraded and is grading 1`] = `
this label 2
</strong>
<br />
explaination 2
explanation 2
</div>
</InfoPopover>
</Form.Label>
@@ -115,7 +115,7 @@ exports[`Criterion Container snapshot is ungraded and is not grading 1`] = `
this label
</strong>
<br />
explaination
explanation
</div>
<div
className="help-popover-option"
@@ -125,7 +125,7 @@ exports[`Criterion Container snapshot is ungraded and is not grading 1`] = `
this label 2
</strong>
<br />
explaination 2
explanation 2
</div>
</InfoPopover>
</Form.Label>

View File

@@ -34,14 +34,14 @@ describe('Criterion Container', () => {
feedback: 'feedback mock',
options: [
{
explanation: 'explaination',
explanation: 'explanation',
feedback: 'option feedback',
label: 'this label',
name: 'option name',
points: 2,
},
{
explanation: 'explaination 2',
explanation: 'explanation 2',
feedback: 'option feedback 2',
label: 'this label 2',
name: 'option name 2',
@@ -89,16 +89,16 @@ describe('Criterion Container', () => {
});
test('is ungraded and is grading (Radio criterion get render)', () => {
const rubricCritera = el.find('.rubric-criteria');
expect(rubricCritera.children(0).name()).toEqual('RadioCriterion');
const rubricCriteria = el.find('.rubric-criteria');
expect(rubricCriteria.children(0).name()).toEqual('RadioCriterion');
});
test('is ungraded and is not grading (Review criterion get render)', () => {
el.setProps({
isGrading: false,
});
const rubricCritera = el.find('.rubric-criteria');
expect(rubricCritera.children(0).name()).toEqual('ReviewCriterion');
const rubricCriteria = el.find('.rubric-criteria');
expect(rubricCriteria.children(0).name()).toEqual('ReviewCriterion');
});
test('is graded and is not grading (Radio criterion get render)', () => {
@@ -106,13 +106,13 @@ describe('Criterion Container', () => {
isGrading: false,
gradeStatus: gradeStatuses.graded,
});
const rubricCritera = el.find('.rubric-criteria');
expect(rubricCritera.children(0).name()).toEqual('RadioCriterion');
const rubricCriteria = el.find('.rubric-criteria');
expect(rubricCriteria.children(0).name()).toEqual('RadioCriterion');
});
});
describe('mapStateToProps', () => {
const testState = { abitaryState: 'some data' };
const testState = { arbitraryState: 'some data' };
const ownProps = { orderNum: props.orderNum };
let mapped;
beforeEach(() => {

View File

@@ -14,7 +14,7 @@ const messages = defineMessages({
optional: {
id: 'ora-grading.CriterionFeedback.optional',
defaultMessage: '(Optional)',
description: 'addtional label for optional feedback field',
description: 'additional label for optional feedback field',
},
optionPoints: {
id: 'ora-grading.RadioCriterion.optionPoints',

View File

@@ -22,7 +22,7 @@ export const ListViewBreadcrumb = ({ courseId, oraName }) => (
</Hyperlink>
<p className="py-4">
<span className="h3">{oraName}</span>
<Hyperlink className="align-middle" destination={urls.ora(courseId, locationId)}>
<Hyperlink className="align-middle" destination={urls.ora(courseId, locationId())}>
<Icon src={Launch} className="d-inline-block" />
</Hyperlink>
</p>

View File

@@ -50,7 +50,7 @@ describe('ListViewBreadcrumb component', () => {
test('ora destination', () => {
expect(
el.find(Hyperlink).at(1).props().destination,
).toEqual(urls.ora(props.courseId, constants.locationId));
).toEqual(urls.ora(props.courseId, constants.locationId()));
});
});
describe('mapStateToProps', () => {

View File

@@ -52,7 +52,7 @@ export class SubmissionsTable extends React.Component {
formatDate = ({ value }) => {
const date = new Date(moment(value));
return date.toLocaleString();
}
};
formatGrade = ({ value: score }) => (
score === null ? '-' : `${score.pointsEarned}/${score.pointsPossible}`
@@ -63,9 +63,9 @@ export class SubmissionsTable extends React.Component {
translate = (...args) => this.props.intl.formatMessage(...args);
handleViewAllResponsesClick = (data) => () => {
const getsubmissionUUID = (row) => row.original.submissionUUID;
this.props.loadSelectionForReview(data.map(getsubmissionUUID));
}
const getSubmissionUUID = (row) => row.original.submissionUUID;
this.props.loadSelectionForReview(data.map(getSubmissionUUID));
};
render() {
if (!this.props.listData.length) {

View File

@@ -43,7 +43,7 @@ exports[`FileDownload component snapshot download is completed 1`] = `
/>,
"pending": <FormattedMessage
defaultMessage="Downloading"
description="Download files penging state label"
description="Download files pending state label"
id="ora-grading.ResponseDisplay.SubmissionFiles.downloading"
/>,
}
@@ -96,7 +96,7 @@ exports[`FileDownload component snapshot download is failed 1`] = `
/>,
"pending": <FormattedMessage
defaultMessage="Downloading"
description="Download files penging state label"
description="Download files pending state label"
id="ora-grading.ResponseDisplay.SubmissionFiles.downloading"
/>,
}
@@ -149,7 +149,7 @@ exports[`FileDownload component snapshot download is inactive 1`] = `
/>,
"pending": <FormattedMessage
defaultMessage="Downloading"
description="Download files penging state label"
description="Download files pending state label"
id="ora-grading.ResponseDisplay.SubmissionFiles.downloading"
/>,
}
@@ -202,7 +202,7 @@ exports[`FileDownload component snapshot download is pending 1`] = `
/>,
"pending": <FormattedMessage
defaultMessage="Downloading"
description="Download files penging state label"
description="Download files pending state label"
id="ora-grading.ResponseDisplay.SubmissionFiles.downloading"
/>,
}

View File

@@ -24,7 +24,7 @@ const messages = defineMessages({
downloading: {
id: 'ora-grading.ResponseDisplay.SubmissionFiles.downloading',
defaultMessage: 'Downloading',
description: 'Download files penging state label',
description: 'Download files pending state label',
},
downloaded: {
id: 'ora-grading.ResponseDisplay.SubmissionFiles.downloaded',

View File

@@ -19,7 +19,7 @@ jest.mock('data/redux/grading/selectors', () => ({
doesExist: (state) => ({ nextDoesExist: state }),
},
activeIndex: (state) => ({ activeIndex: state }),
selectionLength: (state) => ({ selectionlength: state }),
selectionLength: (state) => ({ selectionLength: state }),
}));
jest.mock('data/redux/requests/selectors', () => ({
allowNavigation: (state) => ({ allowNavigation: state }),

View File

@@ -53,7 +53,7 @@ describe('ReviewContent component', () => {
test('isFailed loads from requests.isFailed(fetchSubmission)', () => {
expect(mapped.isFailed).toEqual(selectors.requests.isFailed(testState, { requestKey }));
});
test('isLoadeed loads from requests.isCompleted(fetchSubmission)', () => {
test('isLoaded loads from requests.isCompleted(fetchSubmission)', () => {
expect(mapped.isLoaded).toEqual(selectors.requests.isCompleted(testState, { requestKey }));
});
});

View File

@@ -62,7 +62,7 @@ describe('DownloadErrors component', () => {
});
describe('behavior', () => {
describe('clearState', () => {
it('calls props.clearState with requestKey: downladFiles', () => {
it('calls props.clearState with requestKey: downloadFiles', () => {
el.instance().cancelAction();
expect(props.clearState).toHaveBeenCalledWith({ requestKey: RequestKeys.downloadFiles });
});

View File

@@ -106,7 +106,7 @@ describe('Review Modal Submit Error hooks', () => {
errorStatus = 'test-status';
const mockErrorProps = (args) => ({
confirm: { confirm: args },
headingMessag: { headingMessage: args },
headingMessage: { headingMessage: args },
contentMessage: { contentMessage: args },
});
const mockProps = mockErrorProps({ dispatch, errorStatus });

View File

@@ -32,7 +32,7 @@ jest.mock('data/redux/grading/selectors', () => ({
overallFeedback: jest.fn((...args) => ({
selectedOverallFeedback: args,
})),
isGrading: jest.fn((...args) => ({ isGragrding: args })),
isGrading: jest.fn((...args) => ({ isGrading: args })),
},
validation: {
overallFeedbackIsInvalid: jest.fn((...args) => ({
@@ -44,7 +44,7 @@ jest.mock('data/redux/grading/selectors', () => ({
describe('Rubric Feedback component', () => {
const props = {
intl: { formatMessage },
config: 'config stirng',
config: 'config string',
isGrading: true,
value: 'some value',
isInvalid: false,
@@ -135,7 +135,7 @@ describe('Rubric Feedback component', () => {
});
describe('mapStateToProps', () => {
const testState = { abitaryState: 'some data' };
const testState = { arbitraryState: 'some data' };
let mapped;
beforeEach(() => {
mapped = mapStateToProps(testState);

View File

@@ -10,7 +10,7 @@ exports[`Rubric Feedback component snapshot feedback value is invalid 1`] = `
>
<FormattedMessage
defaultMessage="Overall comments"
description="Rubric overall commnents label"
description="Rubric overall comments label"
id="ora-grading.Rubric.overallComments"
/>
</span>
@@ -53,7 +53,7 @@ exports[`Rubric Feedback component snapshot is graded 1`] = `
>
<FormattedMessage
defaultMessage="Overall comments"
description="Rubric overall commnents label"
description="Rubric overall comments label"
id="ora-grading.Rubric.overallComments"
/>
</span>
@@ -84,7 +84,7 @@ exports[`Rubric Feedback component snapshot is grading 1`] = `
>
<FormattedMessage
defaultMessage="Overall comments"
description="Rubric overall commnents label"
description="Rubric overall comments label"
id="ora-grading.Rubric.overallComments"
/>
</span>

View File

@@ -43,7 +43,7 @@ describe('Rubric hooks', () => {
afterEach(state.restore);
describe('redux values', () => {
beforeEach(() => { hook = hooks.reduxValues(); });
test('loads gradeIsPending from isPending requests selectror on submitGrade request', () => {
test('loads gradeIsPending from isPending requests selector on submitGrade request', () => {
expect(hook.gradeIsPending.useSelector(testState)).toEqual(
selectors.requests.isPending(testState, { requestKey: RequestKeys.submitGrade }),
);
@@ -51,7 +51,7 @@ describe('Rubric hooks', () => {
test('loads criteriaIndices from rubric selector', () => {
expect(hook.criteriaIndices).toEqual(useSelector(selectors.app.rubric.criteriaIndices));
});
test('loads isCompleted from requests selectror on submitGrade request', () => {
test('loads isCompleted from requests selector on submitGrade request', () => {
expect(hook.isCompleted.useSelector(testState)).toEqual(
selectors.requests.isCompleted(testState, { requestKey: RequestKeys.submitGrade }),
);
@@ -62,7 +62,7 @@ describe('Rubric hooks', () => {
test('loads isGrading from grading selector for selected submission', () => {
expect(hook.isGrading).toEqual(useSelector(selectors.grading.selected.isGrading));
});
test('loads lockIsPending from isPending requests selectror on setLock request', () => {
test('loads lockIsPending from isPending requests selector on setLock request', () => {
expect(hook.lockIsPending.useSelector(testState)).toEqual(
selectors.requests.isPending(testState, { requestKey: RequestKeys.setLock }),
);

View File

@@ -24,7 +24,7 @@ const messages = defineMessages({
overallComments: {
id: 'ora-grading.Rubric.overallComments',
defaultMessage: 'Overall comments',
description: 'Rubric overall commnents label',
description: 'Rubric overall comments label',
},
addComments: {
id: 'ora-grading.Rubric.addComments',

View File

@@ -1,4 +1,4 @@
import { getConfig } from '@edx/frontend-platform';
export const routePath = `${getConfig().PUBLIC_PATH}:courseId`;
export const locationId = window.location.pathname.slice(1);
export const routePath = () => `${getConfig().PUBLIC_PATH}:courseId`;
export const locationId = () => decodeURIComponent(window.location.pathname).replace(getConfig().PUBLIC_PATH, '');

View File

@@ -4,7 +4,7 @@ import * as constants from './app';
jest.unmock('./app');
jest.mock('@edx/frontend-platform', () => {
const PUBLIC_PATH = 'test-public-path';
const PUBLIC_PATH = '/test-public-path/';
return {
getConfig: () => ({ PUBLIC_PATH }),
PUBLIC_PATH,
@@ -13,12 +13,31 @@ jest.mock('@edx/frontend-platform', () => {
describe('app constants', () => {
test('route path draws from public path and adds courseId', () => {
expect(constants.routePath).toEqual(`${platform.PUBLIC_PATH}:courseId`);
expect(constants.routePath()).toEqual(`${platform.PUBLIC_PATH}:courseId`);
});
test('locationId returns trimmed pathname', () => {
const old = window.location;
window.location = { pathName: '/somePath.jpg' };
expect(constants.locationId).toEqual(window.location.pathname.slice(1));
window.location = old;
describe('locationId', () => {
const domain = 'https://example.com';
test('returns trimmed pathname', () => {
const old = window.location;
Object.defineProperty(window, 'location', {
value: new URL(`${domain}${platform.PUBLIC_PATH}somePath.jpg`),
writable: true,
});
expect(constants.locationId()).toEqual(window.location.pathname.replace(platform.PUBLIC_PATH, ''));
window.location = old;
});
test('handle none-standard characters pathName', () => {
const old = window.location;
const noneStandardPath = `${platform.PUBLIC_PATH}ORG+%C4%90+2023`;
const expectedPath = `${platform.PUBLIC_PATH}ORG+Đ+2023`;
Object.defineProperty(window, 'location', {
value: new URL(`${domain}${noneStandardPath}`),
writable: true,
});
expect(noneStandardPath).not.toEqual(expectedPath);
expect(constants.locationId()).toEqual(expectedPath.replace(platform.PUBLIC_PATH, ''));
window.location = old;
});
});
});

View File

@@ -111,7 +111,7 @@ describe('app selectors unit tests', () => {
test('rubricConfig selector returns rubricConfig from oraMetadata', () => {
testOraSelector(selectors.rubric.config, oraMetadata.rubricConfig);
});
test('fileUploadResponseConfig returns fileUploadResponseconfig from oraMetadata', () => {
test('fileUploadResponseConfig returns fileUploadResponseConfig from oraMetadata', () => {
testOraSelector(
selectors.ora.fileUploadResponseConfig,
oraMetadata.fileUploadResponseConfig,
@@ -184,11 +184,11 @@ describe('app selectors unit tests', () => {
});
});
describe('shouldIncludeFeedback', () => {
it('returns true iff the passed feedback is optional or required', () => {
it('returns true if the passed feedback is optional or required', () => {
expect(selectors.shouldIncludeFeedback(feedbackRequirement.optional)).toEqual(true);
expect(selectors.shouldIncludeFeedback(feedbackRequirement.required)).toEqual(true);
expect(selectors.shouldIncludeFeedback(feedbackRequirement.disabled)).toEqual(false);
expect(selectors.shouldIncludeFeedback('aribitrary')).toEqual(false);
expect(selectors.shouldIncludeFeedback('arbitrary')).toEqual(false);
});
});
describe('fillGradeData selector', () => {

View File

@@ -62,7 +62,7 @@ const initialState = {
};
/**
* Updates the state's gradingData entry for the seleted submission,
* Updates the state's gradingData entry for the selected submission,
* overlaying the passed data on top of the existing data for the that
* submission.
* @return {object} - new state
@@ -82,7 +82,7 @@ export const updateGradingData = (state, data) => {
};
/**
* Updates the given state's gradingData entry for the seleted submission,
* Updates the given state's gradingData entry for the selected submission,
* overlaying the passed data on top of the existing data for the criterion
* at the given index (orderNum) for the rubric.
* @return {object} - new state

View File

@@ -218,7 +218,7 @@ describe('app reducer', () => {
describe('setCriterionFeedback', () => {
it('loads feedback by orderNum', () => {
expect(reducer(testState, actions.setCriterionFeedback(testState, args))).toEqual(
mocks.updateCriterion(testState, orderNum, { feecback: testValue }),
mocks.updateCriterion(testState, orderNum, { feedback: testValue }),
);
});
});

View File

@@ -21,7 +21,7 @@ export const next = {
module.hasNext,
),
/**
* Returns the submissionUUID for the next submission in the selection queu
* Returns the submissionUUID for the next submission in the selection queue
* @return {string} next submission id (null if there isn't one)
*/
submissionUUID: createSelector(

View File

@@ -183,7 +183,7 @@ describe('selected submission grading selectors unit tests', () => {
const { userDisplay } = selectors.selected;
const username = 'USERname';
const teamName = 'teamNAME';
it('is a reselect selector based on the username, teamname, and whether the ORA is individual', () => {
it('is a reselect selector based on the username, teamName, and whether the ORA is individual', () => {
expect(userDisplay.preSelectors).toEqual([
appSelectors.ora.isIndividual,
selectors.selected.username,

View File

@@ -32,7 +32,7 @@ validation.criteria = createSelector(
criterion.feedback === feedbackRequirement.required
&& gradingData.criteria[index].feedback === ''
),
selectedOption: gradingData.criteria[index].selectedOption !== '',
selectedOption: rubricConfig.criteria[index].options.length === 0 || gradingData.criteria[index].selectedOption !== '',
})),
);

View File

@@ -64,8 +64,8 @@ describe('validation grading selectors unit tests', () => {
expect(preSelectors).toEqual([selected.gradingData, appSelectors.rubric.config]);
});
describe('returned object', () => {
const feedbackOptional = { feedback: feedbackRequirement.optional };
const feedbackRequired = { feedback: feedbackRequirement.required };
const feedbackOptional = { feedback: feedbackRequirement.optional, options: [1] };
const feedbackRequired = { feedback: feedbackRequirement.required, options: [1] };
describe('feedback', () => {
const validFeedback = { feedback: 'Fair' };
const emptyFeedback = { feedback: '' };
@@ -85,6 +85,14 @@ describe('validation grading selectors unit tests', () => {
);
expect(output.map(({ selectedOption }) => selectedOption)).toEqual([true, false]);
});
it('returns true criteria options are empty', () => {
const emptyOptionsFeedback = { ...feedbackOptional, options: [] };
const output = cb(
{ criteria: [{ selectedOption: '' }, { selectedOption: 'Invalid' }] },
{ criteria: [emptyOptionsFeedback, emptyOptionsFeedback] },
);
expect(output.map(({ selectedOption }) => selectedOption)).toEqual([true, true]);
});
});
});
});
@@ -123,8 +131,8 @@ describe('validation grading selectors unit tests', () => {
let show;
let criterionFeedback;
const selector = selectors.validation.criterionFeedbackIsInvalid;
const mockMethods = (showvalue, feedback) => {
selectors.validation.show = () => showvalue;
const mockMethods = (showValue, feedback) => {
selectors.validation.show = () => showValue;
selectors.validation.criterionFeedback = () => feedback;
};
beforeAll(() => {
@@ -160,8 +168,8 @@ describe('validation grading selectors unit tests', () => {
describe('validation.criterionSelectedOptionIsInvalid selector', () => {
const testState = { some: 'state' };
let show;
const mockMethods = (showvalue, selectedValue) => {
selectors.validation.show = () => showvalue;
const mockMethods = (showValue, selectedValue) => {
selectors.validation.show = () => showValue;
selectors.validation.criterionSelectedOption.mockReturnValueOnce(selectedValue);
};
const selector = selectors.validation.criterionSelectedOptionIsInvalid;

View File

@@ -72,7 +72,7 @@ describe('requests selectors unit tests', () => {
expect(select(selectors.errorCode, { error: { response: { data: testValue } } }))
.toEqual(testValue);
});
test('data reurns the request data', () => {
test('data returns the request data', () => {
expect(select(selectors.data, { data: testValue })).toEqual(testValue);
});
});

View File

@@ -29,9 +29,7 @@ export const listData = createSelector(
},
);
export const isEmptySubmissionData = createSelector(
[module.listData], (data) => data.length === 0,
);
export const isEmptySubmissionData = createSelector([module.listData], (data) => data.length === 0);
export default StrictDict({
...simpleSelectors,

View File

@@ -75,7 +75,7 @@ describe('submission selectors unit tests', () => {
);
});
});
test('returns gradingStatus as GradeStatus iff lockstatus is lock, else lockStatus', () => {
test('returns gradingStatus as GradeStatus iff lockStatus is lock, else lockStatus', () => {
expect(output[0].gradingStatus).toEqual(submissions[1].gradeStatus);
expect(output[1].gradingStatus).toEqual(submissions[2].lockStatus);
expect(output[2].gradingStatus).toEqual(submissions[0].lockStatus);

View File

@@ -1,5 +1,5 @@
import { StrictDict } from 'utils';
// eslint-disable-next-line import/no-cycle
import { selectors, actions } from 'data/redux';
import { locationId } from 'data/constants/app';
@@ -15,7 +15,7 @@ import * as module from './app';
*/
export const initialize = () => (dispatch) => {
dispatch(initializeApp({
locationId,
locationId: locationId(),
onSuccess: (response) => {
dispatch(actions.app.loadIsEnabled(response.isEnabled));
dispatch(actions.app.loadOraMetadata(response.oraMetadata));

View File

@@ -25,7 +25,7 @@ describe('app thunkActions', () => {
[[dispatchedAction]] = dispatch.mock.calls;
});
it('dispatches initializeApp with locationId and onSuccess', () => {
expect(dispatchedAction.initializeApp.locationId).toEqual(locationId);
expect(dispatchedAction.initializeApp.locationId).toEqual(locationId());
expect(typeof dispatchedAction.initializeApp.onSuccess).toEqual('function');
});
describe('on success', () => {

View File

@@ -2,6 +2,7 @@ import * as zip from '@zip.js/zip.js';
import FileSaver from 'file-saver';
import { RequestKeys } from 'data/constants/requests';
// eslint-disable-next-line import/no-cycle
import { selectors } from 'data/redux';
import { locationId } from 'data/constants/app';
import api from 'data/services/lms/api';
@@ -47,7 +48,7 @@ export const zipFiles = async (files, blobs, username) => {
}
const zipFile = await zipWriter.close();
const zipName = `${username}-${locationId}.zip`;
const zipName = `${username}-${locationId()}.zip`;
FileSaver.saveAs(zipFile, zipName);
};

View File

@@ -182,7 +182,7 @@ describe('download thunkActions', () => {
expect(download.zipFiles).toHaveBeenCalledWith(files, blobs, username);
});
it('network request catch all of the errors', () => {
const blobsErrors = ['arbitary', 'error'];
const blobsErrors = ['arbitrary', 'error'];
download.downloadBlobs = () => Promise.reject(blobsErrors);
download.downloadFiles()(dispatch, getState);

View File

@@ -1,5 +1,5 @@
import { StrictDict } from 'utils';
// eslint-disable-next-line import/no-cycle
import { actions, selectors } from 'data/redux';
import { RequestKeys, ErrorStatuses } from 'data/constants/requests';
@@ -60,7 +60,7 @@ export const loadSubmission = () => (dispatch, getState) => {
/**
* Start grading the current submission.
* Attempts to lock the submisison, and on a success, sets the local grading state to
* Attempts to lock the submission, and on a success, sets the local grading state to
* True, and then loads initializes the grading process with GradeData associated with
* the current submission. If there is no grade data, generates an empty grade entry
* based on the rubric config.
@@ -85,7 +85,7 @@ export const startGrading = () => (dispatch, getState) => {
};
/**
* Cancels the grading process for the current submisison.
* Cancels the grading process for the current submission.
* Releases the lock and dispatches stopGrading on success.
*/
export const cancelGrading = () => (dispatch, getState) => {

View File

@@ -24,7 +24,7 @@ jest.mock('data/redux/grading/selectors', () => ({
gradeData: jest.fn((state) => ({ gradeData: state })),
gradingData: jest.fn((state) => ({ gradingData: state })),
isGrading: jest.fn((state) => ({ isGrading: state })),
submissionUUID: jest.fn((state) => ({ selectedsubmissionUUID: state })),
submissionUUID: jest.fn((state) => ({ selectedSubmissionUUID: state })),
lockStatus: jest.fn((state) => ({ lockStatus: state })),
},
validation: {
@@ -62,7 +62,7 @@ describe('grading thunkActions', () => {
expect(actionArgs).not.toEqual(undefined);
});
describe('fetchSubmissionArgs', () => {
test('submissionUUID: selectors.grading.selected.submisssionUUID', () => {
test('submissionUUID: selectors.grading.selected.submissionUUID', () => {
expect(actionArgs.submissionUUID).toEqual(
selectedUUID,
);

View File

@@ -1,5 +1,5 @@
import { StrictDict } from 'utils';
// eslint-disable-next-line import/no-cycle
import app from './app';
import download from './download';
import grading from './grading';

View File

@@ -1,6 +1,7 @@
import { StrictDict } from 'utils';
import { RequestKeys } from 'data/constants/requests';
// eslint-disable-next-line import/no-cycle
import { actions } from 'data/redux';
import api from 'data/services/lms/api';
@@ -50,7 +51,7 @@ export const initializeApp = ({ locationId, ...rest }) => (dispatch) => {
/**
* Tracked fetchSubmissionStatus api method.
* Tracked to the `fetchSubmissinStatus` request key.
* Tracked to the `fetchSubmissionStatus` request key.
* @param {string} submissionUUID - target submission id
* @param {[func]} onSuccess - onSuccess method ((response) => { ... })
* @param {[func]} onFailure - onFailure method ((error) => { ... })

View File

@@ -81,7 +81,7 @@ describe('requests thunkActions module', () => {
[actions.requests.completeRequest({ requestKey, response: testData })],
]);
});
it('on failure disaptches completeRequest', async () => {
it('on failure dispatches completeRequest', async () => {
await requests.networkRequest({ requestKey, promise: Promise.reject(testData) })(dispatch);
expect(dispatch.mock.calls).toEqual([
[actions.requests.startRequest(requestKey)],

View File

@@ -32,15 +32,15 @@ import {
* }
*/
const initializeApp = () => get(
stringifyUrl(urls.oraInitializeUrl, {
[paramKeys.oraLocation]: locationId,
stringifyUrl(urls.oraInitializeUrl(), {
[paramKeys.oraLocation]: locationId(),
}),
).then(response => response.data);
/**
* get('/api/submission', { oraLocation, submissionUUID })
* @return {
* submision: {
* submission: {
* gradeData,
* gradeStatus,
* response: { files: [{}], text: <html> },
@@ -48,8 +48,8 @@ const initializeApp = () => get(
* }
*/
const fetchSubmission = (submissionUUID) => get(
stringifyUrl(urls.fetchSubmissionUrl, {
[paramKeys.oraLocation]: locationId,
stringifyUrl(urls.fetchSubmissionUrl(), {
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
}),
).then(response => response.data);
@@ -61,8 +61,8 @@ const fetchSubmission = (submissionUUID) => get(
* }
*/
const fetchSubmissionFiles = (submissionUUID) => get(
stringifyUrl(urls.fetchSubmissionFilesUrl, {
[paramKeys.oraLocation]: locationId,
stringifyUrl(urls.fetchSubmissionFilesUrl(), {
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
}),
).then(response => response.data);
@@ -78,8 +78,8 @@ const fetchSubmissionFiles = (submissionUUID) => get(
* }
*/
const fetchSubmissionStatus = (submissionUUID) => get(
stringifyUrl(urls.fetchSubmissionStatusUrl, {
[paramKeys.oraLocation]: locationId,
stringifyUrl(urls.fetchSubmissionStatusUrl(), {
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
}),
).then(response => response.data);
@@ -89,8 +89,8 @@ const fetchSubmissionStatus = (submissionUUID) => get(
* @param {string} submissionUUID
*/
const lockSubmission = (submissionUUID) => post(
stringifyUrl(urls.fetchSubmissionLockUrl, {
[paramKeys.oraLocation]: locationId,
stringifyUrl(urls.fetchSubmissionLockUrl(), {
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
}),
).then(response => response.data);
@@ -100,8 +100,8 @@ const lockSubmission = (submissionUUID) => post(
* @param {string} submissionUUID
*/
const unlockSubmission = (submissionUUID) => client().delete(
stringifyUrl(urls.fetchSubmissionLockUrl, {
[paramKeys.oraLocation]: locationId,
stringifyUrl(urls.fetchSubmissionLockUrl(), {
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
}),
).then(response => response.data);
@@ -112,8 +112,8 @@ const unlockSubmission = (submissionUUID) => client().delete(
*/
const batchUnlockSubmissions = (submissionUUIDs) => post(
stringifyUrl(
urls.batchUnlockSubmissionsUrl,
{ [paramKeys.oraLocation]: locationId },
urls.batchUnlockSubmissionsUrl(),
{ [paramKeys.oraLocation]: locationId() },
),
{ submissionUUIDs },
).then(response => response.data);
@@ -123,8 +123,8 @@ const batchUnlockSubmissions = (submissionUUIDs) => post(
* @param {object} gradeData - full grading submission data
*/
const updateGrade = (submissionUUID, gradeData) => post(
stringifyUrl(urls.updateSubmissionGradeUrl, {
[paramKeys.oraLocation]: locationId,
stringifyUrl(urls.updateSubmissionGradeUrl(), {
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
}),
gradeData,

View File

@@ -13,7 +13,7 @@ jest.mock('./utils', () => ({
}));
jest.mock('data/constants/app', () => ({
locationId: 'test-location-id',
locationId: () => 'test-location-id',
}));
const gradeData = 'test-grade-data';
@@ -37,10 +37,10 @@ const testAPI = ({
...otherExpected
},
}) => {
it(`returns ${method}(${urlKey}) with correct args and reoslves with response data`, () => (
it(`returns ${method}(${urlKey}) with correct args and resolves with response data`, () => (
promise.then((data) => {
expect(data[method]).toEqual({
url: stringifyUrl(urls[urlKey], urlParams),
url: stringifyUrl(urls[urlKey](), urlParams),
...otherExpected,
});
})
@@ -54,7 +54,7 @@ describe('lms service api methods', () => {
method: methodKeys.get,
expected: {
urlKey: urlKeys.oraInitializeUrl,
urlParams: { [paramKeys.oraLocation]: locationId },
urlParams: { [paramKeys.oraLocation]: locationId() },
},
});
});
@@ -65,7 +65,7 @@ describe('lms service api methods', () => {
expected: {
urlKey: urlKeys.fetchSubmissionUrl,
urlParams: {
[paramKeys.oraLocation]: locationId,
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
},
},
@@ -78,7 +78,7 @@ describe('lms service api methods', () => {
expected: {
urlKey: urlKeys.fetchSubmissionFilesUrl,
urlParams: {
[paramKeys.oraLocation]: locationId,
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
},
},
@@ -91,7 +91,7 @@ describe('lms service api methods', () => {
expected: {
urlKey: urlKeys.fetchSubmissionStatusUrl,
urlParams: {
[paramKeys.oraLocation]: locationId,
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
},
},
@@ -104,7 +104,7 @@ describe('lms service api methods', () => {
expected: {
urlKey: urlKeys.fetchSubmissionLockUrl,
urlParams: {
[paramKeys.oraLocation]: locationId,
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
},
},
@@ -117,7 +117,7 @@ describe('lms service api methods', () => {
expected: {
urlKey: urlKeys.fetchSubmissionLockUrl,
urlParams: {
[paramKeys.oraLocation]: locationId,
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
},
},
@@ -130,7 +130,7 @@ describe('lms service api methods', () => {
expected: {
urlKey: urlKeys.batchUnlockSubmissionsUrl,
urlParams: {
[paramKeys.oraLocation]: locationId,
[paramKeys.oraLocation]: locationId(),
},
data: { submissionUUIDs },
},
@@ -143,7 +143,7 @@ describe('lms service api methods', () => {
expected: {
urlKey: urlKeys.updateSubmissionGradeUrl,
urlParams: {
[paramKeys.oraLocation]: locationId,
[paramKeys.oraLocation]: locationId(),
[paramKeys.submissionUUID]: submissionUUID,
},
data: gradeData,

View File

@@ -1,20 +1,20 @@
import { StrictDict } from 'utils';
import { configuration } from 'config';
import { getConfig } from '@edx/frontend-platform';
const baseUrl = `${configuration.LMS_BASE_URL}`;
const baseUrl = () => getConfig().LMS_BASE_URL;
const api = `${baseUrl}/api/`;
const baseEsgUrl = `${api}ora_staff_grader/`;
const api = () => `${baseUrl()}/api/`;
const baseEsgUrl = () => `${api()}ora_staff_grader/`;
const oraInitializeUrl = `${baseEsgUrl}initialize`;
const fetchSubmissionUrl = `${baseEsgUrl}submission`;
const fetchSubmissionFilesUrl = `${baseEsgUrl}submission/files`;
const fetchSubmissionStatusUrl = `${baseEsgUrl}submission/status`;
const fetchSubmissionLockUrl = `${baseEsgUrl}submission/lock`;
const batchUnlockSubmissionsUrl = `${baseEsgUrl}submission/batch/unlock`;
const updateSubmissionGradeUrl = `${baseEsgUrl}submission/grade`;
const oraInitializeUrl = () => `${baseEsgUrl()}initialize`;
const fetchSubmissionUrl = () => `${baseEsgUrl()}submission`;
const fetchSubmissionFilesUrl = () => `${baseEsgUrl()}submission/files`;
const fetchSubmissionStatusUrl = () => `${baseEsgUrl()}submission/status`;
const fetchSubmissionLockUrl = () => `${baseEsgUrl()}submission/lock`;
const batchUnlockSubmissionsUrl = () => `${baseEsgUrl()}submission/batch/unlock`;
const updateSubmissionGradeUrl = () => `${baseEsgUrl()}submission/grade`;
const course = (courseId) => `${baseUrl}/courses/${courseId}`;
const course = (courseId) => `${baseUrl()}/courses/${courseId}`;
const openResponse = (courseId) => (
`${course(courseId)}/instructor#view-open_response_assessment`

View File

@@ -1,6 +1,6 @@
/**
* Simple selector factory.
* Takes a list of string keys, and returns a simple slector for each.
* Takes a list of string keys, and returns a simple selector for each.
*
* @function
* @param {Object|string[]} keys - If passed as object, Object.keys(keys) is used.

39
src/i18n/index.js Normal file
View File

@@ -0,0 +1,39 @@
import { messages as footerMessages } from '@edx/frontend-component-footer';
import { messages as headerMessages } from '@edx/frontend-component-header';
import { messages as paragonMessages } from '@edx/paragon';
import arMessages from './messages/ar.json';
import deDEMessages from './messages/de_DE.json';
import es419Messages from './messages/es_419.json';
import faIRMessages from './messages/fa_IR.json';
import frMessages from './messages/fr.json';
import frCAMessages from './messages/fr_CA.json';
import hiMessages from './messages/hi.json';
import itITMessages from './messages/it_IT.json';
import ptPTMessages from './messages/pt_PT.json';
import ruMessages from './messages/ru.json';
import ukMessages from './messages/uk.json';
import zhCNMessages from './messages/zh_CN.json';
// no need to import en messages-- they are in the defaultMessage field
const appMessages = {
ar: arMessages,
'de-de': deDEMessages,
'es-419': es419Messages,
'fa-ir': faIRMessages,
fr: frMessages,
'fr-ca': frCAMessages,
hi: hiMessages,
'it-it': itITMessages,
'pt-pt': ptPTMessages,
ru: ruMessages,
uk: ukMessages,
'zh-cn': zhCNMessages,
};
export default [
headerMessages,
footerMessages,
paragonMessages,
appMessages,
];

View File

@@ -1,14 +0,0 @@
import arMessages from './messages/ar.json';
// no need to import en messages-- they are in the defaultMessage field
import es419Messages from './messages/es_419.json';
import frMessages from './messages/fr.json';
import zhcnMessages from './messages/zh_CN.json';
const messages = {
ar: arMessages,
'es-419': es419Messages,
fr: frMessages,
'zh-cn': zhcnMessages,
};
export default messages;

View File

@@ -1,104 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "Grade submission is disabled in the Demo mode of the new ORA Staff Grader.",
"ora-grading.demoAlert.confirm": "Confirm",
"ora-grading.demoAlert.title": "Demo submit prevented",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "File Name",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "File Description",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "File Size",
"ora-grading.InfoPopover.fileInfo": "File info",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "Retry",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "File not found",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "Unknown errors",
"ora-grading.InfoPopover.alt-text": "Display more info",
"ora-grading.CriterionFeedback.addCommentsLabel": "Add comments",
"ora-grading.CriterionFeedback.commentsLabel": "Comments",
"ora-grading.CriterionFeedback.optional": "(Optional)",
"ora-grading.RadioCriterion.optionPoints": "{points} points",
"ora-grading.RadioCriterion.rubricSelectedError": "Rubric selection is required",
"ora-grading.CriterionFeedback.criterionFeedbackError": "The feedback is required",
"ora-grading.CTA.feedbackMessage": "Thanks for using the new ORA staff grading experience. ",
"ora-grading.CTA.linkMessage": "Provide some feedback",
"ora-grading.CTA.letUsKnowMessage": " and let us know what you think!",
"ora-grading.ReviewModal.demoHeading": "Demo Mode",
"ora-grading.ReviewModal.demoMessage": "You are demoing the new ORA staff grading experience. You will be unable to submit grades until you activate the feature. This will become the default grading experience on May 9th (05/09/2022). To opt-in early, or opt-out, please contact Partner Support.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "Back to all open responses",
"ora-grading.ListView.noResultsFoundTitle": "Nothing here yet",
"ora-grading.ListView.noResultsFoundBody": "When learners submit responses, they will appear here",
"ora-grading.ListView.viewAllResponses": "View all responses",
"ora-grading.ListView.viewSelectedResponses": "View selected responses ({value})",
"ora-grading.ListView.tableHeaders.username": "Username",
"ora-grading.ListView.tableHeaders.teamName": "Team name",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "Learner submission date",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "Team submission date",
"ora-grading.ListView.tableHeaders.grade": "Grade",
"ora-grading.ListView.tableHeaders.gradingStatus": "Grading status",
"ora-grading.ListView.loadErrorHeading": "Error loading submissions",
"ora-grading.ListView.loadErrorMessage1": "An error occurred while loading the submissions for this response. Try reloading the page or going {backToResponses}.",
"ora-grading.ListView.backToResponsesLowercase": "back to all Open Responses",
"ora-grading.ListView.reloadSubmissions": "Reload submissions",
"ora-grading.ListView.loadingResponses": "Loading responses",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "File Name",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "File Description",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "Name",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "File Extension",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "File Metadata",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "Download files",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "Downloading",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "Downloaded!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "Retry download",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "Submission Files",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "Exceeded the allow download size",
"ora-grading.ReviewActions.overrideConfirmTitle": "Are you sure you want to override this grade?",
"ora-grading.ReviewActions.overrideConfirmWarning": "This cannot be undone. The learner may have already received their grade.",
"ora-grading.ReviewActions.overrideConfirmContinue": "Continue grade override",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "Start grading",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "Override grade",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "Stop grading this response",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "Are you sure you want to stop grade override?",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "Are you sure you want to stop grading this response?",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "Your progress will be lost.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "Stop grade override",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "Cancel grading",
"ora-grading.ReviewActions.goBack": "Go back",
"ora-grading.ReviewActions.loadPrevious": "Load previous submission",
"ora-grading.ReviewActions.loadNext": "Load next submission",
"ora-grading.ReviewActions.navigationLabel": "{current} of {total}",
"ora-grading.ReviewActions.pointsDisplay": "Score: {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "Hide Rubric",
"ora-grading.ReviewActions.showRubric": "Show Rubric",
"ora-grading.ReviewModal.closeReviewConfirm.title": "Are you sure you want to close this modal?",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "This cannot be undone. This will discard unsaved work and stop this grading process.",
"ora-grading.ReviewModal.goBack": "Go back",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "Close Modal",
"ora-grading.ReviewModal.loadingResponse": "Loading response",
"ora-grading.ReviewModal.demoTitleMessage": "Grading Demo",
"ora-grading.ReviewModal.loadErrorHeading": "Error loading submissions",
"ora-grading.ReviewModal.loadErrorMessage1": "An error occurred while loading this submission. Try reloading this submission.",
"ora-grading.ReviewModal.reloadSubmission": "Reload submission",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "Grade not submitted",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "We're sorry, something went wrong when we tried to submit this grade. Please try again.",
"ora-grading.ReviewModal.resubmitGrade": "Resubmit grate",
"ora-grading.ReviewModal.dismiss": "Dismiss",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "Error submitting grade",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "It looks like someone else got here first! Your grade submission has been rejected",
"ora-grading.ReviewModal.errorLockContestedHeading": "The lock owned by another user",
"ora-grading.ReviewModal.errorLockContested": "The lock owned by another user",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Invalid request. Please check your input.",
"ora-grading.ReviewModal.errorLockBadRequest": "Invalid request. Please check your input.",
"ora-grading.ReviewModal.errorDownloadFailed": "Couldn't download files",
"ora-grading.ReviewModal.errorDownloadFailedContent": "We're sorry, something went wrong when we tried to download these files. Please try again.",
"ora-grading.ReviewModal.errorRetryDownload": "Retry download",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "Failed files:",
"ora-grading.Rubric.gradeSubmitted": "Grade Submitted",
"ora-grading.Rubric.rubric": "Rubric",
"ora-grading.Rubric.submitGrade": "Submit grade",
"ora-grading.Rubric.submittingGrade": "Submitting grade",
"ora-grading.Rubric.overallComments": "Overall comments",
"ora-grading.Rubric.addComments": "Add comments (Optional)",
"ora-grading.Rubric.comments": "Comments (Optional)",
"ora-grading.RubricFeedback.error": "The overall feedback is required",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "Ungraded",
"ora-grading.lms-api.gradingStatusDisplay.locked": "Currently being graded by someone else",
"ora-grading.lms-api.gradingStatusDisplay.graded": "Grading Completed",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "You are currently grading this response"
"ora-grading.demoAlert.warningMessage": "إرسال الدرجات معطّل في الوضع التجريبي لمصحح الإجابات المفتوحة الجديد ﻷعضاء الطاقم..",
"ora-grading.demoAlert.confirm": "تأكيد",
"ora-grading.demoAlert.title": "تم منع الإرسال التجريبي",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "اسم الملف",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "وصف الملف",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "حجم الملف",
"ora-grading.InfoPopover.fileInfo": "معلومات الملف",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "إعادة المحاولة",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "الملف غير موجود",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "أخطاء غير معروفة",
"PageTitle": "مصحح الإجابات المفتوحة ﻷعضاء الطاقم | {siteName}",
"ora-grading.InfoPopover.alt-text": "عرض مزيد من المعلومات",
"ora-grading.CriterionFeedback.addCommentsLabel": "إضافة تعليقات",
"ora-grading.CriterionFeedback.commentsLabel": "التعليقات",
"ora-grading.CriterionFeedback.optional": "(اختياري)",
"ora-grading.RadioCriterion.optionPoints": "{points} نقطة",
"ora-grading.RadioCriterion.rubricSelectedError": "اختيار سلم التنقيط",
"ora-grading.CriterionFeedback.criterionFeedbackError": "التعليق مطلوب",
"ora-grading.CTA.feedbackMessage": "نشكرك على استخدام التجربة الجديدة لتصحيح الإجابات المفتوحة ﻷعضاء الطاقم.",
"ora-grading.CTA.linkMessage": "قدّم بعض الملاحظات",
"ora-grading.CTA.letUsKnowMessage": " و دعنا نعرف رأيك!",
"ora-grading.ReviewModal.demoHeading": "الوضع التجريبي",
"ora-grading.ReviewModal.demoMessage": "أنت تستعرض التجربة الجديدة لتصحيح الإجابات المفتوحة ﻷعضاء الطاقم. لن تستطيع إرسال درجات حتى تقوم بتنشيط الميزة. ستصبح تجربة التصحيح هذه هي الافتراضية اعتبارًا من 9 مايو (05/09/2022). للاشتراك مبكرًا أو الانسحاب، يرجى الاتصال بدعم الشركاء.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "رجوع إلى جميع الإجابات المفتوحة",
"ora-grading.ListView.noResultsFoundTitle": "لا شيء هنا بعد",
"ora-grading.ListView.noResultsFoundBody": "ستظهر هنا إجابات المتعلمين غتدما يرسلونها",
"ora-grading.ListView.viewAllResponses": "عرض جميع الإجابات",
"ora-grading.ListView.viewSelectedResponses": "عرض الردود المحددة ({value})",
"ora-grading.ListView.tableHeaders.username": "اسم المستخدم",
"ora-grading.ListView.tableHeaders.teamName": "اسم الفريق",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "تاريخ إرسال المتعلّم",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "تاريخ إرسال الفريق",
"ora-grading.ListView.tableHeaders.grade": "الدرجة",
"ora-grading.ListView.tableHeaders.gradingStatus": "وضع الدرجات",
"ora-grading.ListView.loadErrorHeading": "خطأ أثناء تحميل الإجابات",
"ora-grading.ListView.loadErrorMessage1": "حدث خطأ أثناء تحميل عمليات الإرسال لهذه الاستجابة. حاول إعادة تحميل الصفحة أو الانتقال إلى {backToResponses}.",
"ora-grading.ListView.backToResponsesLowercase": "العودة إلى جميع الردود المفتوحة",
"ora-grading.ListView.reloadSubmissions": "إعادة تحميل الإجابات",
"ora-grading.ListView.loadingResponses": "تحميل الإرسالات",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "اسم الملف",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "وصف الملف",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "الاسم",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "نسق الملف",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "البيانات الوصفية للملف",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "تحميل الملفات",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "التحميل جارٍ",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "تم التحميل!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "تكرار محاولة التحميل",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "ملفات الإجابة",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "تم تجاوز حجم التحميلات المسموح به",
"ora-grading.ReviewActions.overrideConfirmTitle": "هل أنت من رغبتك في تبديل هذه الدرجة؟",
"ora-grading.ReviewActions.overrideConfirmWarning": "لا يمكن التراجع عن هذا. قد يكون المتعلم قد اطّلع على درجته.",
"ora-grading.ReviewActions.overrideConfirmContinue": "متابعة تبديل الدرجة",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "ابدأ التنقيط",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "تبديل الدرجة",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "التوقف عن تنقيط هذه الإجابة",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "هل أنت متأكد من رغبتك في العدول عن تبديل الدرجة؟",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "هل أنت متأكد من رغبتك في العدول عن تنقيط هذه الاستجابة؟",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "ستفقد تقدّمك.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "العدول عن تبديل الدرجة",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "إلغاء التنقيط",
"ora-grading.ReviewActions.goBack": "العودة إلى ما سبق",
"ora-grading.ReviewActions.loadPrevious": "تحميل الإرسال السابق",
"ora-grading.ReviewActions.loadNext": "تحميل الإرسال التالي",
"ora-grading.ReviewActions.navigationLabel": "{current} من {total}",
"ora-grading.ReviewActions.pointsDisplay": "النتيجة: {pointsEarned}\\{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "إخفاء سلم التنقيط",
"ora-grading.ReviewActions.showRubric": "إظهار سلم التنقيط",
"ora-grading.ReviewModal.closeReviewConfirm.title": "هل أنت متأكد من رغبتك في إغلاق هذا النموذج؟",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "لن تستطيع التراجع. سيؤدي هذا الإجراء إلى تجاهل ما لم تحفظه و إيقاف عملية التنقيط هذه.",
"ora-grading.ReviewModal.goBack": "العودة للخلف",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "إغلاق النافذة",
"ora-grading.ReviewModal.loadingResponse": "تحميل الإجابة جارٍ",
"ora-grading.ReviewModal.demoTitleMessage": "عرض الدرجات",
"ora-grading.ReviewModal.loadErrorHeading": "خطأ في تحميل عمليات الإرسال",
"ora-grading.ReviewModal.loadErrorMessage1": "حدث خطأ أثناء تحميل هذا الإرسال. حاول إعادة تحميل هذا الإرسال.",
"ora-grading.ReviewModal.reloadSubmission": "إعادة تحميل التقديم",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "لم يتم تقديم الدرجة",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "نأسف ، حدث خطأ ما عندما حاولنا إرسال هذه الدرجة. حاول مرة اخرى.",
"ora-grading.ReviewModal.resubmitGrade": "إعادة إرسال الدرجة",
"ora-grading.ReviewModal.dismiss": "تجاهل",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "خطأ في إرسال الدرجة",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "يبدو أن شخصًا آخر قد سبقك إلى هنا! تم رفض إرسال درجتك",
"ora-grading.ReviewModal.errorLockContestedHeading": "القفل بيد مستخدم آخر",
"ora-grading.ReviewModal.errorLockContested": "القفل بيد مستخدم آخر",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "الطلب غير صالح. تحقق من مدخلاتك رجاءً.",
"ora-grading.ReviewModal.errorLockBadRequest": "الطلب غير صالح. تحقق من مدخلاتك رجاءً.",
"ora-grading.ReviewModal.errorDownloadFailed": "تعذر تحميل الملفات",
"ora-grading.ReviewModal.errorDownloadFailedContent": "نحن آسفون، حدث خطأ ما حينما حاولنا تنزيل هذه الملفات. رجاءً حاول مجددًًا",
"ora-grading.ReviewModal.errorRetryDownload": "إعادة تجريب التحميل",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "الملفات الفاشلة:",
"ora-grading.Rubric.gradeSubmitted": "أرسلت الدرجة",
"ora-grading.Rubric.rubric": "سلم التنقيط",
"ora-grading.Rubric.submitGrade": "إرسال الدرجة",
"ora-grading.Rubric.submittingGrade": "إرسال الدرجة جارٍ",
"ora-grading.Rubric.overallComments": "مجمل التعليقات",
"ora-grading.Rubric.addComments": "إضافة تعليقات (اختياري)",
"ora-grading.Rubric.comments": "التعليقات (اختياري)",
"ora-grading.RubricFeedback.error": "التعليق العام مطلوب",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "غير منقّط",
"ora-grading.lms-api.gradingStatusDisplay.locked": "شخص آخر يقوم بتنقيطه حاليا",
"ora-grading.lms-api.gradingStatusDisplay.graded": "تم التنقيط",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "أنت تقوم حاليا بتنقيط هذه الإجابة"
}

View File

@@ -0,0 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "Bewertungen sind im Demomodus des neuen ORA Staff Grader deaktiviert.",
"ora-grading.demoAlert.confirm": "Bestätigen",
"ora-grading.demoAlert.title": "Demo-Übermittlung verhindert",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "Dateiname",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "Dateibeschreibung",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "Dateigröße",
"ora-grading.InfoPopover.fileInfo": "Dateiinformation",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "Wiederholen",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "Datei nicht gefunden",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "Unbekannte Fehler",
"PageTitle": "ORA-Personalbenotung | {siteName}",
"ora-grading.InfoPopover.alt-text": "Weitere Informationen anzeigen",
"ora-grading.CriterionFeedback.addCommentsLabel": "Kommentare hinzufügen",
"ora-grading.CriterionFeedback.commentsLabel": "Kommentare",
"ora-grading.CriterionFeedback.optional": "(Optional)",
"ora-grading.RadioCriterion.optionPoints": "{points} Punkte",
"ora-grading.RadioCriterion.rubricSelectedError": "Rubrikauswahl ist erforderlich",
"ora-grading.CriterionFeedback.criterionFeedbackError": "Das Feedback ist erforderlich",
"ora-grading.CTA.feedbackMessage": "Vielen Dank, dass Sie die neue ORA-Bewertungserfahrung für Mitarbeiter_innen nutzen.",
"ora-grading.CTA.linkMessage": "Geben Sie Feedback",
"ora-grading.CTA.letUsKnowMessage": "und teilen Sie uns Ihre Meinung mit!",
"ora-grading.ReviewModal.demoHeading": "Demo-Modus",
"ora-grading.ReviewModal.demoMessage": "Sie testen die neue ORA-Mitarbeiterbewertungserfahrung. Sie können keine Noten einreichen, bis Sie die Funktion aktiviert haben. Dies wird am 9. Mai (09.05.2022) zur standardmäßigen Benotungserfahrung. Um sich frühzeitig anzumelden oder abzumelden, wenden Sie sich bitte an den Partner-Support.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "Zurück zu allen offenen Antworten",
"ora-grading.ListView.noResultsFoundTitle": "Bisher keine Inhalte",
"ora-grading.ListView.noResultsFoundBody": "Wenn Lernende Antworten senden, werden sie hier angezeigt",
"ora-grading.ListView.viewAllResponses": "Alle Antworten anzeigen",
"ora-grading.ListView.viewSelectedResponses": "Ausgewählte Antworten anzeigen ({value})",
"ora-grading.ListView.tableHeaders.username": "Nutzername",
"ora-grading.ListView.tableHeaders.teamName": "Teamname",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "Abgabedatum des Teilnehmers",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "Abgabedatum des Teams",
"ora-grading.ListView.tableHeaders.grade": "Note",
"ora-grading.ListView.tableHeaders.gradingStatus": "Benotungsstatus",
"ora-grading.ListView.loadErrorHeading": "Fehler beim Laden der Einreichungen",
"ora-grading.ListView.loadErrorMessage1": "Beim Laden der Übermittlungen für diese Antwort ist ein Fehler aufgetreten. Versuchen Sie, die Seite neu zu laden oder {backToResponses} aufzurufen.",
"ora-grading.ListView.backToResponsesLowercase": "zurück zu allen offenen Antworten",
"ora-grading.ListView.reloadSubmissions": "Einreichungen neu laden",
"ora-grading.ListView.loadingResponses": "Antworten werden geladen",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "Dateiname",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "Dateibeschreibung",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "Name",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "Dateierweiterung",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "Datei-Metadaten",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "Dateien herunterladen",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "wird heruntergeladen",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "Heruntergeladen!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "Download neu versuchen",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "Einreichungsdateien",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "Zulässige Downloadgröße überschritten",
"ora-grading.ReviewActions.overrideConfirmTitle": "Möchten Sie diese Note wirklich überschreiben?",
"ora-grading.ReviewActions.overrideConfirmWarning": "Das kann nicht rückgängig gemacht werden. Der Lernende hat seine Note möglicherweise bereits erhalten.",
"ora-grading.ReviewActions.overrideConfirmContinue": "Gradüberschreibung fortsetzen",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "Beginnen Sie mit der Benotung",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "Benotung überschreiben",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "Bewerten Sie diese Antwort nicht mehr",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "Möchten Sie die Notenüberschreibung wirklich beenden?",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "Möchten Sie diese Antwort wirklich nicht mehr benoten?",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "Ihr Fortschritt geht verloren.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "Überschreibung stoppen",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "Benotung abbrechen",
"ora-grading.ReviewActions.goBack": "Gehe zurück",
"ora-grading.ReviewActions.loadPrevious": "Vorherige Übermittlung laden",
"ora-grading.ReviewActions.loadNext": "Nächste Einreichung laden",
"ora-grading.ReviewActions.navigationLabel": "{current} von {total}",
"ora-grading.ReviewActions.pointsDisplay": "Ergebnis: {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "Rubrik ausblenden",
"ora-grading.ReviewActions.showRubric": "Rubrik anzeigen",
"ora-grading.ReviewModal.closeReviewConfirm.title": "Möchten Sie dieses Modal wirklich schließen?",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "Das kann nicht rückgängig gemacht werden. Dadurch werden nicht gespeicherte Arbeiten verworfen und dieser Bewertungsprozess beendet.",
"ora-grading.ReviewModal.goBack": "zurück",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "Modal schließen",
"ora-grading.ReviewModal.loadingResponse": "Antwort wird geladen",
"ora-grading.ReviewModal.demoTitleMessage": "Benotungs-Demo",
"ora-grading.ReviewModal.loadErrorHeading": "Fehler beim Laden der Einreichungen",
"ora-grading.ReviewModal.loadErrorMessage1": "Beim Laden dieser Übermittlung ist ein Fehler aufgetreten. Versuchen Sie, diese Übermittlung erneut zu laden.",
"ora-grading.ReviewModal.reloadSubmission": "Einreichung neu laden",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "Note nicht übermittelt",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "Es tut uns leid, beim Versuch, diese Bewertung einzureichen, ist etwas schief gelaufen. Bitte versuche es erneut.",
"ora-grading.ReviewModal.resubmitGrade": "Benotung erneut einreichen",
"ora-grading.ReviewModal.dismiss": "Abgewiesen",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "Fehler beim Senden der Note",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "Es sieht so aus, als wäre jemand anderes zuerst hier gewesen! Ihre Notenübermittlung wurde abgelehnt",
"ora-grading.ReviewModal.errorLockContestedHeading": "Die Sperre, die einem anderen Benutzer gehört",
"ora-grading.ReviewModal.errorLockContested": "Die Sperre, die einem anderen Benutzer gehört",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Ungültige Anfrage. Bitte überprüfen Sie Ihre Eingabe.",
"ora-grading.ReviewModal.errorLockBadRequest": "Ungültige Anfrage. Bitte überprüfen Sie Ihre Eingabe.",
"ora-grading.ReviewModal.errorDownloadFailed": "Dateien konnten nicht heruntergeladen werden",
"ora-grading.ReviewModal.errorDownloadFailedContent": "Es tut uns leid, beim Versuch, diese Dateien herunterzuladen, ist etwas schief gelaufen. Bitte versuche es erneut.",
"ora-grading.ReviewModal.errorRetryDownload": "Download neu versuchen",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "Fehlerhafte Dateien:",
"ora-grading.Rubric.gradeSubmitted": "Note übermittelt",
"ora-grading.Rubric.rubric": "Rubrik",
"ora-grading.Rubric.submitGrade": "Note abgeben",
"ora-grading.Rubric.submittingGrade": "Note abgeben",
"ora-grading.Rubric.overallComments": "Allgemeine Kommentare",
"ora-grading.Rubric.addComments": "Kommentare hinzufügen (Optional)",
"ora-grading.Rubric.comments": "Kommentare (optional)",
"ora-grading.RubricFeedback.error": "Das gesamte Feedback ist erforderlich",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "Unbenotet",
"ora-grading.lms-api.gradingStatusDisplay.locked": "Wird gerade von jemand anderem benotet",
"ora-grading.lms-api.gradingStatusDisplay.graded": "Benotung abgeschlossen",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "Sie benoten diese Antwort derzeit"
}

View File

@@ -9,6 +9,7 @@
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "Reintentar",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "Archivo no encontrado",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "Errores desconocidos",
"PageTitle": "Clasificación del personal de ORA | {siteName}",
"ora-grading.InfoPopover.alt-text": "Mostrar más información",
"ora-grading.CriterionFeedback.addCommentsLabel": "Añadir comentarios",
"ora-grading.CriterionFeedback.commentsLabel": "Comentarios",

View File

@@ -0,0 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "ارسال نمره در حالت نمایشی از ORA Staff Grader جدید غیرفعال است.",
"ora-grading.demoAlert.confirm": "تایید",
"ora-grading.demoAlert.title": "از ارسال نسخه نمایشی ممانعت به عمل آمد",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "نام پرونده",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "توصیف پرونده",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "اندازه پرونده ",
"ora-grading.InfoPopover.fileInfo": "اطلاعات پرونده",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "تلاش دوباره",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "پرونده یافت نشد",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "خطاهای ناشناخته",
"PageTitle": "درجه بندی کارکنان ORA | {siteName}",
"ora-grading.InfoPopover.alt-text": "نمایش اطلاعات بیشتر",
"ora-grading.CriterionFeedback.addCommentsLabel": "نظردهی",
"ora-grading.CriterionFeedback.commentsLabel": "نظرات",
"ora-grading.CriterionFeedback.optional": "(اختیاری)",
"ora-grading.RadioCriterion.optionPoints": "{points} نمره",
"ora-grading.RadioCriterion.rubricSelectedError": "راهنمای امتیازدهی ضروری است",
"ora-grading.CriterionFeedback.criterionFeedbackError": "ارائه بازخورد ضروری است",
"ora-grading.CTA.feedbackMessage": "از اینکه از تجربه جدید درجه‌بندی کارکنان ORA استفاده می‌کنید تشکر می کنیم.",
"ora-grading.CTA.linkMessage": "ارائه بازخورد",
"ora-grading.CTA.letUsKnowMessage": "و به ما بگویید که نظر شما چیست!",
"ora-grading.ReviewModal.demoHeading": "حالت نسخه‌نمایشی",
"ora-grading.ReviewModal.demoMessage": "شما در حال نمایش تجربه جدید رتبه‌بندی کارکنان ORA هستید. تا زمانی که این ویژگی را فعال نکنید، امکان ارسال نمرات را نخواهید داشت. این مورد به تجربه رتبه‌بندی پیش‌فرض در 9 مه (2022/05/09) خواهد شد. برای انتخاب زودهنگام یا انصراف، لطفاً با پشتیبانی تماس بگیرید.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "بازگشت به همه پاسخ‌های باز",
"ora-grading.ListView.noResultsFoundTitle": "اینجا هنوز چیزی نیست",
"ora-grading.ListView.noResultsFoundBody": "هنگامی که افراد پاسخ‌ها را ارسال کنند، در اینجا ظاهر می‌شوند",
"ora-grading.ListView.viewAllResponses": "مشاهده همه پاسخ‌ها",
"ora-grading.ListView.viewSelectedResponses": "مشاهده همه پاسخ‌ها ({value})",
"ora-grading.ListView.tableHeaders.username": "نام‌کاربری",
"ora-grading.ListView.tableHeaders.teamName": "نام تیم",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "تاریخ ارسال یادگیرنده",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "تاریخ ارسال تیم",
"ora-grading.ListView.tableHeaders.grade": "نمره",
"ora-grading.ListView.tableHeaders.gradingStatus": "وضعیت نمره‌دهی",
"ora-grading.ListView.loadErrorHeading": "خطایی در هنگام بارگیری موارد ارسالی رخ داد",
"ora-grading.ListView.loadErrorMessage1": "هنگام بارگیری موارد ارسالی برای این پاسخ، خطایی روی داد. صفحه را دوباره بارگیری کنید یا به {backToResponses} بروید.",
"ora-grading.ListView.backToResponsesLowercase": "بازگشت به همه پاسخ‌های باز",
"ora-grading.ListView.reloadSubmissions": "بارگیری مجدد موارد ارسالی",
"ora-grading.ListView.loadingResponses": "بارگیری پاسخ‌ها",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "نام پرونده",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "توصیف پرونده",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "نام",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "پسوند پرونده",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "فراداده پرونده",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "پرونده‌های بارگیری‌شده",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "در حال بارگیری",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "بارگیری شد!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "تلاش دوباره برای بارگیری",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "پرونده‌های ارسالی",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "از اندازه مجاز بارگیری فراتر رفت",
"ora-grading.ReviewActions.overrideConfirmTitle": "آیا از لغو این نمره اطمینان دارید؟",
"ora-grading.ReviewActions.overrideConfirmWarning": "این عمل،قابل بازگشت نیست. ممکن است یادگیرنده پیش از این، نمره خود را دریافت کرده باشد.",
"ora-grading.ReviewActions.overrideConfirmContinue": "ادامه لغو نمره",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "آغاز نمره‎‌دهی",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "لغو نمره",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "توقف نمره‌دهی به این پاسخ",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "آیا از توقف لغو نمره اطمینان دارید؟",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "آیا از توقف نمره‌دهی این پاسخ اطمینان دارید؟",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "پیشرفت شما از بین خواهد رفت.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "توقف لغو نمره",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "لغو نمره‌دهی",
"ora-grading.ReviewActions.goBack": "بازگشت",
"ora-grading.ReviewActions.loadPrevious": "بارگیری ارسالی قبل",
"ora-grading.ReviewActions.loadNext": "بارگیری ارسالی بعد",
"ora-grading.ReviewActions.navigationLabel": "{current} از {total}",
"ora-grading.ReviewActions.pointsDisplay": "امتیاز: {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "پنهان‌سازی راهنمای امتیازدهی",
"ora-grading.ReviewActions.showRubric": "نمایش راهنمای امتیازدهی",
"ora-grading.ReviewModal.closeReviewConfirm.title": "از بستن این مودال اطمینان دارید؟",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "این کار، قابل بازگشت نیست. با این کار، فعالیت‌های ذخیره‌نشده کنار گذاشته می شوند و این روند رتبه‌بندی متوقف می‌شود.",
"ora-grading.ReviewModal.goBack": "بازگشت",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "بستن مودال",
"ora-grading.ReviewModal.loadingResponse": "بارگیری پاسخ",
"ora-grading.ReviewModal.demoTitleMessage": "نسخه‌نمایشی بارم‌بندی",
"ora-grading.ReviewModal.loadErrorHeading": "خطایی در هنگام بارگیری موارد ارسالی رخ داد",
"ora-grading.ReviewModal.loadErrorMessage1": "هنگام بارگیری این ارسال خطایی روی داد. دوباره ارسال کنید.",
"ora-grading.ReviewModal.reloadSubmission": "بارگیری مجدد ارسال",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "نمره ارسال نشد",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "متأسفیم، در هنگام تلاش برای ارسال این نمره، مشکلی پیش آمد. لطفا دوباره تلاش کنید.",
"ora-grading.ReviewModal.resubmitGrade": "نمره را دوباره ارسال کنید",
"ora-grading.ReviewModal.dismiss": "نادیده بگیر",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "خطایی در ارسال نمره رخ داد",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "به نظر می رسد اول شخص دیگری به اینجا رسیده است! نمره ارسالی شما رد شده‌است",
"ora-grading.ReviewModal.errorLockContestedHeading": "قفل متعلق به کاربر دیگری است",
"ora-grading.ReviewModal.errorLockContested": "قفل متعلق به کاربر دیگری است",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "درخواست معتبر نیست. لطفا ورودی خود را بررسی کنید.",
"ora-grading.ReviewModal.errorLockBadRequest": "درخواست معتبر نیست. لطفا ورودی خود را بررسی کنید.",
"ora-grading.ReviewModal.errorDownloadFailed": "امکان بارگیری پرونده‌ها وجود ندارد",
"ora-grading.ReviewModal.errorDownloadFailedContent": "متأسفیم، هنگام دانلود این پرونده‌ها مشکلی پیش آمد. لطفا دوباره تلاش کنید.",
"ora-grading.ReviewModal.errorRetryDownload": "تلاش دوباره برای بارگیری",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "پرونده‌های ناموفق:",
"ora-grading.Rubric.gradeSubmitted": "نمره ارائه شد",
"ora-grading.Rubric.rubric": "راهنمای امتیازدهی",
"ora-grading.Rubric.submitGrade": "ارائه نمره",
"ora-grading.Rubric.submittingGrade": "ارائه نمره",
"ora-grading.Rubric.overallComments": "نظرات کلی",
"ora-grading.Rubric.addComments": "افزودن نظر (اختیاری)",
"ora-grading.Rubric.comments": "نظرات (اختیاری)",
"ora-grading.RubricFeedback.error": "ارائه بازخورد کلی ضروری است",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "بدون نمره",
"ora-grading.lms-api.gradingStatusDisplay.locked": "اکنون به‌دست فرد دیگری نمره‌دهی می‌شود",
"ora-grading.lms-api.gradingStatusDisplay.graded": "نمره‌دهی تکمیل شد",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "شما در حال ارزیابی و نمره‌دهی این پاسخ هستید"
}

View File

@@ -9,7 +9,8 @@
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "Réessayez",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "Fichier introuvable",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "Erreurs inconnues",
"ora-grading.InfoPopover.alt-text": "Afficher plus d&#39;informations",
"PageTitle": "Notation ORA du personnel | {siteName}",
"ora-grading.InfoPopover.alt-text": "Afficher plus d'informations",
"ora-grading.CriterionFeedback.addCommentsLabel": "Ajoutez des commentaires",
"ora-grading.CriterionFeedback.commentsLabel": "Commentaires",
"ora-grading.CriterionFeedback.optional": "(Optionnel)",
@@ -20,20 +21,20 @@
"ora-grading.CTA.linkMessage": "Fournir des commentaires",
"ora-grading.CTA.letUsKnowMessage": "et dites-nous ce que vous en pensez !",
"ora-grading.ReviewModal.demoHeading": "Mode de démonstration",
"ora-grading.ReviewModal.demoMessage": "Vous présentez la nouvelle expérience de notation du personnel ORA. Vous ne pourrez pas soumettre de notes tant que vous n&#39;aurez pas activé la fonctionnalité. Cela deviendra l&#39;expérience de notation par défaut le 9 mai (05/09/2022). Pour vous inscrire plus tôt ou vous désinscrire, veuillez contacter l&#39;assistance aux partenaires.",
"ora-grading.ReviewModal.demoMessage": "Vous présentez la nouvelle expérience de notation du personnel ORA. Vous ne pourrez pas soumettre de notes tant que vous n'aurez pas activé la fonctionnalité. Cela deviendra l'expérience de notation par défaut le 9 mai (05/09/2022). Pour vous inscrire plus tôt ou vous désinscrire, veuillez contacter l'assistance aux partenaires.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "Retour à toutes les réponses ouvertes",
"ora-grading.ListView.noResultsFoundTitle": "Rien ici encore",
"ora-grading.ListView.noResultsFoundBody": "Lorsque les apprenants soumettront des réponses, elles apparaîtront ici",
"ora-grading.ListView.viewAllResponses": "Afficher toutes les réponses",
"ora-grading.ListView.viewSelectedResponses": "Afficher les réponses sélectionnées ({value})",
"ora-grading.ListView.tableHeaders.username": "Nom dutilisateur",
"ora-grading.ListView.tableHeaders.teamName": "Nom de l&#39;équipe",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "Date de soumission de l&#39;apprenant",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "Date de soumission de l&#39;équipe",
"ora-grading.ListView.tableHeaders.teamName": "Nom de l'équipe",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "Date de soumission de l'apprenant",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "Date de soumission de l'équipe",
"ora-grading.ListView.tableHeaders.grade": "Note",
"ora-grading.ListView.tableHeaders.gradingStatus": "Statut du classement",
"ora-grading.ListView.loadErrorHeading": "Erreur lors du chargement des soumissions",
"ora-grading.ListView.loadErrorMessage1": "Une erreur s&#39;est produite lors du chargement des soumissions pour cette réponse. Essayez de recharger la page ou d&#39;aller {backToResponses}.",
"ora-grading.ListView.loadErrorMessage1": "Une erreur s'est produite lors du chargement des soumissions pour cette réponse. Essayez de recharger la page ou d'aller {backToResponses}.",
"ora-grading.ListView.backToResponsesLowercase": "retour à toutes les réponses ouvertes",
"ora-grading.ListView.reloadSubmissions": "Recharger les soumissions",
"ora-grading.ListView.loadingResponses": "Chargement des réponses",
@@ -49,7 +50,7 @@
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "Fichiers de soumission",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "Dépassement de la taille de téléchargement autorisée",
"ora-grading.ReviewActions.overrideConfirmTitle": "Êtes-vous sûr de vouloir remplacer cette note ?",
"ora-grading.ReviewActions.overrideConfirmWarning": "Ça ne peut pas être annulé. L&#39;apprenant peut avoir déjà reçu sa note.",
"ora-grading.ReviewActions.overrideConfirmWarning": "Ça ne peut pas être annulé. L'apprenant peut avoir déjà reçu sa note.",
"ora-grading.ReviewActions.overrideConfirmContinue": "Continuer le remplacement de la note",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "Commencer la notation",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "Remplacer la note",
@@ -73,20 +74,20 @@
"ora-grading.ReviewModal.loadingResponse": "Chargement de la réponse",
"ora-grading.ReviewModal.demoTitleMessage": "Démonstration de correcteur",
"ora-grading.ReviewModal.loadErrorHeading": "Erreur lors du chargement des soumissions",
"ora-grading.ReviewModal.loadErrorMessage1": "Une erreur s&#39;est produite lors du chargement de cette soumission. Essayez de recharger cette soumission.",
"ora-grading.ReviewModal.loadErrorMessage1": "Une erreur s'est produite lors du chargement de cette soumission. Essayez de recharger cette soumission.",
"ora-grading.ReviewModal.reloadSubmission": "Recharger la soumission",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "Note non soumise",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "Nous sommes désolés, une erreur s&#39;est produite lorsque nous avons essayé d&#39;envoyer cette note. Veuillez réessayer.",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "Nous sommes désolés, une erreur s'est produite lorsque nous avons essayé d'envoyer cette note. Veuillez réessayer.",
"ora-grading.ReviewModal.resubmitGrade": "Resoumettre la grille",
"ora-grading.ReviewModal.dismiss": "Ignorer",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "Erreur lors de l&#39;envoi de la note",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "Il semble que quelqu&#39;un d&#39;autre soit arrivé le premier ! Votre soumission de note a été rejetée",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "Erreur lors de l'envoi de la note",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "Il semble que quelqu'un d'autre soit arrivé le premier ! Votre soumission de note a été rejetée",
"ora-grading.ReviewModal.errorLockContestedHeading": "La serrure appartenant à un autre utilisateur",
"ora-grading.ReviewModal.errorLockContested": "La serrure appartenant à un autre utilisateur",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Requête invalide. Veuillez vérifier votre entrée.",
"ora-grading.ReviewModal.errorLockBadRequest": "Requête invalide. Veuillez vérifier votre entrée.",
"ora-grading.ReviewModal.errorDownloadFailed": "Impossible de télécharger les fichiers",
"ora-grading.ReviewModal.errorDownloadFailedContent": "Nous sommes désolés, une erreur s&#39;est produite lorsque nous avons essayé de télécharger ces fichiers. Veuillez réessayer.",
"ora-grading.ReviewModal.errorDownloadFailedContent": "Nous sommes désolés, une erreur s'est produite lorsque nous avons essayé de télécharger ces fichiers. Veuillez réessayer.",
"ora-grading.ReviewModal.errorRetryDownload": "Réessayez le téléchargement",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "Fichiers ayant échoué :",
"ora-grading.Rubric.gradeSubmitted": "Note soumise",
@@ -98,7 +99,7 @@
"ora-grading.Rubric.comments": "Commentaires (optionnel)",
"ora-grading.RubricFeedback.error": "La rétroaction globale est requise",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "Non noté",
"ora-grading.lms-api.gradingStatusDisplay.locked": "Actuellement noté par quelqu&#39;un d&#39;autre",
"ora-grading.lms-api.gradingStatusDisplay.locked": "Actuellement noté par quelqu'un d'autre",
"ora-grading.lms-api.gradingStatusDisplay.graded": "Classement terminé",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "Vous notez actuellement cette réponse"
}

View File

@@ -0,0 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "La soumission des notes est désactivée dans le mode démonstration du nouveau correcteur ORA.",
"ora-grading.demoAlert.confirm": "Confirmer",
"ora-grading.demoAlert.title": "Soumission de démonstration empêchée",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "Nom du fichier",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "Description du fichier",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "Taille du fichier",
"ora-grading.InfoPopover.fileInfo": "Informations sur le fichier",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "Réessayez",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "Fichier introuvable",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "Erreurs inconnues",
"PageTitle": "Notation ORA du personnel | {siteName}",
"ora-grading.InfoPopover.alt-text": "Afficher plus d'informations",
"ora-grading.CriterionFeedback.addCommentsLabel": "Ajoutez des commentaires",
"ora-grading.CriterionFeedback.commentsLabel": "Commentaires",
"ora-grading.CriterionFeedback.optional": "(Optionnel)",
"ora-grading.RadioCriterion.optionPoints": "{points} points",
"ora-grading.RadioCriterion.rubricSelectedError": "La sélection de la rubrique est requise",
"ora-grading.CriterionFeedback.criterionFeedbackError": "La rétroaction est requise",
"ora-grading.CTA.feedbackMessage": "Merci d'avoir utilisé la nouvelle expérience de notation du personnel ORA.",
"ora-grading.CTA.linkMessage": "Fournir des commentaires",
"ora-grading.CTA.letUsKnowMessage": "et dites-nous ce que vous en pensez!",
"ora-grading.ReviewModal.demoHeading": "Mode de démonstration",
"ora-grading.ReviewModal.demoMessage": "Vous présentez la nouvelle expérience de notation du personnel ORA. Vous ne pourrez pas soumettre de notes tant que vous n'aurez pas activé la fonctionnalité. Cela deviendra l'expérience de notation par défaut le 9 mai (2022-05-09). Pour vous inscrire plus tôt ou vous désinscrire, veuillez contacter l'assistance aux partenaires.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "Retour à toutes les réponses ouvertes",
"ora-grading.ListView.noResultsFoundTitle": "Rien ici encore",
"ora-grading.ListView.noResultsFoundBody": "Lorsque les apprenants soumettront des réponses, elles apparaîtront ici",
"ora-grading.ListView.viewAllResponses": "Afficher toutes les réponses",
"ora-grading.ListView.viewSelectedResponses": "Afficher les réponses sélectionnées ({value})",
"ora-grading.ListView.tableHeaders.username": "Nom d'utilisateur",
"ora-grading.ListView.tableHeaders.teamName": "Nom de l'équipe",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "Date de soumission de l'apprenant",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "Date de soumission de l'équipe",
"ora-grading.ListView.tableHeaders.grade": "Note",
"ora-grading.ListView.tableHeaders.gradingStatus": "Statut de classement",
"ora-grading.ListView.loadErrorHeading": "Erreur lors du chargement des soumissions",
"ora-grading.ListView.loadErrorMessage1": "Une erreur s'est produite lors du chargement des soumissions pour cette réponse. Essayez de recharger la page ou de {backToResponses}.",
"ora-grading.ListView.backToResponsesLowercase": "retour à toutes les réponses ouvertes",
"ora-grading.ListView.reloadSubmissions": "Recharger les soumissions",
"ora-grading.ListView.loadingResponses": "Chargement des réponses",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "Nom du fichier",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "Description du fichier",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "Nom",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "Extension de fichier",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "Métadonnées de fichier",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "Télécharger des fichiers",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "Téléchargement",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "Téléchargé!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "Réessayez le téléchargement",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "Fichiers de soumission",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "Dépassement de la taille de téléchargement autorisée",
"ora-grading.ReviewActions.overrideConfirmTitle": "Êtes-vous sûr de vouloir remplacer cette note?",
"ora-grading.ReviewActions.overrideConfirmWarning": "Ça ne peut pas être annulé. L'apprenant peut avoir déjà reçu sa note.",
"ora-grading.ReviewActions.overrideConfirmContinue": "Continuer le remplacement de la note",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "Commencer la notation",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "Remplacer la note",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "Arrêter de noter cette réponse",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "Êtes-vous sûr de vouloir arrêter le remplacement des notes?",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "Voulez-vous vraiment arrêter de noter cette réponse?",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "Votre progression sera perdue.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "Arrêter le remplacement de note",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "Annuler la notation",
"ora-grading.ReviewActions.goBack": "Retour",
"ora-grading.ReviewActions.loadPrevious": "Charger la soumission précédente",
"ora-grading.ReviewActions.loadNext": "Charger la prochaine soumission",
"ora-grading.ReviewActions.navigationLabel": "{current} de {total}",
"ora-grading.ReviewActions.pointsDisplay": "Résultat : {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "Masquer la rubrique",
"ora-grading.ReviewActions.showRubric": "Afficher la rubrique",
"ora-grading.ReviewModal.closeReviewConfirm.title": "Voulez-vous vraiment fermer cette fenêtre modale?",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "Ça ne peut pas être annulé. Cela supprimera le travail non enregistré et arrêtera ce processus de notation.",
"ora-grading.ReviewModal.goBack": "Retour",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "Fermer la fenêtre modale",
"ora-grading.ReviewModal.loadingResponse": "Chargement de la réponse",
"ora-grading.ReviewModal.demoTitleMessage": "Démonstration de correcteur",
"ora-grading.ReviewModal.loadErrorHeading": "Erreur lors du chargement des soumissions",
"ora-grading.ReviewModal.loadErrorMessage1": "Une erreur s'est produite lors du chargement de cette soumission. Essayez de recharger cette soumission.",
"ora-grading.ReviewModal.reloadSubmission": "Recharger la soumission",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "Note non soumise",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "Nous sommes désolés, une erreur s'est produite lorsque nous avons essayé d'envoyer cette note. Veuillez réessayer.",
"ora-grading.ReviewModal.resubmitGrade": "Soumettre la grille de nouveau",
"ora-grading.ReviewModal.dismiss": "Rejeter",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "Erreur lors de la soumission de la note",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "Il semble que quelqu'un d'autre soit arrivé le premier! Votre soumission de note a été rejetée",
"ora-grading.ReviewModal.errorLockContestedHeading": "La serrure appartenant à un autre utilisateur",
"ora-grading.ReviewModal.errorLockContested": "La serrure appartenant à un autre utilisateur",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Demande invalide. Veuillez vérifier votre entrée.",
"ora-grading.ReviewModal.errorLockBadRequest": "Demande invalide. Veuillez vérifier votre entrée.",
"ora-grading.ReviewModal.errorDownloadFailed": "Impossible de télécharger les fichiers",
"ora-grading.ReviewModal.errorDownloadFailedContent": "Nous sommes désolés, une erreur s'est produite lorsque nous avons essayé de télécharger ces fichiers. Veuillez réessayer.",
"ora-grading.ReviewModal.errorRetryDownload": "Réessayez le téléchargement",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "Fichiers ayant échoué :",
"ora-grading.Rubric.gradeSubmitted": "Note soumise",
"ora-grading.Rubric.rubric": "Rubrique",
"ora-grading.Rubric.submitGrade": "Soumettre la note",
"ora-grading.Rubric.submittingGrade": "Remise de la note",
"ora-grading.Rubric.overallComments": "Commentaires généraux",
"ora-grading.Rubric.addComments": "Ajouter des commentaires (facultatif)",
"ora-grading.Rubric.comments": "Commentaires (optionnel)",
"ora-grading.RubricFeedback.error": "La rétroaction globale est requise",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "Non noté",
"ora-grading.lms-api.gradingStatusDisplay.locked": "Actuellement noté par quelqu'un d'autre",
"ora-grading.lms-api.gradingStatusDisplay.graded": "Classement terminé",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "Vous notez actuellement cette réponse"
}

105
src/i18n/messages/hi.json Normal file
View File

@@ -0,0 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "नए ORA स्टाफ़ ग्रेडर के डेमो मोड में ग्रेड सबमिशन अक्षम है।",
"ora-grading.demoAlert.confirm": "पुष्टि करें",
"ora-grading.demoAlert.title": "डेमो सबमिट रोका गया",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "फाईल का नाम",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "फ़ाइल विवरण",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "फ़ाइल का साइज़",
"ora-grading.InfoPopover.fileInfo": "फ़ाइल जानकारी",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "पुनः प्रयास करें",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "फ़ाइल नहीं मिली",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "अज्ञात त्रुटियाँ",
"PageTitle": "ORA कर्मचारी ग्रेडिंग | {siteName}",
"ora-grading.InfoPopover.alt-text": "अधिक जानकारी प्रदर्शित करें",
"ora-grading.CriterionFeedback.addCommentsLabel": "टिप्पणियाँ जोड़ें",
"ora-grading.CriterionFeedback.commentsLabel": "टिप्पणियाँ",
"ora-grading.CriterionFeedback.optional": "(वैकल्पिक)",
"ora-grading.RadioCriterion.optionPoints": "{points} अंक",
"ora-grading.RadioCriterion.rubricSelectedError": "रूब्रिक चयन आवश्यक है",
"ora-grading.CriterionFeedback.criterionFeedbackError": "प्रतिक्रिया आवश्यक है",
"ora-grading.CTA.feedbackMessage": "नए ORA स्टाफ़ ग्रेडिंग अनुभव का उपयोग करने के लिए धन्यवाद।",
"ora-grading.CTA.linkMessage": "कृपया कुछ प्रतिक्रिया दें",
"ora-grading.CTA.letUsKnowMessage": "और हमें बताएं कि आप क्या सोचते हैं!",
"ora-grading.ReviewModal.demoHeading": "डेमो मोड",
"ora-grading.ReviewModal.demoMessage": "आप नए ORA स्टाफ ग्रेडिंग अनुभव का प्रदर्शन कर रहे हैं। जब तक आप सुविधा सक्रिय नहीं करेंगे तब तक आप ग्रेड सबमिट करने में असमर्थ होंगे। यह 9 मई (05/09/2022) को डिफ़ॉल्ट ग्रेडिंग अनुभव बन जाएगा। जल्दी ऑप्ट-इन करने या ऑप्ट-आउट करने के लिए, कृपया पार्टनर सहायता से संपर्क करें।",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "सभी खुले प्रतिक्रियाओं पर वापस जाएं",
"ora-grading.ListView.noResultsFoundTitle": "अभी तक यहां कुछ भी नहीं है",
"ora-grading.ListView.noResultsFoundBody": "जब छात्र उत्तर सबमिट करते हैं, तो वे यहां दिखाई देंगे",
"ora-grading.ListView.viewAllResponses": "सभी प्रतिक्रियाएँ देखें",
"ora-grading.ListView.viewSelectedResponses": "चयनित प्रतिक्रियाओं को देखें ({value})",
"ora-grading.ListView.tableHeaders.username": "उपयोगकर्ता नाम",
"ora-grading.ListView.tableHeaders.teamName": "टीम नाम",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "शिक्षार्थी सबमिशन तिथि",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "टीम सबमिशन तिथि",
"ora-grading.ListView.tableHeaders.grade": "ग्रेड",
"ora-grading.ListView.tableHeaders.gradingStatus": "ग्रेडिंग स्थिति",
"ora-grading.ListView.loadErrorHeading": "सबमिशन लोड करने में त्रुटि",
"ora-grading.ListView.loadErrorMessage1": "इस प्रतिक्रिया के लिए सबमिशन लोड करते समय एक त्रुटि हुई। पृष्ठ को फिर से लोड करने या {backToResponses} जाने का प्रयास करें।",
"ora-grading.ListView.backToResponsesLowercase": "सभी खुले प्रतिक्रियाओं पर वापस जाएं",
"ora-grading.ListView.reloadSubmissions": "सबमिशन पुनः लोड करें",
"ora-grading.ListView.loadingResponses": "लोडिंग प्रतिक्रियाएँ",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "फाईल का नाम",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "फ़ाइल विवरण",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "नाम",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "फ़ाइल एक्सटेंशन",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "फ़ाइल मेटाडेटा",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "फ़ाइलें डाउनलोड करें",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "डाउनलोड कर रहा है",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "डाउनलोड किया गया!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "पुनः डाउनलोड करें",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "प्रस्तुति फ़ाइलें",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "अनुमति डाउनलोड आकार से अधिक हो गया",
"ora-grading.ReviewActions.overrideConfirmTitle": "क्या आप वाकई इस ग्रेड को ओवरराइड करना चाहते हैं?",
"ora-grading.ReviewActions.overrideConfirmWarning": "यह पूर्ववत नहीं किया जा सकता है। छात्र को शायद पहले से ही उनकी ग्रेड मिल चुकी हो सकती है।",
"ora-grading.ReviewActions.overrideConfirmContinue": "जारी रखें ग्रेड ओवरराइड",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "ग्रेडिंग शुरू करें",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "ग्रेड ओवरराइड",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "इस प्रतिक्रिया को ग्रेडिंग बंद करें",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "क्या आप वाकई ग्रेड ओवरराइड रोकना चाहते हैं?",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "क्या आप वाकई इस प्रतिक्रिया की ग्रेडिंग रोकना चाहते हैं?",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "आपकी प्रगति नष्ट हो जाएगी।",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "ग्रेड ओवरराइड रोकें",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "ग्रेडिंग रद्द करें",
"ora-grading.ReviewActions.goBack": "वापस जाओ",
"ora-grading.ReviewActions.loadPrevious": "पिछली सबमिशन लोड करें",
"ora-grading.ReviewActions.loadNext": "अगले सबमिशन लोड करें",
"ora-grading.ReviewActions.navigationLabel": "{current} का {total}",
"ora-grading.ReviewActions.pointsDisplay": "स्कोर: {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "छिपाएँ रूब्रिक",
"ora-grading.ReviewActions.showRubric": "शो रूब्रिक",
"ora-grading.ReviewModal.closeReviewConfirm.title": "क्या आप वाकई इस मोडल को बंद करना चाहते हैं?",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "यह पूर्ववत नहीं किया जा सकता है। यह बिना सेवा किए हुए काम को छोड़ देगा और इस ग्रेडिंग प्रक्रिया को रोक देगा।",
"ora-grading.ReviewModal.goBack": "वापस जाओ",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "बंद मोडल",
"ora-grading.ReviewModal.loadingResponse": "लोडिंग प्रतिक्रिया",
"ora-grading.ReviewModal.demoTitleMessage": "ग्रेडिंग डेमो",
"ora-grading.ReviewModal.loadErrorHeading": "सबमिशन लोड करने में त्रुटि",
"ora-grading.ReviewModal.loadErrorMessage1": "इस सबमिशन को लोड करते समय एक त्रुटि हुई। इस सबमिशन को पुनः लोड करने का प्रयास करें।",
"ora-grading.ReviewModal.reloadSubmission": "पुनः सबमिशन लोड करें",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "ग्रेड सबमिट नहीं किया गया",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "हमें माफ़ कीजिए, कुछ गड़बड़ हो गई जब हमने इस ग्रेड को सबमिट करने की कोशिश की। कृपया पुनः प्रयास करें।",
"ora-grading.ReviewModal.resubmitGrade": "ग्रेट पुनः सबमिट करें",
"ora-grading.ReviewModal.dismiss": "ख़ारिज करें",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "ग्रेड सबमिट करने में त्रुटि",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "ऐसा लगता है कि कोई और पहले यहां पहुंच गया है! आपकी ग्रेड सबमिशन को अस्वीकार कर दिया गया है",
"ora-grading.ReviewModal.errorLockContestedHeading": "लॉक किसी दूसरे उपयोगकर्ता के स्वामित्व में है",
"ora-grading.ReviewModal.errorLockContested": "लॉक किसी दूसरे उपयोगकर्ता के स्वामित्व में है",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "अमान्य अनुरोध। कृपया अपने इनपुट की जांच करें।",
"ora-grading.ReviewModal.errorLockBadRequest": "अमान्य अनुरोध। कृपया अपने इनपुट की जांच करें।",
"ora-grading.ReviewModal.errorDownloadFailed": "फ़ाइलें डाउनलोड नहीं हो सकीं",
"ora-grading.ReviewModal.errorDownloadFailedContent": "हमें माफ़ कीजिए, इन फ़ाइलों को डाउनलोड करने की कोशिश करते समय कुछ गड़बड़ हो गई। कृपया पुनः प्रयास करें।",
"ora-grading.ReviewModal.errorRetryDownload": "पुनः डाउनलोड करें",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "विफल फ़ाइलें:",
"ora-grading.Rubric.gradeSubmitted": "ग्रेड सबमिट किया गया",
"ora-grading.Rubric.rubric": "रूब्रिक",
"ora-grading.Rubric.submitGrade": "स्थानांतरण ग्रेड",
"ora-grading.Rubric.submittingGrade": "ग्रेड सबमिट करना",
"ora-grading.Rubric.overallComments": "समग्र टिप्पणियाँ",
"ora-grading.Rubric.addComments": "टिप्पणी जोड़ें (वैकल्पिक)",
"ora-grading.Rubric.comments": "टिप्पणियाँ (वैकल्पिक)",
"ora-grading.RubricFeedback.error": "समग्र प्रतिक्रिया आवश्यक है",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "ग्रेड नहीं किया गया",
"ora-grading.lms-api.gradingStatusDisplay.locked": "वर्तमान में किसी अन्य व्यक्ति द्वारा ग्रेडिंग की जा रही है",
"ora-grading.lms-api.gradingStatusDisplay.graded": "ग्रेडिंग पूर्ण हुई",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "आप वर्तमान में इस प्रतिक्रिया को ग्रेड कर रहे हैं"
}

View File

@@ -0,0 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "L&#39;invio del voto è disabilitato nella modalità Demo del nuovo ORA Staff Grader.",
"ora-grading.demoAlert.confirm": "Conferma",
"ora-grading.demoAlert.title": "Invio demo impedito",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "Nome File",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "descrizione del file",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "Dimensione del file",
"ora-grading.InfoPopover.fileInfo": "Informazioni sul file",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "Riprova",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "File non trovato",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "Errori sconosciuti",
"PageTitle": "Valutazione del personale ORA | {siteName}",
"ora-grading.InfoPopover.alt-text": "Visualizza più informazioni",
"ora-grading.CriterionFeedback.addCommentsLabel": "Aggiungi commenti",
"ora-grading.CriterionFeedback.commentsLabel": "Commenti",
"ora-grading.CriterionFeedback.optional": "(Facoltativo)",
"ora-grading.RadioCriterion.optionPoints": "{points} punti",
"ora-grading.RadioCriterion.rubricSelectedError": "È richiesta la selezione della rubrica",
"ora-grading.CriterionFeedback.criterionFeedbackError": "Il feedback è obbligatorio",
"ora-grading.CTA.feedbackMessage": "Grazie per aver utilizzato la nuova esperienza di valutazione del personale di ORA.",
"ora-grading.CTA.linkMessage": "Fornisci un feedback",
"ora-grading.CTA.letUsKnowMessage": "e ci faccia sapere cosa pensa!",
"ora-grading.ReviewModal.demoHeading": "Modalità demo",
"ora-grading.ReviewModal.demoMessage": "Stai dimostrando la nuova esperienza di valutazione del personale ORA. Non potrai inviare voti finché non attivi la funzione. Questa diventerà l&#39;esperienza di valutazione predefinita il 9 maggio (05/09/2022). Per aderire in anticipo o rinunciare, contatta l&#39;assistenza per i partner.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "Torna a tutte le risposte aperte",
"ora-grading.ListView.noResultsFoundTitle": "Ancora niente qui",
"ora-grading.ListView.noResultsFoundBody": "Quando gli studenti inviano le risposte, queste appariranno qui",
"ora-grading.ListView.viewAllResponses": "Visualizza tutte le risposte",
"ora-grading.ListView.viewSelectedResponses": "Visualizza le risposte selezionate ({value})",
"ora-grading.ListView.tableHeaders.username": "Nome utente",
"ora-grading.ListView.tableHeaders.teamName": "Nome della squadra",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "Data di presentazione dello studente",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "Data di presentazione della squadra",
"ora-grading.ListView.tableHeaders.grade": "Voto",
"ora-grading.ListView.tableHeaders.gradingStatus": "Stato di classificazione",
"ora-grading.ListView.loadErrorHeading": "Errore durante il caricamento degli invii",
"ora-grading.ListView.loadErrorMessage1": "Si è verificato un errore durante il caricamento degli invii per questa risposta. Prova a ricaricare la pagina o ad andare {backToResponses}.",
"ora-grading.ListView.backToResponsesLowercase": "torna a tutte le risposte aperte",
"ora-grading.ListView.reloadSubmissions": "Ricarica gli invii",
"ora-grading.ListView.loadingResponses": "Caricamento risposte",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "Nome File",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "descrizione del file",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "Nome",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "Estensione del file",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "File metadati",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "Scaricare files",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "Download",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "Scaricato!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "Riprova a scaricare",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "File di presentazione",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "Ha superato la dimensione consentita per il download",
"ora-grading.ReviewActions.overrideConfirmTitle": "Sei sicuro di voler ignorare questo voto?",
"ora-grading.ReviewActions.overrideConfirmWarning": "Questo non può essere annullato. Lo studente potrebbe aver già ricevuto il voto.",
"ora-grading.ReviewActions.overrideConfirmContinue": "Continua l&#39;override del grado",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "Inizia la valutazione",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "Sostituisci il voto",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "Smetti di classificare questa risposta",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "Sei sicuro di voler interrompere l&#39;override del voto?",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "Sei sicuro di voler interrompere la valutazione di questa risposta?",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "I tuoi progressi andranno persi.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "Interrompi l&#39;override del grado",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "Annulla valutazione",
"ora-grading.ReviewActions.goBack": "Vai indietro",
"ora-grading.ReviewActions.loadPrevious": "Carica invio precedente",
"ora-grading.ReviewActions.loadNext": "Carica invio successivo",
"ora-grading.ReviewActions.navigationLabel": "{current} di {total}",
"ora-grading.ReviewActions.pointsDisplay": "Punteggio: {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "Nascondi rubrica",
"ora-grading.ReviewActions.showRubric": "Mostra Rubrica",
"ora-grading.ReviewModal.closeReviewConfirm.title": "Sei sicuro di voler chiudere questo modale?",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "Questo non può essere annullato. Ciò eliminerà il lavoro non salvato e interromperà questo processo di valutazione.",
"ora-grading.ReviewModal.goBack": "Vai indietro",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "Chiudi modale",
"ora-grading.ReviewModal.loadingResponse": "Caricamento della risposta",
"ora-grading.ReviewModal.demoTitleMessage": "Dimostrazione di valutazione",
"ora-grading.ReviewModal.loadErrorHeading": "Errore durante il caricamento degli invii",
"ora-grading.ReviewModal.loadErrorMessage1": "Si è verificato un errore durante il caricamento di questo invio. Prova a ricaricare questo invio.",
"ora-grading.ReviewModal.reloadSubmission": "Ricarica invio",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "Voto non presentato",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "Siamo spiacenti, qualcosa è andato storto quando abbiamo provato a inviare questo voto. Per favore riprova.",
"ora-grading.ReviewModal.resubmitGrade": "Invia nuovamente la griglia",
"ora-grading.ReviewModal.dismiss": "Chiudi",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "Errore durante l&#39;invio del voto",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "Sembra che qualcun altro sia arrivato prima! Il tuo voto è stato respinto",
"ora-grading.ReviewModal.errorLockContestedHeading": "Il lucchetto di proprietà di un altro utente",
"ora-grading.ReviewModal.errorLockContested": "Il lucchetto di proprietà di un altro utente",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Richiesta non valida. Per favore controlla il tuo input.",
"ora-grading.ReviewModal.errorLockBadRequest": "Richiesta non valida. Per favore controlla il tuo input.",
"ora-grading.ReviewModal.errorDownloadFailed": "Impossibile scaricare i file",
"ora-grading.ReviewModal.errorDownloadFailedContent": "Siamo spiacenti, qualcosa è andato storto durante il download di questi file. Per favore riprova.",
"ora-grading.ReviewModal.errorRetryDownload": "Riprova a scaricare",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "File non riusciti:",
"ora-grading.Rubric.gradeSubmitted": "Grado inviato",
"ora-grading.Rubric.rubric": "Rubrica",
"ora-grading.Rubric.submitGrade": "Invia voto",
"ora-grading.Rubric.submittingGrade": "Invio del voto",
"ora-grading.Rubric.overallComments": "Commenti generali",
"ora-grading.Rubric.addComments": "Aggiungi commenti (facoltativo)",
"ora-grading.Rubric.comments": "Commenti (facoltativo)",
"ora-grading.RubricFeedback.error": "È richiesto il feedback complessivo",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "Senza voto",
"ora-grading.lms-api.gradingStatusDisplay.locked": "Attualmente viene valutato da qualcun altro",
"ora-grading.lms-api.gradingStatusDisplay.graded": "Classificazione completata",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "Stai attualmente valutando questa risposta"
}

View File

@@ -0,0 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "A submissão de classificações está desativada no modo Demonstração no novo ORA Staff Grader.",
"ora-grading.demoAlert.confirm": "Confirmar",
"ora-grading.demoAlert.title": "Submissão impedida no modo de Demonstração",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "Nome do ficheiro",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "Descrição do Ficheiro",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "Tamanho do Ficheiro",
"ora-grading.InfoPopover.fileInfo": "Informações do Ficheiro",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "Tentar novamente",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "Ficheiro não encontrado",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "Erros desconhecidos",
"PageTitle": "Classificação pela equipa no ORA {siteName}",
"ora-grading.InfoPopover.alt-text": "Mostrar mais informações",
"ora-grading.CriterionFeedback.addCommentsLabel": "Adicionar comentários",
"ora-grading.CriterionFeedback.commentsLabel": "Comentários",
"ora-grading.CriterionFeedback.optional": "(Opcional)",
"ora-grading.RadioCriterion.optionPoints": "{points} pontos",
"ora-grading.RadioCriterion.rubricSelectedError": "A seleção de rúbricas é necessária",
"ora-grading.CriterionFeedback.criterionFeedbackError": "O feedback é obrigatório",
"ora-grading.CTA.feedbackMessage": "Obrigado por utilizar a nova experiência de classificação pela equipa do ORA.",
"ora-grading.CTA.linkMessage": "Forneça algum tipo de feedback",
"ora-grading.CTA.letUsKnowMessage": "e deixe-nos a sua opinião!",
"ora-grading.ReviewModal.demoHeading": "Modo de Demonstração",
"ora-grading.ReviewModal.demoMessage": "Está a fazer uma demonstração da nova experiência de classificação de equipa do ORA. Não poderá submeter as classificações até ativar a funcionalidade. Esta tornar-se-á a experiência de classificação padrão a 9 de Maio (09/05/2022). Para optar por entrar mais cedo, ou optar por sair, contacte o Apoio ao Parceiro.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "Voltar a todas as respostas abertas",
"ora-grading.ListView.noResultsFoundTitle": "Ainda não há aqui nada",
"ora-grading.ListView.noResultsFoundBody": "Quando os estudantes submeterem as respostas, elas aparecerão aqui",
"ora-grading.ListView.viewAllResponses": "Ver todas as respostas",
"ora-grading.ListView.viewSelectedResponses": "Ver as respostas selecionadas ({value})",
"ora-grading.ListView.tableHeaders.username": "Nome de utilizador",
"ora-grading.ListView.tableHeaders.teamName": "Nome da equipa",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "Data de submissão do estudante",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "Data de submissão da equipa",
"ora-grading.ListView.tableHeaders.grade": "Classificação",
"ora-grading.ListView.tableHeaders.gradingStatus": "Estado de classificação",
"ora-grading.ListView.loadErrorHeading": "Erro ao carregar as submissões",
"ora-grading.ListView.loadErrorMessage1": "Ocorreu um erro ao carregar as submissões para esta resposta. Tente recarregar a página ou ir {backToResponses}.",
"ora-grading.ListView.backToResponsesLowercase": "voltar a todas as Respostas Abertas",
"ora-grading.ListView.reloadSubmissions": "Recarregar submissões",
"ora-grading.ListView.loadingResponses": "A carregar respostas",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "Nome do Ficheiro",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "Descrição do Ficheiro",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "Nome",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "Extensão do Ficheiro",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "Metadados do Ficheiro",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "Transferir ficheiros",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "A transferir",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "Transferido!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "Repetir a transferência",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "Submissão de Ficheiros",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "Excedeu o limite de tamanho de download",
"ora-grading.ReviewActions.overrideConfirmTitle": "Tem a certeza de que quer substituir esta classificação?",
"ora-grading.ReviewActions.overrideConfirmWarning": "Isto não pode ser desfeito. O estudante pode já ter recebido a sua classificação.",
"ora-grading.ReviewActions.overrideConfirmContinue": "Continuar a substituição da classificação",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "Iniciar a classificação",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "Substituir a classificação",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "Parar de classificar esta resposta",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "Tem a certeza de que quer parar a substituição da classificação?",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "Tem a certeza de que quer parar de classificar esta resposta?",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "O seu progresso será perdido.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "Parar a substituição da classificação",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "Cancelar a classificação",
"ora-grading.ReviewActions.goBack": "Voltar Atrás",
"ora-grading.ReviewActions.loadPrevious": "Carregar a submissão anterior",
"ora-grading.ReviewActions.loadNext": "Carregar a próxima submissão",
"ora-grading.ReviewActions.navigationLabel": "{current} de {total}",
"ora-grading.ReviewActions.pointsDisplay": "Pontuação: {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "Ocultar Rúbrica",
"ora-grading.ReviewActions.showRubric": "Mostrar Rúbrica",
"ora-grading.ReviewModal.closeReviewConfirm.title": "Tem a certeza de que quer fechar este modal?",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "Isto não pode ser desfeito. Isto irá desfazer o trabalho que não guardou e parar este processo de classificação.",
"ora-grading.ReviewModal.goBack": "Voltar atrás",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "Fechar Modal",
"ora-grading.ReviewModal.loadingResponse": "A carregar resposta",
"ora-grading.ReviewModal.demoTitleMessage": "Demonstração de Avaliação",
"ora-grading.ReviewModal.loadErrorHeading": "Erro ao carregar submissões",
"ora-grading.ReviewModal.loadErrorMessage1": "Ocorreu um erro ao carregar esta submissão. Tente recarregar esta submissão.",
"ora-grading.ReviewModal.reloadSubmission": "Recarregar a submissão",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "Classificação não submetida",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "Lamentamos, algo correu mal quando tentámos submeter esta classificação. Por favor, tente novamente.",
"ora-grading.ReviewModal.resubmitGrade": "Voltar a submeter a grelha",
"ora-grading.ReviewModal.dismiss": "Ignorar",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "Erro ao submeter classificação",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "Parece que outra pessoa chegou aqui primeiro! A sua submissão de classificações foi rejeitada",
"ora-grading.ReviewModal.errorLockContestedHeading": "O bloqueio pertencente a outro utilizador",
"ora-grading.ReviewModal.errorLockContested": "O bloqueio pertencente a outro utilizador",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Pedido inválido. Por favor, verifique a sua entrada.",
"ora-grading.ReviewModal.errorLockBadRequest": "Pedido inválido. Por favor, verifique a sua entrada.",
"ora-grading.ReviewModal.errorDownloadFailed": "Não foi possível transferir os ficheiros",
"ora-grading.ReviewModal.errorDownloadFailedContent": "Lamentamos, mas algo correu mal quando tentámos transferir estes ficheiros. Por favor, tente novamente.",
"ora-grading.ReviewModal.errorRetryDownload": "Repetir a transferência",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "Ficheiros com falhas:",
"ora-grading.Rubric.gradeSubmitted": "Classificação Submetida",
"ora-grading.Rubric.rubric": "Rúbrica",
"ora-grading.Rubric.submitGrade": "Submeter classificação",
"ora-grading.Rubric.submittingGrade": "A submeter classificação",
"ora-grading.Rubric.overallComments": "Comentários gerais",
"ora-grading.Rubric.addComments": "Adicionar comentários (Opcional)",
"ora-grading.Rubric.comments": "Comentários (Opcional)",
"ora-grading.RubricFeedback.error": "O comentário geral é obrigatório",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "Não classificado",
"ora-grading.lms-api.gradingStatusDisplay.locked": "A ser classificado por outra pessoa neste momento",
"ora-grading.lms-api.gradingStatusDisplay.graded": "Avaliação Concluída",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "Está a classificar esta resposta neste momento"
}

105
src/i18n/messages/ru.json Normal file
View File

@@ -0,0 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "",
"ora-grading.demoAlert.confirm": "Подтвердить",
"ora-grading.demoAlert.title": "",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "Название файла",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "",
"ora-grading.InfoPopover.fileInfo": "",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "",
"PageTitle": "",
"ora-grading.InfoPopover.alt-text": "",
"ora-grading.CriterionFeedback.addCommentsLabel": "",
"ora-grading.CriterionFeedback.commentsLabel": "",
"ora-grading.CriterionFeedback.optional": "(необязательно)",
"ora-grading.RadioCriterion.optionPoints": "",
"ora-grading.RadioCriterion.rubricSelectedError": "",
"ora-grading.CriterionFeedback.criterionFeedbackError": "",
"ora-grading.CTA.feedbackMessage": "",
"ora-grading.CTA.linkMessage": "",
"ora-grading.CTA.letUsKnowMessage": "",
"ora-grading.ReviewModal.demoHeading": "",
"ora-grading.ReviewModal.demoMessage": "",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "",
"ora-grading.ListView.noResultsFoundTitle": "",
"ora-grading.ListView.noResultsFoundBody": "",
"ora-grading.ListView.viewAllResponses": "",
"ora-grading.ListView.viewSelectedResponses": "",
"ora-grading.ListView.tableHeaders.username": "Имя пользователя",
"ora-grading.ListView.tableHeaders.teamName": "",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "",
"ora-grading.ListView.tableHeaders.grade": "Оценка",
"ora-grading.ListView.tableHeaders.gradingStatus": "",
"ora-grading.ListView.loadErrorHeading": "",
"ora-grading.ListView.loadErrorMessage1": "",
"ora-grading.ListView.backToResponsesLowercase": "",
"ora-grading.ListView.reloadSubmissions": "",
"ora-grading.ListView.loadingResponses": "",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "Название файла",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "Имя",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "",
"ora-grading.ReviewActions.overrideConfirmTitle": "",
"ora-grading.ReviewActions.overrideConfirmWarning": "",
"ora-grading.ReviewActions.overrideConfirmContinue": "",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "",
"ora-grading.ReviewActions.goBack": "Назад",
"ora-grading.ReviewActions.loadPrevious": "",
"ora-grading.ReviewActions.loadNext": "",
"ora-grading.ReviewActions.navigationLabel": "",
"ora-grading.ReviewActions.pointsDisplay": "",
"ora-grading.ReviewActions.hideRubric": "",
"ora-grading.ReviewActions.showRubric": "",
"ora-grading.ReviewModal.closeReviewConfirm.title": "",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "",
"ora-grading.ReviewModal.goBack": "Назад",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "",
"ora-grading.ReviewModal.loadingResponse": "",
"ora-grading.ReviewModal.demoTitleMessage": "",
"ora-grading.ReviewModal.loadErrorHeading": "",
"ora-grading.ReviewModal.loadErrorMessage1": "",
"ora-grading.ReviewModal.reloadSubmission": "",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "",
"ora-grading.ReviewModal.resubmitGrade": "",
"ora-grading.ReviewModal.dismiss": "Скрыть",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "",
"ora-grading.ReviewModal.errorLockContestedHeading": "",
"ora-grading.ReviewModal.errorLockContested": "",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "",
"ora-grading.ReviewModal.errorLockBadRequest": "",
"ora-grading.ReviewModal.errorDownloadFailed": "",
"ora-grading.ReviewModal.errorDownloadFailedContent": "",
"ora-grading.ReviewModal.errorRetryDownload": "",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "",
"ora-grading.Rubric.gradeSubmitted": "",
"ora-grading.Rubric.rubric": "",
"ora-grading.Rubric.submitGrade": "",
"ora-grading.Rubric.submittingGrade": "",
"ora-grading.Rubric.overallComments": "",
"ora-grading.Rubric.addComments": "",
"ora-grading.Rubric.comments": "",
"ora-grading.RubricFeedback.error": "",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "Не оценивается",
"ora-grading.lms-api.gradingStatusDisplay.locked": "",
"ora-grading.lms-api.gradingStatusDisplay.graded": "",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": ""
}

105
src/i18n/messages/uk.json Normal file
View File

@@ -0,0 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "Подання оцінок вимкнено в демонстраційному режимі нового ORA Staff Grader.",
"ora-grading.demoAlert.confirm": "Підтвердити",
"ora-grading.demoAlert.title": "Демо-подання заборонено",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "Ім'я файлу",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "Опис файлу",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "Розмір файлу",
"ora-grading.InfoPopover.fileInfo": "Інформація щодо файлу",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "Повторити",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "Файл не знайдено",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "Невідомі помилки",
"PageTitle": "Оцінювання персоналом ORA | {siteName}",
"ora-grading.InfoPopover.alt-text": "Показати більше інформації",
"ora-grading.CriterionFeedback.addCommentsLabel": "Додати коментарі",
"ora-grading.CriterionFeedback.commentsLabel": "Коментарі",
"ora-grading.CriterionFeedback.optional": "(необов'язково)",
"ora-grading.RadioCriterion.optionPoints": "{points} балів",
"ora-grading.RadioCriterion.rubricSelectedError": "Потрібно вибрати рубрику",
"ora-grading.CriterionFeedback.criterionFeedbackError": "Зворотній зв’язок є обов’язковим",
"ora-grading.CTA.feedbackMessage": "Дякуємо за використання нового інтерфейсу оцінювання персоналом ORA.",
"ora-grading.CTA.linkMessage": "Надайте зворотній зв’язок",
"ora-grading.CTA.letUsKnowMessage": "та дайте знати, що Ви про це думаєте!",
"ora-grading.ReviewModal.demoHeading": "Демо режим",
"ora-grading.ReviewModal.demoMessage": "Ви переглядаєте новий досвід оцінювання персоналом ORA. Ви не зможете виставляти оцінки, доки не активуєте цю функцію. 9 травня (09.05.2022) це стане стандартною системою оцінювання. Щоб зареєструватися раніше або відмовитися від участі, зверніться до служби підтримки партнерів.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "Назад до всіх відкритих відповідей.",
"ora-grading.ListView.noResultsFoundTitle": "Тут поки нічого немає",
"ora-grading.ListView.noResultsFoundBody": "Коли слухачі надішлють відповіді, вони з’являться тут",
"ora-grading.ListView.viewAllResponses": "Переглянути всі відповіді",
"ora-grading.ListView.viewSelectedResponses": "Переглянути обрані відповіді ({value})",
"ora-grading.ListView.tableHeaders.username": "Ім'я користувача",
"ora-grading.ListView.tableHeaders.teamName": "Назва команди",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "Дата подання від слухача",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "Дата подання від команди",
"ora-grading.ListView.tableHeaders.grade": "Оцінка",
"ora-grading.ListView.tableHeaders.gradingStatus": "Статус оцінювання",
"ora-grading.ListView.loadErrorHeading": "Помилка при завантаженні подання",
"ora-grading.ListView.loadErrorMessage1": "Під час завантаження матеріалів цього подання сталася помилка. Спробуйте оновити сторінку або перейти до {backToResponses}.",
"ora-grading.ListView.backToResponsesLowercase": "Назад до всіх відкритих відповідей",
"ora-grading.ListView.reloadSubmissions": "Перезавантажити подання",
"ora-grading.ListView.loadingResponses": "Завантаження відповідей",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "Ім'я файлу",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "Опис файлу",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "Ім'я ",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "Розширення файлу",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "Метадані файлу",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "Завантажити файли",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "Завантаження",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "Завантажено!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "Повторити завантаження",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "Файли подання",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "Перевищено дозволений розмір завантаження",
"ora-grading.ReviewActions.overrideConfirmTitle": "Ви впевнені, що бажаєте змінити цю оцінку?",
"ora-grading.ReviewActions.overrideConfirmWarning": "Це не може бути скасовано. Можливо, слухач уже отримав свою оцінку.",
"ora-grading.ReviewActions.overrideConfirmContinue": "Продовжити зміну оцінки",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "Почати оціювання",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "Змінити оцінку",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "Зупинити поточне оцінювання",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "Ви впевнені, що бажаєте зупинити зміну оцінки?",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "Ви впевнені, що хочете припинити оцінювання цієї відповіді?",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "Ваш прогрес буде втрачено.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "Зупинити зміну оцінки",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "Відмінити оцінювання",
"ora-grading.ReviewActions.goBack": "Повернутись",
"ora-grading.ReviewActions.loadPrevious": "Завантажити попереднє подання",
"ora-grading.ReviewActions.loadNext": "Завантажити наступне подання",
"ora-grading.ReviewActions.navigationLabel": "{current} з {total}",
"ora-grading.ReviewActions.pointsDisplay": "Отримано балів: {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "Приховати рубрику",
"ora-grading.ReviewActions.showRubric": "Показати рубрику",
"ora-grading.ReviewModal.closeReviewConfirm.title": "Ви впевнені, що бажаєте закрити цю форму?",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "Дію не можна скасувати Це призведе до втрати незбереженої роботи і припинить процес оцінювання.",
"ora-grading.ReviewModal.goBack": "Повернутись",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "Закрити форму",
"ora-grading.ReviewModal.loadingResponse": "Завантаження відповіді",
"ora-grading.ReviewModal.demoTitleMessage": "Демо оцінювання",
"ora-grading.ReviewModal.loadErrorHeading": "Помилка при завантаженні подання",
"ora-grading.ReviewModal.loadErrorMessage1": "Під час завантаження цього подання сталася помилка. Спробуйте оновити це подання.",
"ora-grading.ReviewModal.reloadSubmission": "Оновити подання.",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "Оцінка не виставлена",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "На жаль, під час спроби збереження цієї оцінки сталася помилка. Будь ласка, спробуйте ще раз.",
"ora-grading.ReviewModal.resubmitGrade": "Повторно зберегти оцінку",
"ora-grading.ReviewModal.dismiss": "Відхилити",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "Помилка при збереженні оцінки",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "Схоже, хтось інший встиг першим! Вашу оцінку відхилено",
"ora-grading.ReviewModal.errorLockContestedHeading": "Вже заблоковано іншим користувачем",
"ora-grading.ReviewModal.errorLockContested": "Вже заблоковано іншим користувачем",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Невірний запит. Перевірте введені дані.",
"ora-grading.ReviewModal.errorLockBadRequest": "Невірний запит. Перевірте введені дані.",
"ora-grading.ReviewModal.errorDownloadFailed": "Помилка при спробі завантажити файли",
"ora-grading.ReviewModal.errorDownloadFailedContent": "На жаль, під час спроби завантажити ці файли сталася помилка. Будь ласка, спробуйте ще раз.",
"ora-grading.ReviewModal.errorRetryDownload": "Повторити завантаження",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "Файли, які не вдалось завантажити:",
"ora-grading.Rubric.gradeSubmitted": "Оцінка збережена",
"ora-grading.Rubric.rubric": "Рубрика",
"ora-grading.Rubric.submitGrade": "Зберегти оцінку",
"ora-grading.Rubric.submittingGrade": "Збереження оцінки",
"ora-grading.Rubric.overallComments": "Загальні коментарі",
"ora-grading.Rubric.addComments": "Додати коментарі (необов’язково)",
"ora-grading.Rubric.comments": "Коментарі (необов’язково)",
"ora-grading.RubricFeedback.error": "Потрібен узагальнений відгук",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "Без оцінювання",
"ora-grading.lms-api.gradingStatusDisplay.locked": "Наразі оцінюється іншим користувачем",
"ora-grading.lms-api.gradingStatusDisplay.graded": "Оцінювання завершено",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "Наразі Ви оцінюєте цю відповідь"
}

View File

@@ -1,104 +1,105 @@
{
"ora-grading.demoAlert.warningMessage": "Grade submission is disabled in the Demo mode of the new ORA Staff Grader.",
"ora-grading.demoAlert.confirm": "Confirm",
"ora-grading.demoAlert.title": "Demo submit prevented",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "File Name",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "File Description",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "File Size",
"ora-grading.InfoPopover.fileInfo": "File info",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "Retry",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "File not found",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "Unknown errors",
"ora-grading.InfoPopover.alt-text": "Display more info",
"ora-grading.CriterionFeedback.addCommentsLabel": "Add comments",
"ora-grading.CriterionFeedback.commentsLabel": "Comments",
"ora-grading.CriterionFeedback.optional": "(Optional)",
"ora-grading.RadioCriterion.optionPoints": "{points} points",
"ora-grading.RadioCriterion.rubricSelectedError": "Rubric selection is required",
"ora-grading.CriterionFeedback.criterionFeedbackError": "The feedback is required",
"ora-grading.CTA.feedbackMessage": "Thanks for using the new ORA staff grading experience. ",
"ora-grading.CTA.linkMessage": "Provide some feedback",
"ora-grading.CTA.letUsKnowMessage": " and let us know what you think!",
"ora-grading.ReviewModal.demoHeading": "Demo Mode",
"ora-grading.ReviewModal.demoMessage": "You are demoing the new ORA staff grading experience. You will be unable to submit grades until you activate the feature. This will become the default grading experience on May 9th (05/09/2022). To opt-in early, or opt-out, please contact Partner Support.",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "Back to all open responses",
"ora-grading.ListView.noResultsFoundTitle": "Nothing here yet",
"ora-grading.ListView.noResultsFoundBody": "When learners submit responses, they will appear here",
"ora-grading.ListView.viewAllResponses": "View all responses",
"ora-grading.ListView.viewSelectedResponses": "View selected responses ({value})",
"ora-grading.ListView.tableHeaders.username": "Username",
"ora-grading.ListView.tableHeaders.teamName": "Team name",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "Learner submission date",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "Team submission date",
"ora-grading.ListView.tableHeaders.grade": "Grade",
"ora-grading.ListView.tableHeaders.gradingStatus": "Grading status",
"ora-grading.ListView.loadErrorHeading": "Error loading submissions",
"ora-grading.ListView.loadErrorMessage1": "An error occurred while loading the submissions for this response. Try reloading the page or going {backToResponses}.",
"ora-grading.ListView.backToResponsesLowercase": "back to all Open Responses",
"ora-grading.ListView.reloadSubmissions": "Reload submissions",
"ora-grading.ListView.loadingResponses": "Loading responses",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "File Name",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "File Description",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "Name",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "File Extension",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "File Metadata",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "Download files",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "Downloading",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "Downloaded!",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "Retry download",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "Submission Files",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "Exceeded the allow download size",
"ora-grading.ReviewActions.overrideConfirmTitle": "Are you sure you want to override this grade?",
"ora-grading.ReviewActions.overrideConfirmWarning": "This cannot be undone. The learner may have already received their grade.",
"ora-grading.ReviewActions.overrideConfirmContinue": "Continue grade override",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "Start grading",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "Override grade",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "Stop grading this response",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "Are you sure you want to stop grade override?",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "Are you sure you want to stop grading this response?",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "Your progress will be lost.",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "Stop grade override",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "Cancel grading",
"ora-grading.ReviewActions.goBack": "Go back",
"ora-grading.ReviewActions.loadPrevious": "Load previous submission",
"ora-grading.ReviewActions.loadNext": "Load next submission",
"ora-grading.ReviewActions.navigationLabel": "{current} of {total}",
"ora-grading.ReviewActions.pointsDisplay": "Score: {pointsEarned}/{pointsPossible}",
"ora-grading.ReviewActions.hideRubric": "Hide Rubric",
"ora-grading.ReviewActions.showRubric": "Show Rubric",
"ora-grading.ReviewModal.closeReviewConfirm.title": "Are you sure you want to close this modal?",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "This cannot be undone. This will discard unsaved work and stop this grading process.",
"ora-grading.ReviewModal.goBack": "Go back",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "Close Modal",
"ora-grading.ReviewModal.loadingResponse": "Loading response",
"ora-grading.ReviewModal.demoTitleMessage": "Grading Demo",
"ora-grading.ReviewModal.loadErrorHeading": "Error loading submissions",
"ora-grading.ReviewModal.loadErrorMessage1": "An error occurred while loading this submission. Try reloading this submission.",
"ora-grading.ReviewModal.reloadSubmission": "Reload submission",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "Grade not submitted",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "We're sorry, something went wrong when we tried to submit this grade. Please try again.",
"ora-grading.ReviewModal.resubmitGrade": "Resubmit grate",
"ora-grading.ReviewModal.dismiss": "Dismiss",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "Error submitting grade",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "It looks like someone else got here first! Your grade submission has been rejected",
"ora-grading.ReviewModal.errorLockContestedHeading": "The lock owned by another user",
"ora-grading.ReviewModal.errorLockContested": "The lock owned by another user",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "Invalid request. Please check your input.",
"ora-grading.ReviewModal.errorLockBadRequest": "Invalid request. Please check your input.",
"ora-grading.ReviewModal.errorDownloadFailed": "Couldn't download files",
"ora-grading.ReviewModal.errorDownloadFailedContent": "We're sorry, something went wrong when we tried to download these files. Please try again.",
"ora-grading.ReviewModal.errorRetryDownload": "Retry download",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "Failed files:",
"ora-grading.Rubric.gradeSubmitted": "Grade Submitted",
"ora-grading.Rubric.rubric": "Rubric",
"ora-grading.Rubric.submitGrade": "Submit grade",
"ora-grading.Rubric.submittingGrade": "Submitting grade",
"ora-grading.Rubric.overallComments": "Overall comments",
"ora-grading.Rubric.addComments": "Add comments (Optional)",
"ora-grading.Rubric.comments": "Comments (Optional)",
"ora-grading.RubricFeedback.error": "The overall feedback is required",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "Ungraded",
"ora-grading.lms-api.gradingStatusDisplay.locked": "Currently being graded by someone else",
"ora-grading.lms-api.gradingStatusDisplay.graded": "Grading Completed",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": "You are currently grading this response"
"ora-grading.demoAlert.warningMessage": "",
"ora-grading.demoAlert.confirm": "确认",
"ora-grading.demoAlert.title": "",
"ora-grading.FilePopoverContent.filePopoverNameTitle": "文件名",
"ora-grading.FilePopoverCellContent.filePopoverDescriptionTitle": "",
"ora-grading.FilePopoverCellContent.fileSizeTitle": "",
"ora-grading.InfoPopover.fileInfo": "",
"ora-grading.ResponseDisplay.FileRenderer.retryButton": "重试",
"ora-grading.ResponseDisplay.FileRenderer.fileNotFound": "",
"ora-grading.ResponseDisplay.FileRenderer.unknownError": "",
"PageTitle": "",
"ora-grading.InfoPopover.alt-text": "",
"ora-grading.CriterionFeedback.addCommentsLabel": "",
"ora-grading.CriterionFeedback.commentsLabel": "",
"ora-grading.CriterionFeedback.optional": "(非必填)",
"ora-grading.RadioCriterion.optionPoints": "",
"ora-grading.RadioCriterion.rubricSelectedError": "",
"ora-grading.CriterionFeedback.criterionFeedbackError": "",
"ora-grading.CTA.feedbackMessage": "",
"ora-grading.CTA.linkMessage": "",
"ora-grading.CTA.letUsKnowMessage": "",
"ora-grading.ReviewModal.demoHeading": "",
"ora-grading.ReviewModal.demoMessage": "",
"ora-grading.ListView.ListViewBreadcrumbs.backToResponses": "",
"ora-grading.ListView.noResultsFoundTitle": "目前什么都没有",
"ora-grading.ListView.noResultsFoundBody": "",
"ora-grading.ListView.viewAllResponses": "",
"ora-grading.ListView.viewSelectedResponses": "",
"ora-grading.ListView.tableHeaders.username": "用户名",
"ora-grading.ListView.tableHeaders.teamName": "",
"ora-grading.ListView.tableHeaders.learnerSubmissionDate": "",
"ora-grading.ListView.tableHeaders.teamSubmissionDate": "",
"ora-grading.ListView.tableHeaders.grade": "成绩",
"ora-grading.ListView.tableHeaders.gradingStatus": "",
"ora-grading.ListView.loadErrorHeading": "",
"ora-grading.ListView.loadErrorMessage1": "",
"ora-grading.ListView.backToResponsesLowercase": "",
"ora-grading.ListView.reloadSubmissions": "",
"ora-grading.ListView.loadingResponses": "",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverNameTitle": "文件名",
"ora-grading.ResponseDisplay.FilePopoverCell.filePopoverDescriptionTitle": "",
"ora-grading.ResponseDisplay.SubmissionFiles.tableNameHeader": "姓名",
"ora-grading.ResponseDisplay.SubmissionFiles.tableExtensionHeader": "",
"ora-grading.ResponseDisplay.SubmissionFiles.tablePopoverHeader": "",
"ora-grading.ResponseDisplay.SubmissionFiles.downloadFiles": "",
"ora-grading.ResponseDisplay.SubmissionFiles.downloading": "",
"ora-grading.ResponseDisplay.SubmissionFiles.downloaded": "",
"ora-grading.ResponseDisplay.SubmissionFiles.retryDownload": "",
"ora-grading.ResponseDisplay.SubmissionFiles.submissionFile": "",
"ora-grading.ResponseDisplay.SubmissionFiles.fileSizeExceed": "",
"ora-grading.ReviewActions.overrideConfirmTitle": "",
"ora-grading.ReviewActions.overrideConfirmWarning": "",
"ora-grading.ReviewActions.overrideConfirmContinue": "",
"ora-grading.ReviewActions.StartGradingButton.startGrading": "",
"ora-grading.ReviewActions.StartGradingButton.overrideGrade": "",
"ora-grading.ReviewActions.StartGradingButton.stopGrading": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.title": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.title": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.warning": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.override.confirmText": "",
"ora-grading.ReviewActions.StopGradingConfirmModal.confirmText": "",
"ora-grading.ReviewActions.goBack": "返回",
"ora-grading.ReviewActions.loadPrevious": "",
"ora-grading.ReviewActions.loadNext": "",
"ora-grading.ReviewActions.navigationLabel": "{current} 共 {total}",
"ora-grading.ReviewActions.pointsDisplay": "",
"ora-grading.ReviewActions.hideRubric": "",
"ora-grading.ReviewActions.showRubric": "",
"ora-grading.ReviewModal.closeReviewConfirm.title": "",
"ora-grading.ReviewModal.closeReviewConfirmWarning": "",
"ora-grading.ReviewModal.goBack": "返回",
"ora-grading.ReviewModal.CloseReviewConfirmModal.confirmText": "",
"ora-grading.ReviewModal.loadingResponse": "",
"ora-grading.ReviewModal.demoTitleMessage": "",
"ora-grading.ReviewModal.loadErrorHeading": "",
"ora-grading.ReviewModal.loadErrorMessage1": "",
"ora-grading.ReviewModal.reloadSubmission": "",
"ora-grading.ReviewModal.gradeNotSubmitted.heading": "",
"ora-grading.ReviewModal.gradeNotSubmitted.Content": "",
"ora-grading.ReviewModal.resubmitGrade": "",
"ora-grading.ReviewModal.dismiss": "忽略",
"ora-grading.ReviewModal.errorSubmittingGrade.Heading": "",
"ora-grading.ReviewModal.errorSubmittingGrade.Content": "",
"ora-grading.ReviewModal.errorLockContestedHeading": "",
"ora-grading.ReviewModal.errorLockContested": "",
"ora-grading.ReviewModal.errorLockBadRequestHeading": "",
"ora-grading.ReviewModal.errorLockBadRequest": "",
"ora-grading.ReviewModal.errorDownloadFailed": "",
"ora-grading.ReviewModal.errorDownloadFailedContent": "",
"ora-grading.ReviewModal.errorRetryDownload": "",
"ora-grading.ReviewModal.errorDownloadFailedFiles": "",
"ora-grading.Rubric.gradeSubmitted": "",
"ora-grading.Rubric.rubric": "",
"ora-grading.Rubric.submitGrade": "",
"ora-grading.Rubric.submittingGrade": "",
"ora-grading.Rubric.overallComments": "",
"ora-grading.Rubric.addComments": "",
"ora-grading.Rubric.comments": "",
"ora-grading.RubricFeedback.error": "",
"ora-grading.lms-api.gradingStatusDisplay.ungraded": "未分级",
"ora-grading.lms-api.gradingStatusDisplay.locked": "",
"ora-grading.lms-api.gradingStatusDisplay.graded": "",
"ora-grading.lms-api.gradingStatusDisplay.inProgress": ""
}

View File

@@ -15,22 +15,15 @@ import {
mergeConfig,
} from '@edx/frontend-platform';
import { messages as footerMessages } from '@edx/frontend-component-footer';
import { messages as headerMesssages } from '@edx/frontend-component-header';
import { IntlProvider } from '@edx/frontend-platform/i18n';
import messages from './i18n';
import App from './App';
subscribe(APP_READY, () => {
ReactDOM.render(
<IntlProvider locale="en">
<AppProvider store={store}>
<App />
</AppProvider>
</IntlProvider>,
<AppProvider store={store} wrapWithRouter={false}>
<App />
</AppProvider>,
document.getElementById('root'),
);
});
@@ -52,10 +45,6 @@ initialize({
}, appName);
},
},
messages: [
messages,
headerMesssages,
footerMessages,
],
messages,
requireAuthenticatedUser: true,
});

View File

@@ -8,10 +8,7 @@ import {
subscribe,
} from '@edx/frontend-platform';
import { messages as footerMessages } from '@edx/frontend-component-footer';
import { messages as headerMesssages } from '@edx/frontend-component-header';
import appMessages from './i18n';
import messages from './i18n';
import * as app from '.';
jest.mock('react-dom', () => ({
@@ -19,10 +16,10 @@ jest.mock('react-dom', () => ({
}));
jest.mock('@edx/frontend-component-footer', () => ({
messages: 'frotnend-footer-messages',
messages: 'frontend-footer-messages',
}));
jest.mock('@edx/frontend-component-header', () => ({
messages: 'frotnend-header-messages',
messages: 'frontend-header-messages',
}));
jest.mock('@edx/frontend-platform', () => ({
@@ -70,7 +67,7 @@ describe('app registry', () => {
test('initialize is called with footerMessages and requireAuthenticatedUser', () => {
expect(initialize).toHaveBeenCalledTimes(1);
const initializeArg = initialize.mock.calls[0][0];
expect(initializeArg.messages).toEqual([appMessages, headerMesssages, footerMessages]);
expect(initializeArg.messages).toEqual(messages);
expect(initializeArg.requireAuthenticatedUser).toEqual(true);
});
test('initialize config loads support url if available', () => {

View File

@@ -1,6 +1,6 @@
// The code in this file is from Segment's website:
// https://segment.com/docs/sources/website/analytics.js/quickstart/
import { configuration } from './config';
import { getConfig } from '@edx/frontend-platform';
(function () {
// Create a queue, but don't obliterate an existing one!
@@ -81,5 +81,5 @@ import { configuration } from './config';
// Load Analytics.js with your key, which will automatically
// load the tools you've enabled for your account. Boosh!
analytics.load(configuration.SEGMENT_KEY);
analytics.load(getConfig().SEGMENT_KEY);
}());

View File

@@ -1,9 +1,9 @@
/* eslint-disable import/no-extraneous-dependencies */
import '@testing-library/jest-dom';
import '@testing-library/jest-dom/extend-expect';
// breaking change here: https://github.com/testing-library/jest-dom/releases/tag/v6.0.0
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
Enzyme.configure({ adapter: new Adapter() });
@@ -18,11 +18,17 @@ jest.mock('react', () => ({
jest.mock('@edx/frontend-platform/i18n', () => {
const i18n = jest.requireActual('@edx/frontend-platform/i18n');
const PropTypes = jest.requireActual('prop-types');
const { formatMessage } = jest.requireActual('./testUtils');
const formatDate = jest.fn(date => new Date(date).toLocaleDateString()).mockName('useIntl.formatDate');
return {
...i18n,
intlShape: PropTypes.shape({
formatMessage: PropTypes.func,
}),
useIntl: () => ({
formatMessage,
formatDate,
}),
defineMessages: m => m,
FormattedMessage: () => 'FormattedMessage',
};
@@ -107,7 +113,7 @@ jest.mock('@edx/paragon/icons', () => ({
}));
jest.mock('data/constants/app', () => ({
locationId: 'fake-location-id',
locationId: () => 'fake-location-id',
}));
jest.mock('hooks', () => ({

View File

@@ -40,6 +40,11 @@ jest.mock('@edx/frontend-platform/auth', () => ({
getLoginRedirectUrl: jest.fn(),
}));
jest.mock('@edx/frontend-component-header', () => ({
LearningHeader: () => 'Header',
}));
// jest.mock('@edx/frontend-component-footer', () => () => 'Footer');
jest.mock('react-pdf', () => ({
Document: () => <div>Document</div>,
Image: () => <div>Image</div>,
@@ -186,8 +191,12 @@ const initialize = async () => {
* Wait for the review page to show and update the top-level state object.
*/
const makeTableSelections = async () => {
[0, 1, 2, 3, 4].forEach(index => userEvent.click(inspector.listView.listCheckbox(index)));
userEvent.click(inspector.listView.selectedBtn(5));
[0, 1, 2, 3, 4].forEach(
index => userEvent.click(inspector.listView.listCheckbox(index))
);
await inspector.find.listView.selectedBtn(5);
await userEvent.click(inspector.listView.selectedBtn(5));
// wait for navigation, which will show while request is pending
try {
await inspector.find.review.prevNav();
@@ -213,7 +222,7 @@ describe('ESG app integration tests', () => {
inspector = new Inspector(el);
});
test('initialization', async (done) => {
test('initialization', async () => {
const verifyInitialState = async () => {
await waitForRequestStatus(RequestKeys.initialize, RequestStates.pending);
const testInitialState = (key) => expect(
@@ -275,7 +284,6 @@ describe('ESG app integration tests', () => {
await makeTableSelections();
await waitForRequestStatus(RequestKeys.fetchSubmission, RequestStates.pending);
done();
});
describe('initialized', () => {
@@ -286,7 +294,7 @@ describe('ESG app integration tests', () => {
await waitForRequestStatus(RequestKeys.fetchSubmission, RequestStates.pending);
});
test('initial review state', async (done) => {
test('initial review state', async () => {
// Make table selection and load Review pane
expect(
state.grading.selection,
@@ -304,10 +312,9 @@ describe('ESG app integration tests', () => {
inspector.review.loadingResponse(),
'Loading Responses pending state text should be displayed in the ReviewModal',
).toBeVisible();
done();
});
test('fetch network error and retry', async (done) => {
test('fetch network error and retry', async () => {
await resolveFns.fetch.networkError();
await waitForRequestStatus(RequestKeys.fetchSubmission, RequestStates.failed);
expect(
@@ -317,10 +324,9 @@ describe('ESG app integration tests', () => {
// fetch: retry and succeed
await userEvent.click(inspector.review.retryFetchLink());
await waitForRequestStatus(RequestKeys.fetchSubmission, RequestStates.pending);
done()
});
test('fetch success and nav chain', async (done) => {
test('fetch success and nav chain', async () => {
let showRubric = false;
// fetch: success with chained navigation
const verifyFetchSuccess = async (submissionIndex) => {
@@ -396,7 +402,6 @@ describe('ESG app integration tests', () => {
await userEvent.click(inspector.review.prevNav());
await verifyFetchSuccess(i);
}
done();
});
describe('grading (basic)', () => {
@@ -416,7 +421,7 @@ describe('ESG app integration tests', () => {
const overallFeedback = 'some overall feedback';
// Set basic grade and feedback
const setGrade = async (done) => {
const setGrade = async () => {
const {
criterionOption,
criterionFeedback,
@@ -479,26 +484,25 @@ describe('ESG app integration tests', () => {
await resolveFns.lock.success();
}
/*
test('submit pending', async (done) => {
test('submit pending', async () => {
done();
});
test('submit failed', async (done) => {
test('submit failed', async () => {
done();
});
*/
test('grade and submit',
async (done) => {
async () => {
expect(await inspector.find.review.submitGradeBtn()).toBeVisible();
await setGrade();
checkGradingState();
await userEvent.click(inspector.review.rubric.submitGradeBtn());
await resolveFns.updateGrade.success();
checkGradeSuccess();
done();
},
);
test('grade, navigate, and return, maintaining gradingState',
async (done) => {
async () => {
expect(await inspector.find.review.submitGradeBtn()).toBeVisible();
await setGrade();
checkGradingState();
@@ -507,7 +511,6 @@ describe('ESG app integration tests', () => {
await loadPrev();
await waitForEqual(() => getState().grading.activeIndex, 0, 'activeIndex');
checkGradingState();
done();
},
);
});

View File

@@ -92,6 +92,7 @@ class Inspector {
return {
listView: {
viewAllResponsesBtn: () => this.findByText(appMessages.ListView.viewAllResponses),
selectedBtn: (num) => this.findByText(`View selected responses (${num})`),
loadErrorHeading: () => this.findByText(appMessages.ListView.loadErrorHeading),
},
review: {