From 89db03877b4ffd5a87ffe870b5e4fcc43c479fc7 Mon Sep 17 00:00:00 2001 From: Peter Kulko <93188219+PKulkoRaccoonGang@users.noreply.github.com> Date: Mon, 22 Jan 2024 16:52:04 +0200 Subject: [PATCH] feat: [AXIMST-23] Course unit - Sidebar with unit info (#117) * feat: added Sidebar with unit info * feat: added unit location * refactor: added legacy behavior * feat: added live variant * refactor: code refactoring * feat: added tests and translations * feat: added new font size * refactor: after review --- src/course-unit/CourseUnit.jsx | 16 ++- src/course-unit/CourseUnit.scss | 1 + src/course-unit/CourseUnit.test.jsx | 48 +++++++- src/course-unit/constants.js | 18 +++ src/course-unit/sidebar/Sidebar.scss | 71 +++++++++++ .../components/ReleaseInfoComponent.jsx | 29 +++++ .../sidebar/components/SidebarBody.jsx | 65 +++++++++++ .../sidebar/components/SidebarHeader.jsx | 41 +++++++ src/course-unit/sidebar/components/index.js | 3 + .../sidebar-footer/ActionButtons.jsx | 49 ++++++++ .../sidebar-footer/UnitVisibilityInfo.jsx | 55 +++++++++ .../components/sidebar-footer/index.jsx | 40 +++++++ src/course-unit/sidebar/hooks.jsx | 43 +++++++ src/course-unit/sidebar/index.jsx | 52 +++++++++ src/course-unit/sidebar/messages.js | 110 ++++++++++++++++++ src/course-unit/sidebar/utils.js | 102 ++++++++++++++++ src/i18n/messages/ar.json | 50 +++++++- src/i18n/messages/de.json | 50 +++++++- src/i18n/messages/de_DE.json | 50 +++++++- src/i18n/messages/es_419.json | 50 +++++++- src/i18n/messages/fa_IR.json | 50 +++++++- src/i18n/messages/fr.json | 50 +++++++- src/i18n/messages/fr_CA.json | 50 +++++++- src/i18n/messages/hi.json | 50 +++++++- src/i18n/messages/it.json | 50 +++++++- src/i18n/messages/it_IT.json | 50 +++++++- src/i18n/messages/pt.json | 50 +++++++- src/i18n/messages/pt_PT.json | 50 +++++++- src/i18n/messages/ru.json | 50 +++++++- src/i18n/messages/uk.json | 50 +++++++- src/i18n/messages/zh_CN.json | 50 +++++++- 31 files changed, 1469 insertions(+), 24 deletions(-) create mode 100644 src/course-unit/sidebar/Sidebar.scss create mode 100644 src/course-unit/sidebar/components/ReleaseInfoComponent.jsx create mode 100644 src/course-unit/sidebar/components/SidebarBody.jsx create mode 100644 src/course-unit/sidebar/components/SidebarHeader.jsx create mode 100644 src/course-unit/sidebar/components/index.js create mode 100644 src/course-unit/sidebar/components/sidebar-footer/ActionButtons.jsx create mode 100644 src/course-unit/sidebar/components/sidebar-footer/UnitVisibilityInfo.jsx create mode 100644 src/course-unit/sidebar/components/sidebar-footer/index.jsx create mode 100644 src/course-unit/sidebar/hooks.jsx create mode 100644 src/course-unit/sidebar/index.jsx create mode 100644 src/course-unit/sidebar/messages.js create mode 100644 src/course-unit/sidebar/utils.js diff --git a/src/course-unit/CourseUnit.jsx b/src/course-unit/CourseUnit.jsx index 4cae673b84..baf34a94b1 100644 --- a/src/course-unit/CourseUnit.jsx +++ b/src/course-unit/CourseUnit.jsx @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import { useSelector } from 'react-redux'; import { useParams } from 'react-router-dom'; -import { Container, Layout } from '@edx/paragon'; +import { Container, Layout, Stack } from '@edx/paragon'; import { useIntl, injectIntl } from '@edx/frontend-platform/i18n'; import { ErrorAlert } from '@edx/frontend-lib-content-components'; @@ -17,6 +17,7 @@ import HeaderTitle from './header-title/HeaderTitle'; import Breadcrumbs from './breadcrumbs/Breadcrumbs'; import HeaderNavigations from './header-navigations/HeaderNavigations'; import Sequence from './course-sequence'; +import Sidebar from './sidebar'; import { useCourseUnit } from './hooks'; import messages from './messages'; @@ -85,9 +86,9 @@ const CourseUnit = ({ courseId }) => { handleCreateNewCourseXblock={handleCreateNewCourseXblock} /> @@ -97,7 +98,12 @@ const CourseUnit = ({ courseId }) => { handleCreateNewCourseXblock={handleCreateNewCourseXblock} /> - + + + + + + diff --git a/src/course-unit/CourseUnit.scss b/src/course-unit/CourseUnit.scss index d3264d89f2..ce5bd14a82 100644 --- a/src/course-unit/CourseUnit.scss +++ b/src/course-unit/CourseUnit.scss @@ -1,3 +1,4 @@ @import "./breadcrumbs/Breadcrumbs"; @import "./course-sequence/CourseSequence"; @import "./add-component/AddComponent"; +@import "./sidebar/Sidebar"; diff --git a/src/course-unit/CourseUnit.test.jsx b/src/course-unit/CourseUnit.test.jsx index 6bdc2f8230..26006361ef 100644 --- a/src/course-unit/CourseUnit.test.jsx +++ b/src/course-unit/CourseUnit.test.jsx @@ -32,7 +32,9 @@ import headerNavigationsMessages from './header-navigations/messages'; import headerTitleMessages from './header-title/messages'; import { getUnitPreviewPath, getUnitViewLivePath } from './utils'; import courseSequenceMessages from './course-sequence/messages'; -import messages from './add-component/messages'; +import addComponentMessages from './add-component/messages'; +import sidebarMessages from './sidebar/messages'; +import { extractCourseUnitId } from './sidebar/utils'; let axiosMock; let store; @@ -171,7 +173,7 @@ describe('', () => { await waitFor(() => { const videoButton = getByRole('button', { - name: new RegExp(`${messages.buttonText.defaultMessage} Video`, 'i'), + name: new RegExp(`${addComponentMessages.buttonText.defaultMessage} Video`, 'i'), }); userEvent.click(videoButton); @@ -188,7 +190,7 @@ describe('', () => { await waitFor(() => { const problemButton = getByRole('button', { - name: new RegExp(`${messages.buttonText.defaultMessage} Problem`, 'i'), + name: new RegExp(`${addComponentMessages.buttonText.defaultMessage} Problem`, 'i'), }); userEvent.click(problemButton); @@ -293,7 +295,7 @@ describe('', () => { await waitFor(() => { const videoButton = getByRole('button', { - name: new RegExp(`${messages.buttonText.defaultMessage} Video`, 'i'), + name: new RegExp(`${addComponentMessages.buttonText.defaultMessage} Video`, 'i'), }); userEvent.click(videoButton); @@ -301,4 +303,42 @@ describe('', () => { expect(mockedUsedNavigate).toHaveBeenCalledWith(`/course/${courseKey}/editor/video/${locator}`); }); }); + + it('renders course unit details for a draft with unpublished changes', async () => { + const { getByText } = render(); + + await waitFor(() => { + expect(getByText(sidebarMessages.sidebarTitleDraftUnpublishedChanges.defaultMessage)).toBeInTheDocument(); + expect(getByText(sidebarMessages.visibilityStaffAndLearnersTitle.defaultMessage)).toBeInTheDocument(); + expect(getByText(sidebarMessages.releaseStatusTitle.defaultMessage)).toBeInTheDocument(); + expect(getByText(sidebarMessages.sidebarBodyNote.defaultMessage)).toBeInTheDocument(); + expect(getByText(sidebarMessages.visibilityWillBeVisibleToTitle.defaultMessage)).toBeInTheDocument(); + expect(getByText(sidebarMessages.visibilityCheckboxTitle.defaultMessage)).toBeInTheDocument(); + expect(getByText(sidebarMessages.actionButtonPublishTitle.defaultMessage)).toBeInTheDocument(); + expect(getByText(sidebarMessages.actionButtonDiscardChangesTitle.defaultMessage)).toBeInTheDocument(); + expect(getByText(courseUnitIndexMock.release_date)).toBeInTheDocument(); + expect(getByText( + sidebarMessages.publishInfoDraftSaved.defaultMessage + .replace('{editedOn}', courseUnitIndexMock.edited_on) + .replace('{editedBy}', courseUnitIndexMock.edited_by), + )).toBeInTheDocument(); + expect(getByText( + sidebarMessages.releaseInfoWithSection.defaultMessage + .replace('{sectionName}', courseUnitIndexMock.release_date_from), + )).toBeInTheDocument(); + }); + }); + + it('renders course unit details in the sidebar', async () => { + const { getByText } = render(); + const courseUnitLocationId = extractCourseUnitId(courseUnitIndexMock.id); + + await waitFor(() => { + expect(getByText(sidebarMessages.sidebarHeaderUnitLocationTitle.defaultMessage)).toBeInTheDocument(); + expect(getByText(sidebarMessages.unitLocationTitle.defaultMessage)).toBeInTheDocument(); + expect(getByText(courseUnitLocationId)).toBeInTheDocument(); + expect(getByText(sidebarMessages.unitLocationDescription.defaultMessage + .replace('{id}', courseUnitLocationId))).toBeInTheDocument(); + }); + }); }); diff --git a/src/course-unit/constants.js b/src/course-unit/constants.js index 7427db238e..66e2815826 100644 --- a/src/course-unit/constants.js +++ b/src/course-unit/constants.js @@ -12,6 +12,7 @@ import { TextFields as TextFieldsIcon, VideoCamera as VideoCameraIcon, } from '@edx/paragon/icons'; +import messages from './sidebar/messages'; export const UNIT_ICON_TYPES = ['video', 'other', 'vertical', 'problem', 'lock']; @@ -44,3 +45,20 @@ export const COMPONENT_TYPE_ICON_MAP = { [COMPONENT_ICON_TYPES.video]: VideoCameraIcon, [COMPONENT_ICON_TYPES.dragAndDrop]: BackHandIcon, }; + +export const getUnitReleaseStatus = (intl) => ({ + release: intl.formatMessage(messages.releaseStatusTitle), + released: intl.formatMessage(messages.releasedStatusTitle), + scheduled: intl.formatMessage(messages.scheduledStatusTitle), +}); + +export const UNIT_VISIBILITY_STATES = { + staffOnly: 'staff_only', + live: 'live', + ready: 'ready', +}; + +export const COLORS = { + BLACK: '#000', + GREEN: '#0D7D4D', +}; diff --git a/src/course-unit/sidebar/Sidebar.scss b/src/course-unit/sidebar/Sidebar.scss new file mode 100644 index 0000000000..537e521082 --- /dev/null +++ b/src/course-unit/sidebar/Sidebar.scss @@ -0,0 +1,71 @@ +%base-font-params { + font-size: $font-size-sm; + line-height: $line-height-base; +} + +.course-unit-sidebar { + .course-unit-sidebar-header { + padding: $spacer $spacer map-get($spacers, 3\.5); + + .course-unit-sidebar-header-icon { + margin-right: map-get($spacers, 1); + } + + .course-unit-sidebar-header-title { + font-size: $font-size-base; + line-height: $line-height-base; + } + } + + .course-unit-sidebar-footer { + padding: 0 $spacer $spacer; + + .course-unit-sidebar-visibility { + .course-unit-sidebar-visibility-title { + font-weight: $font-weight-normal; + color: $gray-700; + + @extend %base-font-params; + } + + .course-unit-sidebar-location-description { + font-size: $font-size-xs; + line-height: $line-height-base; + } + + .course-unit-sidebar-visibility-copy { + font-weight: $font-weight-bold; + color: $gray-700; + + @extend %base-font-params; + } + + .course-unit-sidebar-visibility-checkbox .pgn__form-label { + font-size: $font-size-sm; + line-height: $headings-line-height; + } + } + } + + .course-unit-sidebar-date { + padding: 0 $spacer $spacer; + + @extend %base-font-params; + + .course-unit-sidebar-date-stage { + font-weight: $font-weight-normal; + + @extend %base-font-params; + } + + .course-unit-sidebar-date-timestamp { + color: $gray-700; + + @extend %base-font-params; + } + } + + &.is-stuff-only .course-unit-sidebar-date-and-with { + text-decoration: line-through; + } +} diff --git a/src/course-unit/sidebar/components/ReleaseInfoComponent.jsx b/src/course-unit/sidebar/components/ReleaseInfoComponent.jsx new file mode 100644 index 0000000000..9861fa2094 --- /dev/null +++ b/src/course-unit/sidebar/components/ReleaseInfoComponent.jsx @@ -0,0 +1,29 @@ +import { useSelector } from 'react-redux'; +import { useIntl } from '@edx/frontend-platform/i18n'; + +import { getCourseUnitData } from '../../data/selectors'; +import { getReleaseInfo } from '../utils'; + +const ReleaseInfoComponent = () => { + const intl = useIntl(); + const { + releaseDate, + releaseDateFrom, + } = useSelector(getCourseUnitData); + const releaseInfo = getReleaseInfo(intl, releaseDate, releaseDateFrom); + + if (releaseInfo.isScheduled) { + return ( + +
+ {releaseInfo.releaseDate}  +
+ {releaseInfo.sectionNameMessage} +
+ ); + } + + return releaseInfo.message; +}; + +export default ReleaseInfoComponent; diff --git a/src/course-unit/sidebar/components/SidebarBody.jsx b/src/course-unit/sidebar/components/SidebarBody.jsx new file mode 100644 index 0000000000..8ece854f20 --- /dev/null +++ b/src/course-unit/sidebar/components/SidebarBody.jsx @@ -0,0 +1,65 @@ +import PropTypes from 'prop-types'; +import { useSelector } from 'react-redux'; +import { Card, Stack } from '@edx/paragon'; +import { useIntl } from '@edx/frontend-platform/i18n'; + +import { getCourseUnitData } from '../../data/selectors'; +import { getPublishInfo } from '../utils'; +import messages from '../messages'; +import ReleaseInfoComponent from './ReleaseInfoComponent'; + +const SidebarBody = ({ releaseLabel, isDisplayUnitLocation, locationId }) => { + const intl = useIntl(); + const { + editedOn, + editedBy, + hasChanges, + publishedBy, + publishedOn, + } = useSelector(getCourseUnitData); + + return ( + + + {isDisplayUnitLocation ? ( + +
+ {intl.formatMessage(messages.unitLocationTitle)} +
+

+ {locationId} +

+
+ ) : ( + <> + + {getPublishInfo(intl, hasChanges, editedBy, editedOn, publishedBy, publishedOn)} + + +
+ {releaseLabel} +
+ +
+

+ {intl.formatMessage(messages.sidebarBodyNote)} +

+ + )} +
+
+ ); +}; + +SidebarBody.propTypes = { + releaseLabel: PropTypes.string.isRequired, + isDisplayUnitLocation: PropTypes.bool, + locationId: PropTypes.string, +}; + +SidebarBody.defaultProps = { + isDisplayUnitLocation: false, + locationId: null, +}; + +export default SidebarBody; diff --git a/src/course-unit/sidebar/components/SidebarHeader.jsx b/src/course-unit/sidebar/components/SidebarHeader.jsx new file mode 100644 index 0000000000..e77402959d --- /dev/null +++ b/src/course-unit/sidebar/components/SidebarHeader.jsx @@ -0,0 +1,41 @@ +import PropTypes from 'prop-types'; +import { useSelector } from 'react-redux'; +import { Icon, Stack } from '@edx/paragon'; +import { useIntl } from '@edx/frontend-platform/i18n'; + +import { getCourseUnitData } from '../../data/selectors'; +import { getIconVariant } from '../utils'; +import messages from '../messages'; + +const SidebarHeader = ({ title, visibilityState, isDisplayUnitLocation }) => { + const intl = useIntl(); + const { hasChanges, published } = useSelector(getCourseUnitData); + const { iconSrc, colorVariant } = getIconVariant(visibilityState, published, hasChanges); + + return ( + + {!isDisplayUnitLocation && ( + + )} +

+ {isDisplayUnitLocation ? intl.formatMessage(messages.sidebarHeaderUnitLocationTitle) : title} +

+
+ ); +}; + +SidebarHeader.propTypes = { + title: PropTypes.string.isRequired, + visibilityState: PropTypes.string.isRequired, + isDisplayUnitLocation: PropTypes.bool, +}; + +SidebarHeader.defaultProps = { + isDisplayUnitLocation: false, +}; + +export default SidebarHeader; diff --git a/src/course-unit/sidebar/components/index.js b/src/course-unit/sidebar/components/index.js new file mode 100644 index 0000000000..6637529e61 --- /dev/null +++ b/src/course-unit/sidebar/components/index.js @@ -0,0 +1,3 @@ +export { default as SidebarHeader } from './SidebarHeader'; +export { default as SidebarBody } from './SidebarBody'; +export { default as SidebarFooter } from './sidebar-footer'; diff --git a/src/course-unit/sidebar/components/sidebar-footer/ActionButtons.jsx b/src/course-unit/sidebar/components/sidebar-footer/ActionButtons.jsx new file mode 100644 index 0000000000..b63b63bb7e --- /dev/null +++ b/src/course-unit/sidebar/components/sidebar-footer/ActionButtons.jsx @@ -0,0 +1,49 @@ +import { useSelector } from 'react-redux'; +import { Button } from '@edx/paragon'; +import { useIntl } from '@edx/frontend-platform/i18n'; + +import { getCourseUnitData } from '../../../data/selectors'; +import messages from '../../messages'; + +const ActionButtons = () => { + const intl = useIntl(); + const { + published, + hasChanges, + enableCopyPasteUnits, + } = useSelector(getCourseUnitData); + + return ( + <> + {(!published || hasChanges) && ( + + )} + {(published && hasChanges) && ( + + )} + {enableCopyPasteUnits && ( + + )} + + ); +}; + +export default ActionButtons; diff --git a/src/course-unit/sidebar/components/sidebar-footer/UnitVisibilityInfo.jsx b/src/course-unit/sidebar/components/sidebar-footer/UnitVisibilityInfo.jsx new file mode 100644 index 0000000000..bae1778bcf --- /dev/null +++ b/src/course-unit/sidebar/components/sidebar-footer/UnitVisibilityInfo.jsx @@ -0,0 +1,55 @@ +import { useSelector } from 'react-redux'; +import { Form } from '@edx/paragon'; +import { useIntl } from '@edx/frontend-platform/i18n'; + +import { getCourseUnitData } from '../../../data/selectors'; +import { getVisibilityTitle } from '../../utils'; +import messages from '../../messages'; + +const UnitVisibilityInfo = () => { + const intl = useIntl(); + const { + published, + hasChanges, + staffLockFrom, + releaseDateFrom, + releasedToStudents, + visibleToStaffOnly, + hasExplicitStaffLock, + } = useSelector(getCourseUnitData); + + return ( + <> + + {getVisibilityTitle(intl, releasedToStudents, published, hasChanges)} + + {visibleToStaffOnly ? ( + <> +
+ {intl.formatMessage(messages.visibilityStaffOnlyTitle)} +
+ {!hasExplicitStaffLock && ( + + {intl.formatMessage(messages.visibilityHasExplicitStaffLockText, { + date: releaseDateFrom, sectionName: staffLockFrom, + })} + + )} + + ) : ( +
+ {intl.formatMessage(messages.visibilityStaffAndLearnersTitle)} +
+ )} + {}} + > + {intl.formatMessage(messages.visibilityCheckboxTitle)} + + + ); +}; + +export default UnitVisibilityInfo; diff --git a/src/course-unit/sidebar/components/sidebar-footer/index.jsx b/src/course-unit/sidebar/components/sidebar-footer/index.jsx new file mode 100644 index 0000000000..09981c3006 --- /dev/null +++ b/src/course-unit/sidebar/components/sidebar-footer/index.jsx @@ -0,0 +1,40 @@ +import PropTypes from 'prop-types'; +import { Card, Stack } from '@edx/paragon'; +import { useIntl } from '@edx/frontend-platform/i18n'; + +import messages from '../../messages'; +import UnitVisibilityInfo from './UnitVisibilityInfo'; +import ActionButtons from './ActionButtons'; + +const SidebarFooter = ({ isDisplayUnitLocation, locationId }) => { + const intl = useIntl(); + + return ( + + + {isDisplayUnitLocation ? ( + + {intl.formatMessage(messages.unitLocationDescription, { id: locationId })} + + ) : ( + <> + + + + )} + + + ); +}; + +SidebarFooter.propTypes = { + isDisplayUnitLocation: PropTypes.bool, + locationId: PropTypes.string, +}; + +SidebarFooter.defaultProps = { + isDisplayUnitLocation: false, + locationId: null, +}; + +export default SidebarFooter; diff --git a/src/course-unit/sidebar/hooks.jsx b/src/course-unit/sidebar/hooks.jsx new file mode 100644 index 0000000000..bbe6c073fc --- /dev/null +++ b/src/course-unit/sidebar/hooks.jsx @@ -0,0 +1,43 @@ +import { useIntl } from '@edx/frontend-platform/i18n'; + +import { getUnitReleaseStatus, UNIT_VISIBILITY_STATES } from '../constants'; +import messages from './messages'; +import { extractCourseUnitId } from './utils'; + +const useCourseUnitData = ({ + hasChanges, published, visibilityState, id, +}) => { + const intl = useIntl(); + const releaseStatus = getUnitReleaseStatus(intl); + const locationId = extractCourseUnitId(id); + const visibleToStaffOnly = visibilityState === UNIT_VISIBILITY_STATES.staffOnly; + const titleMessages = { + [UNIT_VISIBILITY_STATES.staffOnly]: messages.sidebarTitleVisibleToStaffOnly, + [UNIT_VISIBILITY_STATES.live]: messages.sidebarTitlePublishedAndLive, + // eslint-disable-next-line no-nested-ternary + default: published + ? (hasChanges ? messages.sidebarTitleDraftUnpublishedChanges + : messages.sidebarTitlePublishedNotYetReleased) + : messages.sidebarTitleDraftNeverPublished, + }; + + const releaseLabels = { + [UNIT_VISIBILITY_STATES.staffOnly]: releaseStatus.release, + [UNIT_VISIBILITY_STATES.live]: releaseStatus.released, + [UNIT_VISIBILITY_STATES.ready]: releaseStatus.scheduled, + default: releaseStatus.release, + }; + + const title = intl.formatMessage(titleMessages[visibilityState] || titleMessages.default); + const releaseLabel = releaseLabels[visibilityState] || releaseLabels.default; + + return { + title, + locationId, + releaseLabel, + visibilityState, + visibleToStaffOnly, + }; +}; + +export default useCourseUnitData; diff --git a/src/course-unit/sidebar/index.jsx b/src/course-unit/sidebar/index.jsx new file mode 100644 index 0000000000..f76444c2ba --- /dev/null +++ b/src/course-unit/sidebar/index.jsx @@ -0,0 +1,52 @@ +import PropTypes from 'prop-types'; +import { useSelector } from 'react-redux'; +import classNames from 'classnames'; +import { Card } from '@edx/paragon'; + +import { getCourseUnitData } from '../data/selectors'; +import { SidebarBody, SidebarFooter, SidebarHeader } from './components'; +import useCourseUnitData from './hooks'; + +const Sidebar = ({ isDisplayUnitLocation }) => { + const { + title, + locationId, + releaseLabel, + visibilityState, + visibleToStaffOnly, + } = useCourseUnitData(useSelector(getCourseUnitData)); + + return ( + + + + + + ); +}; + +Sidebar.propTypes = { + isDisplayUnitLocation: PropTypes.bool, +}; + +Sidebar.defaultProps = { + isDisplayUnitLocation: false, +}; + +export default Sidebar; diff --git a/src/course-unit/sidebar/messages.js b/src/course-unit/sidebar/messages.js new file mode 100644 index 0000000000..bb9a75c311 --- /dev/null +++ b/src/course-unit/sidebar/messages.js @@ -0,0 +1,110 @@ +import { defineMessages } from '@edx/frontend-platform/i18n'; + +const messages = defineMessages({ + sidebarTitleDraftNeverPublished: { + id: 'course-authoring.course-unit.sidebar.title.draft.never-published', + defaultMessage: 'Draft (never published)', + }, + sidebarTitleVisibleToStaffOnly: { + id: 'course-authoring.course-unit.sidebar.title.visible.to-staff-only', + defaultMessage: 'Visible to staff only', + }, + sidebarTitlePublishedAndLive: { + id: 'course-authoring.course-unit.sidebar.title.published.live', + defaultMessage: 'Published and live', + }, + sidebarTitleDraftUnpublishedChanges: { + id: 'course-authoring.course-unit.sidebar.title.draft.unpublished', + defaultMessage: 'Draft (unpublished changes)', + }, + sidebarTitlePublishedNotYetReleased: { + id: 'course-authoring.course-unit.sidebar.title.published.not-yet-released', + defaultMessage: 'Published (not yet released)', + }, + sidebarHeaderUnitLocationTitle: { + id: 'course-authoring.course-unit.sidebar.header.unit-location.title', + defaultMessage: 'Unit location', + }, + sidebarBodyNote: { + id: 'course-authoring.course-unit.sidebar.body.note', + defaultMessage: 'Note: Do not hide graded assignments after they have been released.', + }, + publishInfoPreviouslyPublished: { + id: 'course-authoring.course-unit.publish.info.previously-published', + defaultMessage: 'Previously published', + }, + publishInfoDraftSaved: { + id: 'course-authoring.course-unit.publish.info.draft.saved', + defaultMessage: 'Draft saved on {editedOn} by {editedBy}', + }, + publishLastPublished: { + id: 'course-authoring.course-unit.publish.info.last.published', + defaultMessage: 'Last published {publishedOn} by {publishedBy}', + }, + releaseInfoUnscheduled: { + id: 'course-authoring.course-unit.release.info.unscheduled', + defaultMessage: 'Unscheduled', + }, + releaseInfoWithSection: { + id: 'course-authoring.course-unit.release.info.with-unit', + defaultMessage: 'with {sectionName}', + }, + visibilityIsVisibleToTitle: { + id: 'course-authoring.course-unit.visibility.is-visible-to.title', + defaultMessage: 'IS VISIBLE TO', + }, + visibilityWillBeVisibleToTitle: { + id: 'course-authoring.course-unit.visibility.will-be-visible-to.title', + defaultMessage: 'WILL BE VISIBLE TO', + }, + unitLocationTitle: { + id: 'course-authoring.course-unit.unit-location.title', + defaultMessage: 'LOCATION ID', + }, + unitLocationDescription: { + id: 'course-authoring.course-unit.unit-location.description', + defaultMessage: 'To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value', + }, + visibilityCheckboxTitle: { + id: 'course-authoring.course-unit.visibility.checkbox.title', + defaultMessage: 'Hide from learners', + }, + visibilityStaffOnlyTitle: { + id: 'course-authoring.course-unit.visibility.staff-only.title', + defaultMessage: 'Staff only', + }, + visibilityStaffAndLearnersTitle: { + id: 'course-authoring.course-unit.visibility.staff-and-learners.title', + defaultMessage: 'Staff and learners', + }, + visibilityHasExplicitStaffLockText: { + id: 'course-authoring.course-unit.visibility.has-explicit-staff-lock.text', + defaultMessage: 'with {date} {sectionName}', + }, + actionButtonPublishTitle: { + id: 'course-authoring.course-unit.action-buttons.publish.title', + defaultMessage: 'Publish', + }, + actionButtonDiscardChangesTitle: { + id: 'course-authoring.course-unit.action-button.discard-changes.title', + defaultMessage: 'Discard changes', + }, + actionButtonCopyUnitTitle: { + id: 'course-authoring.course-unit.action-button.copy-unit.title', + defaultMessage: 'Copy unit', + }, + releaseStatusTitle: { + id: 'course-authoring.course-unit.status.release.title', + defaultMessage: 'RELEASE', + }, + releasedStatusTitle: { + id: 'course-authoring.course-unit.status.released.title', + defaultMessage: 'RELEASED', + }, + scheduledStatusTitle: { + id: 'course-authoring.course-unit.status.scheduled.title', + defaultMessage: 'SCHEDULED', + }, +}); + +export default messages; diff --git a/src/course-unit/sidebar/utils.js b/src/course-unit/sidebar/utils.js new file mode 100644 index 0000000000..11e9767c5d --- /dev/null +++ b/src/course-unit/sidebar/utils.js @@ -0,0 +1,102 @@ +import { + CheckCircle as CheckCircleIcon, + CheckCircleOutline as CheckCircleOutlineIcon, + InfoOutline as InfoOutlineIcon, +} from '@edx/paragon/icons'; + +import { COLORS, UNIT_VISIBILITY_STATES } from '../constants'; +import messages from './messages'; + +/** + * Get information about the publishing status. + * @param {Object} intl - The internationalization object. + * @param {boolean} hasChanges - Indicates if there are unpublished changes. + * @param {string} editedBy - The user who edited the content. + * @param {string} editedOn - The timestamp when the content was edited. + * @param {string} publishedBy - The user who last published the content. + * @param {string} publishedOn - The timestamp when the content was last published. + * @returns {string} Publish information based on the provided parameters. + */ +export const getPublishInfo = (intl, hasChanges, editedBy, editedOn, publishedBy, publishedOn) => { + let publishInfoText; + if (hasChanges && editedOn && editedBy) { + publishInfoText = intl.formatMessage(messages.publishInfoDraftSaved, { editedOn, editedBy }); + } else if (publishedOn && publishedBy) { + publishInfoText = intl.formatMessage(messages.publishLastPublished, { publishedOn, publishedBy }); + } else { + publishInfoText = intl.formatMessage(messages.publishInfoPreviouslyPublished); + } + + return publishInfoText; +}; + +/** + * Get information about the release status. + * @param {Object} intl - The internationalization object. + * @param {string} releaseDate - The release date of the content. + * @param {string} releaseDateFrom - The section name associated with the release date. + * @returns {string|ReactElement} Release information based on the provided parameters. + */ +export const getReleaseInfo = (intl, releaseDate, releaseDateFrom) => { + if (releaseDate) { + return { + isScheduled: true, + releaseDate, + releaseDateFrom, + sectionNameMessage: intl.formatMessage(messages.releaseInfoWithSection, { sectionName: releaseDateFrom }), + }; + } + return { + isScheduled: false, + message: intl.formatMessage(messages.releaseInfoUnscheduled), + }; +}; + +/** + * Get the visibility title. + * @param {Object} intl - The internationalization object. + * @param {boolean} releasedToStudents - Indicates if the content is released to students. + * @param {boolean} published - Indicates if the content is published. + * @param {boolean} hasChanges - Indicates if there are unpublished changes. + * @returns {string} The visibility title determined by the provided parameters. + */ +export const getVisibilityTitle = (intl, releasedToStudents, published, hasChanges) => { + if (releasedToStudents && published && !hasChanges) { + return intl.formatMessage(messages.visibilityIsVisibleToTitle); + } + + return intl.formatMessage(messages.visibilityWillBeVisibleToTitle); +}; + +/** + * Get the icon variant based on the provided visibility state and publication status. + * @param {string} visibilityState - The visibility state of the content. + * @param {boolean} published - Indicates if the content is published. + * @param {boolean} hasChanges - Indicates if there are unpublished changes. + * @returns {Object} An object containing the icon component and color variant. + * - iconSrc: The source component for the icon. + * - colorVariant: The color variant for the icon. + */ +export const getIconVariant = (visibilityState, published, hasChanges) => { + const iconVariants = { + [UNIT_VISIBILITY_STATES.staffOnly]: { iconSrc: InfoOutlineIcon, colorVariant: COLORS.BLACK }, + [UNIT_VISIBILITY_STATES.live]: { iconSrc: CheckCircleIcon, colorVariant: COLORS.GREEN }, + publishedNoChanges: { iconSrc: CheckCircleOutlineIcon, colorVariant: COLORS.BLACK }, + publishedWithChanges: { iconSrc: InfoOutlineIcon, colorVariant: COLORS.BLACK }, + default: { iconSrc: InfoOutlineIcon, colorVariant: COLORS.BLACK }, + }; + if (visibilityState in iconVariants) { + return iconVariants[visibilityState]; + } + if (published) { + return hasChanges ? iconVariants.publishedWithChanges : iconVariants.publishedNoChanges; + } + return iconVariants.default; +}; + +/** + * Extracts the clear course unit ID from the given course unit data. + * @param {string} id - The course unit ID. + * @returns {string} The clear course unit ID extracted from the provided data. + */ +export const extractCourseUnitId = (id) => id.match(/block@(.+)$/)[1]; diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 0c24ccbd7f..7fe0153745 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index 2500a14407..d9150def71 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/de_DE.json b/src/i18n/messages/de_DE.json index de185d7071..2e636fc479 100644 --- a/src/i18n/messages/de_DE.json +++ b/src/i18n/messages/de_DE.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/es_419.json b/src/i18n/messages/es_419.json index 7999fe94ae..827bdc08a1 100644 --- a/src/i18n/messages/es_419.json +++ b/src/i18n/messages/es_419.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/fa_IR.json b/src/i18n/messages/fa_IR.json index bafa9a9fb7..21530934c5 100644 --- a/src/i18n/messages/fa_IR.json +++ b/src/i18n/messages/fa_IR.json @@ -14,5 +14,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index da68eb6719..1f471918ee 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/fr_CA.json b/src/i18n/messages/fr_CA.json index ca1e8b4152..59c13c5957 100644 --- a/src/i18n/messages/fr_CA.json +++ b/src/i18n/messages/fr_CA.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index 2500a14407..d9150def71 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index 2500a14407..d9150def71 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/it_IT.json b/src/i18n/messages/it_IT.json index 333f18723d..c873bc9da1 100644 --- a/src/i18n/messages/it_IT.json +++ b/src/i18n/messages/it_IT.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 2500a14407..d9150def71 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/pt_PT.json b/src/i18n/messages/pt_PT.json index c281896c81..ad35bf0d11 100644 --- a/src/i18n/messages/pt_PT.json +++ b/src/i18n/messages/pt_PT.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index 2500a14407..d9150def71 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/uk.json b/src/i18n/messages/uk.json index 2500a14407..d9150def71 100644 --- a/src/i18n/messages/uk.json +++ b/src/i18n/messages/uk.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" } diff --git a/src/i18n/messages/zh_CN.json b/src/i18n/messages/zh_CN.json index 2500a14407..d9150def71 100644 --- a/src/i18n/messages/zh_CN.json +++ b/src/i18n/messages/zh_CN.json @@ -991,5 +991,53 @@ "course-authoring.course-unit.sequence.no.content": "There is no content here.", "course-authoring.course-unit.sequence.navigation.menu": "{current} of {total}", "course-authoring.course-unit.add.component.title": "Add a new component", - "course-authoring.course-unit.add.component.button.text": "Add Component:" + "course-authoring.course-unit.add.component.button.text": "Add Component:", + "course-authoring.certificates.heading.title": "Certificates", + "course-authoring.certificates.heading.subtitle": "Settings", + "course-authoring.certificates.heading.action.button.preview": "Preview certificate", + "course-authoring.certificates.heading.action.button.deactivate": "Deactivate", + "course-authoring.certificates.nocertificate.text": "You haven't added any certificates to this course yet.", + "course-authoring.certificates.setup.certificate.button": "Add your first certificate", + "course-authoring.certificates.without.modes.text": "This course does not use a mode that offers certificates.", + "course-authoring.certificates.sidebar.about.title": "Working with Certificates", + "course-authoring.certificates.sidebar.about.description-1": "Specify a course title to use on the certificate if the course's official title is too long to be displayed well.", + "course-authoring.certificates.sidebar.about.description-2": "For verified certificates, specify between one and four signatories and upload the associated images. To edit or delete a certificate before it is activated, hover over the top right corner of the form and select {strongText} or the delete icon.", + "course-authoring.certificates.sidebar.about.description-2.strong": "Edit", + "course-authoring.certificates.sidebar.about.description-3": "To view a sample certificate, choose a course mode and select {strongText}.", + "course-authoring.certificates.sidebar.about.description-3.strong": "Preview Certificate", + "course-authoring.certificates.sidebar.about2.title": "Issuing Certificates to Learners", + "course-authoring.certificates.sidebar.about2.description-1": "To begin issuing course certificates, a course team member with either the Staff or Admin role selects {strongText}. Only course team members with these roles can edit or delete an activated certificate.", + "course-authoring.certificates.sidebar.about2.description-1.strong": "Activate", + "course-authoring.certificates.sidebar.about2.description-2": "{strongText} delete certificates after a course has started; learners who have already earned certificates will no longer be able to access them.", + "course-authoring.certificates.sidebar.about2.description-2.strong": "Do not", + "course-authoring.certificates.sidebar.learnmore.button": "Learn more about certificates", + "course-authoring.course-unit.modal.button.text": "Select", + "course-authoring.course-unit.modal.container.title": "Add {componentTitle} component", + "course-authoring.course-unit.modal.container.cancel.button.text": "Cancel", + "course-authoring.course-unit.sidebar.title.draft.never-published": "Draft (never published)", + "course-authoring.course-unit.sidebar.title.visible.to-staff-only": "Visible to staff only", + "course-authoring.course-unit.sidebar.title.published.live": "Published and live", + "course-authoring.course-unit.sidebar.title.draft.unpublished": "Draft (unpublished changes)", + "course-authoring.course-unit.sidebar.title.published.not-yet-released": "Published (not yet released)", + "course-authoring.course-unit.sidebar.header.unit-location.title": "Unit location", + "course-authoring.course-unit.sidebar.body.note": "Note: Do not hide graded assignments after they have been released.", + "course-authoring.course-unit.publish.info.previously-published": "Previously published", + "course-authoring.course-unit.publish.info.draft.saved": "Draft saved on {editedOn} by {editedBy}", + "course-authoring.course-unit.publish.info.last.published": "Last published {publishedOn} by {publishedBy}", + "course-authoring.course-unit.release.info.unscheduled": "Unscheduled", + "course-authoring.course-unit.release.info.with-unit": "with {sectionName}", + "course-authoring.course-unit.visibility.is-visible-to.title": "IS VISIBLE TO", + "course-authoring.course-unit.visibility.will-be-visible-to.title": "WILL BE VISIBLE TO", + "course-authoring.course-unit.unit-location.title": "LOCATION ID", + "course-authoring.course-unit.unit-location.description": "To create a link to this unit from an HTML component in this course, enter /jump_to_id/{id} as the URL value", + "course-authoring.course-unit.visibility.checkbox.title": "Hide from learners", + "course-authoring.course-unit.visibility.staff-only.title": "Staff only", + "course-authoring.course-unit.visibility.staff-and-learners.title": "Staff and learners", + "course-authoring.course-unit.visibility.has-explicit-staff-lock.text": "with {date} {sectionName}", + "course-authoring.course-unit.action-buttons.publish.title": "Publish", + "course-authoring.course-unit.action-button.discard-changes.title": "Discard changes", + "course-authoring.course-unit.action-button.copy-unit.title": "Copy unit", + "course-authoring.course-unit.status.release.title": "RELEASE", + "course-authoring.course-unit.status.released.title": "RELEASED", + "course-authoring.course-unit.status.scheduled.title": "SCHEDULED" }