diff --git a/CHANGELOG.md b/CHANGELOG.md index a994536a34..57c5d81929 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unrealeased] +## [2.14.0] - 2022-04-01 + ### Added - Add a `CourseProductList` Component @@ -1607,7 +1609,8 @@ us: - finish integrating the missing pages and improve the sandbox environment; - test and polish the use of richie as a django app / node dependency. -[unreleased]: https://github.com/openfun/richie/compare/v2.13.0...master +[unreleased]: https://github.com/openfun/richie/compare/v2.14.0...master +[2.14.0]: https://github.com/openfun/richie/compare/v2.13.0...v2.14.0 [2.13.0]: https://github.com/openfun/richie/compare/v2.12.0...v2.13.0 [2.12.0]: https://github.com/openfun/richie/compare/v2.11.0...v2.12.0 [2.11.0]: https://github.com/openfun/richie/compare/v2.10.0...v2.11.0 diff --git a/UPGRADE.md b/UPGRADE.md index 42a3cd0d46..f5767a4f27 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -16,16 +16,26 @@ $ make migrate ## Unreleased +## 2.13.x to 2.14.x + - New frontend widgets has been added, you have to update stylesheets as follows: - `_main.scss` ```diff + + @import 'richie-education/scss/tools/utils'; + + @import '../js/components/AddressesManagement/styles'; + + @import '../js/components/CourseProductCertificateItem/styles'; + + @import '../js/components/CourseProductCourseRuns/styles'; + + @import '../js/components/CourseProductItem/styles'; + @import '../js/components/PaymentButton/styles'; + @import '../js/components/RegisteredCreditCard/styles'; + @import '../js/components/SaleTunnel/styles'; + @import '../js/components/SaleTunnelStepPayment/styles'; + @import '../js/components/SaleTunnelStepResume/styles'; + @import '../js/components/SaleTunnelStepValidation/styles'; + + @import '../js/components/StepBreadcrumb/styles'; + ... + + @import './components/templates/richie/multiple-columns'; ``` - Only if you have overridden `_palette.scss`: @@ -43,10 +53,49 @@ $ make migrate + active: $active-scheme, ) ... + +product-item: ( + + base-background: r-color('white'), + + base-border: r-color('purplish-grey'), + + light-color: r-color('white'), + + base-color: r-color('charcoal'), + + lighter-color: r-color('battleship-grey'), + + button-color: r-color('white'), + + button-background: r-color('firebrick6'), + +), +registered-credit-card: ( + title-color: r-color('charcoal'), + base-color: r-color('purplish-grey'), +), + ... + +shadowed-box: ( + + base-background: r-color('white'), + + base-shadow: 0 2px 4px rgba(5, 18, 42, 0.19), + +), + ... + +steps-breadcrumb: ( + + icon-background-active: r-color(purplish-grey), + + icon-background: transparent, + + icon-border-active: transparent, + + icon-border: r-color('light-grey'), + + icon-fill-active: r-color('white'), + + icon-fill: r-color('light-grey'), + + icon-outline: rgba(r-color(purplish-grey), 0.25), + + label-color-active: r-color('charcoal'), + + label-color: r-color('light-grey'), + + separator-background-active: rgba(r-color(purplish-grey), 0.6), + + separator-background: rgba(r-color(purplish-grey), 0.25), + +), + +steps-content: ( + + content-color: r-color(purplish-grey), + + icon-background: r-color(indianred3), + + icon-color: r-color('white'), + + icon-big-background: transparent, + + icon-big-color: r-color('charcoal'), + + icon-success-background: r-color('mantis'), + + icon-success-color: r-color('white'), + + title-color: r-color('charcoal'), + + subtitle-color: r-color(purplish-grey), + +) ``` - The `get_placeholder_plugins` and `get_page_plugins` template tags were merged in a single diff --git a/setup.cfg b/setup.cfg index 81cc1050a1..f55fcd580d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -3,7 +3,7 @@ ;; [metadata] name = richie -version = 2.13.0 +version = 2.14.0 description = A CMS to build learning portals for open education long_description = file:README.md long_description_content_type = text/markdown diff --git a/src/frontend/i18n/locales/ar-SA.json b/src/frontend/i18n/locales/ar-SA.json index aa05424acf..1d8bd9de17 100644 --- a/src/frontend/i18n/locales/ar-SA.json +++ b/src/frontend/i18n/locales/ar-SA.json @@ -1,12 +1,184 @@ { + "components.AddressesManagement.actionCreation": { + "description": "Action name for address creation.", + "message": "creation" + }, + "components.AddressesManagement.actionDeletion": { + "description": "Action name for address deletion.", + "message": "deletion" + }, + "components.AddressesManagement.actionPromotion": { + "description": "Action name for address promotion.", + "message": "promotion" + }, + "components.AddressesManagement.actionUpdate": { + "description": "Action name for address update.", + "message": "update" + }, + "components.AddressesManagement.addAddress": { + "description": "Title of the address creation form", + "message": "Add a new address" + }, + "components.AddressesManagement.addressInput": { + "description": "Label of the \"address\" input", + "message": "Address" + }, + "components.AddressesManagement.cancelButton": { + "description": "Label of the cancel button", + "message": "Cancel" + }, + "components.AddressesManagement.cancelTitleButton": { + "description": "Title of the cancel button", + "message": "Cancel edition" + }, + "components.AddressesManagement.cityInput": { + "description": "Label of the \"city\" input", + "message": "City" + }, + "components.AddressesManagement.closeButton": { + "description": "Label of the close button", + "message": "Go back" + }, + "components.AddressesManagement.countryInput": { + "description": "Label of the \"country\" input", + "message": "Country" + }, + "components.AddressesManagement.deleteButton": { + "description": "Label of the delete button", + "message": "Delete" + }, + "components.AddressesManagement.deleteButtonLabel": { + "description": "Title of the delete button", + "message": "Delete \"{title}\" address" + }, + "components.AddressesManagement.deletionConfirmation": { + "description": "Confirmation message shown to the user when he wants to delete an address", + "message": "Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after." + }, + "components.AddressesManagement.editAddress": { + "description": "Title of the address edit form", + "message": "Update address {title}" + }, + "components.AddressesManagement.editButton": { + "description": "Label of the edit button", + "message": "Edit" + }, + "components.AddressesManagement.editButtonLabel": { + "description": "Title of the edit button", + "message": "Edit \"{title}\" address" + }, + "components.AddressesManagement.error": { + "description": "Error message shown to the user when address creation/update/deletion request fails.", + "message": "An error occurred while address {action}. Please retry later." + }, + "components.AddressesManagement.first_nameInput": { + "description": "Label of the \"first_name\" input", + "message": "Recipient's first name" + }, + "components.AddressesManagement.last_nameInput": { + "description": "Label of the \"last_name\" input", + "message": "Recipient's last name" + }, + "components.AddressesManagement.postcodeInput": { + "description": "Label of the \"postcode\" input", + "message": "Postcode" + }, + "components.AddressesManagement.promoteButtonLabel": { + "description": "Title of the button to set the address as the main one", + "message": "Define \"{title}\" address as main" + }, + "components.AddressesManagement.registeredAddresses": { + "description": "Title of the registered addresses block", + "message": "Your addresses" + }, + "components.AddressesManagement.saveInput": { + "description": "Label of the \"save\" input", + "message": "Save this address" + }, + "components.AddressesManagement.selectButton": { + "description": "Label of the select button", + "message": "Use this address" + }, + "components.AddressesManagement.selectButtonLabel": { + "description": "Title of the select button", + "message": "Select \"{title}\" address" + }, + "components.AddressesManagement.titleInput": { + "description": "Label of the \"title\" input", + "message": "Address title" + }, + "components.AddressesManagement.updateButton": { + "description": "Label of the update button", + "message": "Update this address" + }, + "components.CourseGlimpse.categoryLabel": { + "description": "Category label text for screen reader users", + "message": "Category" + }, + "components.CourseGlimpse.codeIconAlt": { + "description": "Course code logo alternative text for screen reader users", + "message": "Course code" + }, "components.CourseGlimpse.cover": { "description": "Placeholder text when the course we are glimpsing at is missing a cover image", "message": "Cover" }, + "components.CourseGlimpse.organizationIconAlt": { + "description": "Organization logo alternative text for screen reader users", + "message": "Organization" + }, + "components.CourseGlimpseFooter.dateIconAlt": { + "description": "Course date logo alternative text for screen reader users", + "message": "Course date" + }, "components.CourseGlimpseList.courseCount": { "description": "Result count & pagination information for course search. Appears right above search results", "message": "Showing {start, number} to {end, number} of {courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search" }, + "components.CourseGlimpseList.offscreenCourseCount": { + "description": "Short result count information for course search. Only for screen readers", + "message": "{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search" + }, + "components.CourseProductCertificateItem.certificateExplanation": { + "description": "Text displayed when the product certificate has no description", + "message": "You will be able to download your certificate once you will pass all course runs." + }, + "components.CourseProductCertificateItem.congratulations": { + "description": "Congratulation message when user has passed the course.", + "message": "Congratulations, you passed this course!" + }, + "components.CourseProductCertificateItem.download": { + "description": "Button label to download the certificate", + "message": "Download" + }, + "components.CourseProductCertificateItem.generatingCertificate": { + "description": "Accessible label displayed while certificate is being generated.", + "message": "Certificate is being generated..." + }, + "components.CourseProductItem.enrolled": { + "description": "Message displayed when authenticated user owned the product", + "message": "Enrolled" + }, + "components.CourseProductsList.end": { + "description": "End label displayed in the header of course run dates section", + "message": "End" + }, + "components.CourseProductsList.loadingInitial": { + "description": "Accessible text for the initial loading spinner displayed when course is fetching", + "message": "Loading course information..." + }, + "components.CourseProductsList.start": { + "description": "Start label displayed in the header of course run dates section", + "message": "Start" + }, + "components.CourseProductsLists.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseProductsLists.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, "components.CourseRunEnrollment.enroll": { "description": "CTA for users who can enroll in the course run or could enroll if they logged in.", "message": "Enroll now" @@ -35,10 +207,58 @@ "description": "Helper text in the enroll button for non logged in users", "message": "Log in to enroll" }, + "components.CourseRunList.enrollFromTo": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, "components.DesktopUserMenu.menuPurpose": { "description": "Accessible label for user menu button", "message": "Access to your profile settings" }, + "components.EnrollableCourseRunList.ariaSelectCourseRun": { + "description": "Accessible label used by screen reader when user checked a course run radio input.", + "message": "Select course run from {start} to {end}." + }, + "components.EnrollableCourseRunList.enroll": { + "description": "Text label for the enroll button", + "message": "Enroll" + }, + "components.EnrollableCourseRunList.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {enrollment_start} to {enrollment_end}" + }, + "components.EnrollableCourseRunList.enrolling": { + "description": "Label displayed when a request to enroll to a course run is loading", + "message": "Enrolling..." + }, + "components.EnrollableCourseRunList.enrollmentNotYetOpened": { + "description": "Text label for the enroll cta when enrollment is not yet opened", + "message": "Enrollment will open on {enrollment_start}" + }, + "components.EnrollableCourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, + "components.EnrollableCourseRunList.selectCourseRun": { + "description": "Label displayed when user do not have select a course run.", + "message": "Select a course run" + }, + "components.EnrolledCourseRun.goToCourse": { + "description": "CTA displayed when user is enrolled to the course run.", + "message": "Go to course" + }, + "components.EnrolledCourseRun.unroll": { + "description": "Button label to unroll.", + "message": "Unroll" + }, + "components.EnrolledCourseRun.unrolling": { + "description": "Accessible label displayed when user is being unrolled.", + "message": "Unrolling..." + }, "components.LanguageSelector.currentlySelected": { "description": "Accessible hint to mark the currently selected language in the language selector", "message": "(currently selected)" @@ -83,10 +303,138 @@ "description": "Accessibility helper for pagination, added on the previous page link.", "message": "Previous page {page}" }, + "components.PaymentButton.errorAbort": { + "description": "Error message shown when user aborts the payment.", + "message": "You have aborted the payment." + }, + "components.PaymentButton.errorAborting": { + "description": "Error message shown when user asks to abort the payment.", + "message": "Aborting the payment..." + }, + "components.PaymentButton.errorDefault": { + "description": "Error message shown when payment creation request failed.", + "message": "An error occurred during payment. Please retry later." + }, + "components.PaymentButton.pay": { + "description": "CTA label to proceed to the payment of the product", + "message": "Pay {price}" + }, + "components.PaymentButton.payInOneClick": { + "description": "CTA label to proceed to the one click payment of the product", + "message": "Pay in one click {price}" + }, + "components.PaymentButton.paymentInProgress": { + "description": "Label for screen reader when a payment is in progress.", + "message": "Payment in progress" + }, + "components.PurchasedProductMenu.actionsRelated": { + "description": "Accessible label for the purchased product menu", + "message": "Other actions related to this product" + }, + "components.PurchasedProductMenu.downloadInvoice": { + "description": "Label for selector item to download invoice", + "message": "Download invoice" + }, + "components.PurchasedProductMenu.generatingInvoice": { + "description": "Accessible label when invoice is being generated", + "message": "Invoice is being generated..." + }, + "components.RegisteredCreditCard.expirationDate": { + "description": "Credit card expiration date label", + "message": "Expiration date: {expirationDate}" + }, + "components.RegisteredCreditCard.inputAriaLabel": { + "description": "ARIA Label read by screen reader to inform which card is focused", + "message": "{selected, select, true {Unselect} other {Select}} {title}'s card" + }, "components.RootSearchSuggestField.searchFieldPlaceholder": { "description": "Placeholder text displayed in the search field when it is empty.", "message": "Search for courses" }, + "components.SaleTunnel.closeDialog": { + "description": "ARIA label used by screenreader to inform that the close dialog button is selected", + "message": "Close the dialog" + }, + "components.SaleTunnel.loginToPurchase": { + "description": "Label displayed inside the product's CTA when user is not logged in", + "message": "Login to purchase" + }, + "components.SaleTunnel.stepPayment": { + "description": "Label of the Payment step", + "message": "Payment" + }, + "components.SaleTunnel.stepResume": { + "description": "Label of the Resume step", + "message": "Resume" + }, + "components.SaleTunnel.stepValidation": { + "description": "Label of the Validation step", + "message": "Validation" + }, + "components.SaleTunnelStepPayment.registeredCardSectionTitle": { + "description": "Label for the registered credit cards section", + "message": "Your registered credit card" + }, + "components.SaleTunnelStepPayment.resumeTile": { + "description": "Label for the resume tile", + "message": "You are about to purchase" + }, + "components.SaleTunnelStepPayment.userBillingAddressAddLabel": { + "description": "Label for the billing address add button", + "message": "Add an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressCreateLabel": { + "description": "Label for the billing address create button", + "message": "Create an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressFieldset": { + "description": "Label for the billing address fieldset", + "message": "Billing address" + }, + "components.SaleTunnelStepPayment.userBillingAddressNoEntry": { + "description": "Message displayed when the user has no address.", + "message": "You have not yet a billing address." + }, + "components.SaleTunnelStepPayment.userBillingAddressSelectLabel": { + "description": "Label for the billing address select", + "message": "Select a billing address" + }, + "components.SaleTunnelStepPayment.userTile": { + "description": "Label for the user information tile", + "message": "Your personal information" + }, + "components.SaleTunnelStepResume.congratulations": { + "description": "Text displayed to thank user for his order", + "message": "Congratulations!" + }, + "components.SaleTunnelStepResume.cta": { + "description": "Label to the call to action to close sale tunnel", + "message": "Start this course now!" + }, + "components.SaleTunnelStepResume.successDetailMessage": { + "description": "Text to remind that order's invoice will be send by email soon", + "message": "You will receive your invoice by email in a few moments." + }, + "components.SaleTunnelStepResume.successMessage": { + "description": "Message to confirm that order has been created", + "message": "Your order has been successfully created." + }, + "components.SaleTunnelStepValidation.availableCourseRuns": { + "description": "Course runs available text", + "message": "{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available" + }, + "components.SaleTunnelStepValidation.courseRunDates": { + "description": "Course run date text", + "message": "From {start} to {end}" + }, + "components.SaleTunnelStepValidation.includingVAT": { + "description": "Text displayed next to the price to mention this is the price including VAT.", + "message": "including VAT" + }, + "components.SaleTunnelStepValidation.proceedToPayment": { + "description": "CTA to go to payment step", + "message": "Proceed to payment" + }, "components.Search.errorMessage": { "description": "Error message for Search view when the request to load courses fails", "message": "Something's wrong! Courses could not be loaded." @@ -95,6 +443,10 @@ "description": "Accessibility text for the button/icon that toggles *off* the filters pane on mobile", "message": "Hide filters pane" }, + "components.Search.resultsTitle": { + "description": "Title for the search results pane in course search (not shown, made for screen reader users).", + "message": "Search results" + }, "components.Search.showFiltersPane": { "description": "Accessibility text for the button/icon that toggles *on* the filters pane on mobile", "message": "Show filters pane" diff --git a/src/frontend/i18n/locales/es-ES.json b/src/frontend/i18n/locales/es-ES.json index a330538249..c396682d00 100644 --- a/src/frontend/i18n/locales/es-ES.json +++ b/src/frontend/i18n/locales/es-ES.json @@ -1,12 +1,184 @@ { + "components.AddressesManagement.actionCreation": { + "description": "Action name for address creation.", + "message": "creation" + }, + "components.AddressesManagement.actionDeletion": { + "description": "Action name for address deletion.", + "message": "deletion" + }, + "components.AddressesManagement.actionPromotion": { + "description": "Action name for address promotion.", + "message": "promotion" + }, + "components.AddressesManagement.actionUpdate": { + "description": "Action name for address update.", + "message": "update" + }, + "components.AddressesManagement.addAddress": { + "description": "Title of the address creation form", + "message": "Add a new address" + }, + "components.AddressesManagement.addressInput": { + "description": "Label of the \"address\" input", + "message": "Address" + }, + "components.AddressesManagement.cancelButton": { + "description": "Label of the cancel button", + "message": "Cancel" + }, + "components.AddressesManagement.cancelTitleButton": { + "description": "Title of the cancel button", + "message": "Cancel edition" + }, + "components.AddressesManagement.cityInput": { + "description": "Label of the \"city\" input", + "message": "City" + }, + "components.AddressesManagement.closeButton": { + "description": "Label of the close button", + "message": "Go back" + }, + "components.AddressesManagement.countryInput": { + "description": "Label of the \"country\" input", + "message": "Country" + }, + "components.AddressesManagement.deleteButton": { + "description": "Label of the delete button", + "message": "Delete" + }, + "components.AddressesManagement.deleteButtonLabel": { + "description": "Title of the delete button", + "message": "Delete \"{title}\" address" + }, + "components.AddressesManagement.deletionConfirmation": { + "description": "Confirmation message shown to the user when he wants to delete an address", + "message": "Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after." + }, + "components.AddressesManagement.editAddress": { + "description": "Title of the address edit form", + "message": "Update address {title}" + }, + "components.AddressesManagement.editButton": { + "description": "Label of the edit button", + "message": "Edit" + }, + "components.AddressesManagement.editButtonLabel": { + "description": "Title of the edit button", + "message": "Edit \"{title}\" address" + }, + "components.AddressesManagement.error": { + "description": "Error message shown to the user when address creation/update/deletion request fails.", + "message": "An error occurred while address {action}. Please retry later." + }, + "components.AddressesManagement.first_nameInput": { + "description": "Label of the \"first_name\" input", + "message": "Recipient's first name" + }, + "components.AddressesManagement.last_nameInput": { + "description": "Label of the \"last_name\" input", + "message": "Recipient's last name" + }, + "components.AddressesManagement.postcodeInput": { + "description": "Label of the \"postcode\" input", + "message": "Postcode" + }, + "components.AddressesManagement.promoteButtonLabel": { + "description": "Title of the button to set the address as the main one", + "message": "Define \"{title}\" address as main" + }, + "components.AddressesManagement.registeredAddresses": { + "description": "Title of the registered addresses block", + "message": "Your addresses" + }, + "components.AddressesManagement.saveInput": { + "description": "Label of the \"save\" input", + "message": "Save this address" + }, + "components.AddressesManagement.selectButton": { + "description": "Label of the select button", + "message": "Use this address" + }, + "components.AddressesManagement.selectButtonLabel": { + "description": "Title of the select button", + "message": "Select \"{title}\" address" + }, + "components.AddressesManagement.titleInput": { + "description": "Label of the \"title\" input", + "message": "Address title" + }, + "components.AddressesManagement.updateButton": { + "description": "Label of the update button", + "message": "Update this address" + }, + "components.CourseGlimpse.categoryLabel": { + "description": "Category label text for screen reader users", + "message": "Category" + }, + "components.CourseGlimpse.codeIconAlt": { + "description": "Course code logo alternative text for screen reader users", + "message": "Course code" + }, "components.CourseGlimpse.cover": { "description": "Placeholder text when the course we are glimpsing at is missing a cover image", "message": "Portada" }, + "components.CourseGlimpse.organizationIconAlt": { + "description": "Organization logo alternative text for screen reader users", + "message": "Organization" + }, + "components.CourseGlimpseFooter.dateIconAlt": { + "description": "Course date logo alternative text for screen reader users", + "message": "Course date" + }, "components.CourseGlimpseList.courseCount": { "description": "Result count & pagination information for course search. Appears right above search results", "message": "Mostrando {start, number} a {end, number} de {courseCount, number} ¡ {courseCount, plural, one {curso} other {cursos}} que coinciden con su búsqueda" }, + "components.CourseGlimpseList.offscreenCourseCount": { + "description": "Short result count information for course search. Only for screen readers", + "message": "{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search" + }, + "components.CourseProductCertificateItem.certificateExplanation": { + "description": "Text displayed when the product certificate has no description", + "message": "You will be able to download your certificate once you will pass all course runs." + }, + "components.CourseProductCertificateItem.congratulations": { + "description": "Congratulation message when user has passed the course.", + "message": "Congratulations, you passed this course!" + }, + "components.CourseProductCertificateItem.download": { + "description": "Button label to download the certificate", + "message": "Download" + }, + "components.CourseProductCertificateItem.generatingCertificate": { + "description": "Accessible label displayed while certificate is being generated.", + "message": "Certificate is being generated..." + }, + "components.CourseProductItem.enrolled": { + "description": "Message displayed when authenticated user owned the product", + "message": "Enrolled" + }, + "components.CourseProductsList.end": { + "description": "End label displayed in the header of course run dates section", + "message": "End" + }, + "components.CourseProductsList.loadingInitial": { + "description": "Accessible text for the initial loading spinner displayed when course is fetching", + "message": "Loading course information..." + }, + "components.CourseProductsList.start": { + "description": "Start label displayed in the header of course run dates section", + "message": "Start" + }, + "components.CourseProductsLists.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseProductsLists.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, "components.CourseRunEnrollment.enroll": { "description": "CTA for users who can enroll in the course run or could enroll if they logged in.", "message": "Inscribirse ahora" @@ -35,10 +207,58 @@ "description": "Helper text in the enroll button for non logged in users", "message": "Inicia sesión para inscribirse" }, + "components.CourseRunList.enrollFromTo": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, "components.DesktopUserMenu.menuPurpose": { "description": "Accessible label for user menu button", "message": "Acceso a la configuración de su perfil" }, + "components.EnrollableCourseRunList.ariaSelectCourseRun": { + "description": "Accessible label used by screen reader when user checked a course run radio input.", + "message": "Select course run from {start} to {end}." + }, + "components.EnrollableCourseRunList.enroll": { + "description": "Text label for the enroll button", + "message": "Enroll" + }, + "components.EnrollableCourseRunList.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {enrollment_start} to {enrollment_end}" + }, + "components.EnrollableCourseRunList.enrolling": { + "description": "Label displayed when a request to enroll to a course run is loading", + "message": "Enrolling..." + }, + "components.EnrollableCourseRunList.enrollmentNotYetOpened": { + "description": "Text label for the enroll cta when enrollment is not yet opened", + "message": "Enrollment will open on {enrollment_start}" + }, + "components.EnrollableCourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, + "components.EnrollableCourseRunList.selectCourseRun": { + "description": "Label displayed when user do not have select a course run.", + "message": "Select a course run" + }, + "components.EnrolledCourseRun.goToCourse": { + "description": "CTA displayed when user is enrolled to the course run.", + "message": "Go to course" + }, + "components.EnrolledCourseRun.unroll": { + "description": "Button label to unroll.", + "message": "Unroll" + }, + "components.EnrolledCourseRun.unrolling": { + "description": "Accessible label displayed when user is being unrolled.", + "message": "Unrolling..." + }, "components.LanguageSelector.currentlySelected": { "description": "Accessible hint to mark the currently selected language in the language selector", "message": "(actualmente seleccionado)" @@ -83,10 +303,138 @@ "description": "Accessibility helper for pagination, added on the previous page link.", "message": "Página anterior {page}" }, + "components.PaymentButton.errorAbort": { + "description": "Error message shown when user aborts the payment.", + "message": "Ha cancelado el pago." + }, + "components.PaymentButton.errorAborting": { + "description": "Error message shown when user asks to abort the payment.", + "message": "Cancelando el pago..." + }, + "components.PaymentButton.errorDefault": { + "description": "Error message shown when payment creation request failed.", + "message": "Se ha producido un error durante el pago. Vuelva a intentarlo más tarde." + }, + "components.PaymentButton.pay": { + "description": "CTA label to proceed to the payment of the product", + "message": "Pagar {price}€" + }, + "components.PaymentButton.payInOneClick": { + "description": "CTA label to proceed to the one click payment of the product", + "message": "Pague en un solo clic {price}" + }, + "components.PaymentButton.paymentInProgress": { + "description": "Label for screen reader when a payment is in progress.", + "message": "Pago en curso" + }, + "components.PurchasedProductMenu.actionsRelated": { + "description": "Accessible label for the purchased product menu", + "message": "Other actions related to this product" + }, + "components.PurchasedProductMenu.downloadInvoice": { + "description": "Label for selector item to download invoice", + "message": "Download invoice" + }, + "components.PurchasedProductMenu.generatingInvoice": { + "description": "Accessible label when invoice is being generated", + "message": "Invoice is being generated..." + }, + "components.RegisteredCreditCard.expirationDate": { + "description": "Credit card expiration date label", + "message": "Expiration date: {expirationDate}" + }, + "components.RegisteredCreditCard.inputAriaLabel": { + "description": "ARIA Label read by screen reader to inform which card is focused", + "message": "{selected, select, true {Unselect} other {Select}} {title}'s card" + }, "components.RootSearchSuggestField.searchFieldPlaceholder": { "description": "Placeholder text displayed in the search field when it is empty.", "message": "Buscar cursos" }, + "components.SaleTunnel.closeDialog": { + "description": "ARIA label used by screenreader to inform that the close dialog button is selected", + "message": "Close the dialog" + }, + "components.SaleTunnel.loginToPurchase": { + "description": "Label displayed inside the product's CTA when user is not logged in", + "message": "Login to purchase" + }, + "components.SaleTunnel.stepPayment": { + "description": "Label of the Payment step", + "message": "Payment" + }, + "components.SaleTunnel.stepResume": { + "description": "Label of the Resume step", + "message": "Resume" + }, + "components.SaleTunnel.stepValidation": { + "description": "Label of the Validation step", + "message": "Validation" + }, + "components.SaleTunnelStepPayment.registeredCardSectionTitle": { + "description": "Label for the registered credit cards section", + "message": "Your registered credit card" + }, + "components.SaleTunnelStepPayment.resumeTile": { + "description": "Label for the resume tile", + "message": "You are about to purchase" + }, + "components.SaleTunnelStepPayment.userBillingAddressAddLabel": { + "description": "Label for the billing address add button", + "message": "Add an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressCreateLabel": { + "description": "Label for the billing address create button", + "message": "Create an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressFieldset": { + "description": "Label for the billing address fieldset", + "message": "Billing address" + }, + "components.SaleTunnelStepPayment.userBillingAddressNoEntry": { + "description": "Message displayed when the user has no address.", + "message": "You have not yet a billing address." + }, + "components.SaleTunnelStepPayment.userBillingAddressSelectLabel": { + "description": "Label for the billing address select", + "message": "Select a billing address" + }, + "components.SaleTunnelStepPayment.userTile": { + "description": "Label for the user information tile", + "message": "Your personal information" + }, + "components.SaleTunnelStepResume.congratulations": { + "description": "Text displayed to thank user for his order", + "message": "Congratulations!" + }, + "components.SaleTunnelStepResume.cta": { + "description": "Label to the call to action to close sale tunnel", + "message": "Start this course now!" + }, + "components.SaleTunnelStepResume.successDetailMessage": { + "description": "Text to remind that order's invoice will be send by email soon", + "message": "You will receive your invoice by email in a few moments." + }, + "components.SaleTunnelStepResume.successMessage": { + "description": "Message to confirm that order has been created", + "message": "Your order has been successfully created." + }, + "components.SaleTunnelStepValidation.availableCourseRuns": { + "description": "Course runs available text", + "message": "{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available" + }, + "components.SaleTunnelStepValidation.courseRunDates": { + "description": "Course run date text", + "message": "From {start} to {end}" + }, + "components.SaleTunnelStepValidation.includingVAT": { + "description": "Text displayed next to the price to mention this is the price including VAT.", + "message": "including VAT" + }, + "components.SaleTunnelStepValidation.proceedToPayment": { + "description": "CTA to go to payment step", + "message": "Proceed to payment" + }, "components.Search.errorMessage": { "description": "Error message for Search view when the request to load courses fails", "message": "¡Algo está mal! No se han podido cargar los cursos." @@ -95,6 +443,10 @@ "description": "Accessibility text for the button/icon that toggles *off* the filters pane on mobile", "message": "Ocultar panel de filtros" }, + "components.Search.resultsTitle": { + "description": "Title for the search results pane in course search (not shown, made for screen reader users).", + "message": "Resultados de búsqueda" + }, "components.Search.showFiltersPane": { "description": "Accessibility text for the button/icon that toggles *on* the filters pane on mobile", "message": "Mostrar panel de filtros" diff --git a/src/frontend/i18n/locales/fa-IR.json b/src/frontend/i18n/locales/fa-IR.json new file mode 100644 index 0000000000..1d8bd9de17 --- /dev/null +++ b/src/frontend/i18n/locales/fa-IR.json @@ -0,0 +1,542 @@ +{ + "components.AddressesManagement.actionCreation": { + "description": "Action name for address creation.", + "message": "creation" + }, + "components.AddressesManagement.actionDeletion": { + "description": "Action name for address deletion.", + "message": "deletion" + }, + "components.AddressesManagement.actionPromotion": { + "description": "Action name for address promotion.", + "message": "promotion" + }, + "components.AddressesManagement.actionUpdate": { + "description": "Action name for address update.", + "message": "update" + }, + "components.AddressesManagement.addAddress": { + "description": "Title of the address creation form", + "message": "Add a new address" + }, + "components.AddressesManagement.addressInput": { + "description": "Label of the \"address\" input", + "message": "Address" + }, + "components.AddressesManagement.cancelButton": { + "description": "Label of the cancel button", + "message": "Cancel" + }, + "components.AddressesManagement.cancelTitleButton": { + "description": "Title of the cancel button", + "message": "Cancel edition" + }, + "components.AddressesManagement.cityInput": { + "description": "Label of the \"city\" input", + "message": "City" + }, + "components.AddressesManagement.closeButton": { + "description": "Label of the close button", + "message": "Go back" + }, + "components.AddressesManagement.countryInput": { + "description": "Label of the \"country\" input", + "message": "Country" + }, + "components.AddressesManagement.deleteButton": { + "description": "Label of the delete button", + "message": "Delete" + }, + "components.AddressesManagement.deleteButtonLabel": { + "description": "Title of the delete button", + "message": "Delete \"{title}\" address" + }, + "components.AddressesManagement.deletionConfirmation": { + "description": "Confirmation message shown to the user when he wants to delete an address", + "message": "Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after." + }, + "components.AddressesManagement.editAddress": { + "description": "Title of the address edit form", + "message": "Update address {title}" + }, + "components.AddressesManagement.editButton": { + "description": "Label of the edit button", + "message": "Edit" + }, + "components.AddressesManagement.editButtonLabel": { + "description": "Title of the edit button", + "message": "Edit \"{title}\" address" + }, + "components.AddressesManagement.error": { + "description": "Error message shown to the user when address creation/update/deletion request fails.", + "message": "An error occurred while address {action}. Please retry later." + }, + "components.AddressesManagement.first_nameInput": { + "description": "Label of the \"first_name\" input", + "message": "Recipient's first name" + }, + "components.AddressesManagement.last_nameInput": { + "description": "Label of the \"last_name\" input", + "message": "Recipient's last name" + }, + "components.AddressesManagement.postcodeInput": { + "description": "Label of the \"postcode\" input", + "message": "Postcode" + }, + "components.AddressesManagement.promoteButtonLabel": { + "description": "Title of the button to set the address as the main one", + "message": "Define \"{title}\" address as main" + }, + "components.AddressesManagement.registeredAddresses": { + "description": "Title of the registered addresses block", + "message": "Your addresses" + }, + "components.AddressesManagement.saveInput": { + "description": "Label of the \"save\" input", + "message": "Save this address" + }, + "components.AddressesManagement.selectButton": { + "description": "Label of the select button", + "message": "Use this address" + }, + "components.AddressesManagement.selectButtonLabel": { + "description": "Title of the select button", + "message": "Select \"{title}\" address" + }, + "components.AddressesManagement.titleInput": { + "description": "Label of the \"title\" input", + "message": "Address title" + }, + "components.AddressesManagement.updateButton": { + "description": "Label of the update button", + "message": "Update this address" + }, + "components.CourseGlimpse.categoryLabel": { + "description": "Category label text for screen reader users", + "message": "Category" + }, + "components.CourseGlimpse.codeIconAlt": { + "description": "Course code logo alternative text for screen reader users", + "message": "Course code" + }, + "components.CourseGlimpse.cover": { + "description": "Placeholder text when the course we are glimpsing at is missing a cover image", + "message": "Cover" + }, + "components.CourseGlimpse.organizationIconAlt": { + "description": "Organization logo alternative text for screen reader users", + "message": "Organization" + }, + "components.CourseGlimpseFooter.dateIconAlt": { + "description": "Course date logo alternative text for screen reader users", + "message": "Course date" + }, + "components.CourseGlimpseList.courseCount": { + "description": "Result count & pagination information for course search. Appears right above search results", + "message": "Showing {start, number} to {end, number} of {courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search" + }, + "components.CourseGlimpseList.offscreenCourseCount": { + "description": "Short result count information for course search. Only for screen readers", + "message": "{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search" + }, + "components.CourseProductCertificateItem.certificateExplanation": { + "description": "Text displayed when the product certificate has no description", + "message": "You will be able to download your certificate once you will pass all course runs." + }, + "components.CourseProductCertificateItem.congratulations": { + "description": "Congratulation message when user has passed the course.", + "message": "Congratulations, you passed this course!" + }, + "components.CourseProductCertificateItem.download": { + "description": "Button label to download the certificate", + "message": "Download" + }, + "components.CourseProductCertificateItem.generatingCertificate": { + "description": "Accessible label displayed while certificate is being generated.", + "message": "Certificate is being generated..." + }, + "components.CourseProductItem.enrolled": { + "description": "Message displayed when authenticated user owned the product", + "message": "Enrolled" + }, + "components.CourseProductsList.end": { + "description": "End label displayed in the header of course run dates section", + "message": "End" + }, + "components.CourseProductsList.loadingInitial": { + "description": "Accessible text for the initial loading spinner displayed when course is fetching", + "message": "Loading course information..." + }, + "components.CourseProductsList.start": { + "description": "Start label displayed in the header of course run dates section", + "message": "Start" + }, + "components.CourseProductsLists.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseProductsLists.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, + "components.CourseRunEnrollment.enroll": { + "description": "CTA for users who can enroll in the course run or could enroll if they logged in.", + "message": "Enroll now" + }, + "components.CourseRunEnrollment.enrolled": { + "description": "Help text for users who see the \"Go to course\" CTA on course run enrollment", + "message": "You are enrolled in this course run" + }, + "components.CourseRunEnrollment.enrollmentClosed": { + "description": "Help text replacing the CTA on a course run when enrollment is closed.", + "message": "Enrollment in this course run is closed at the moment" + }, + "components.CourseRunEnrollment.enrollmentFailed": { + "description": "Help text below the \"Enroll now\" CTA when an enrollment attempt has already failed.", + "message": "Your enrollment request failed." + }, + "components.CourseRunEnrollment.goToCourse": { + "description": "CTA for users who are already enrolled in a course run.", + "message": "Go to course" + }, + "components.CourseRunEnrollment.loadingInitial": { + "description": "Accessible text for the initial loading spinner on the course run enrollment button.", + "message": "Loading enrollment information..." + }, + "components.CourseRunEnrollment.loginToEnroll": { + "description": "Helper text in the enroll button for non logged in users", + "message": "Log in to enroll" + }, + "components.CourseRunList.enrollFromTo": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, + "components.DesktopUserMenu.menuPurpose": { + "description": "Accessible label for user menu button", + "message": "Access to your profile settings" + }, + "components.EnrollableCourseRunList.ariaSelectCourseRun": { + "description": "Accessible label used by screen reader when user checked a course run radio input.", + "message": "Select course run from {start} to {end}." + }, + "components.EnrollableCourseRunList.enroll": { + "description": "Text label for the enroll button", + "message": "Enroll" + }, + "components.EnrollableCourseRunList.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {enrollment_start} to {enrollment_end}" + }, + "components.EnrollableCourseRunList.enrolling": { + "description": "Label displayed when a request to enroll to a course run is loading", + "message": "Enrolling..." + }, + "components.EnrollableCourseRunList.enrollmentNotYetOpened": { + "description": "Text label for the enroll cta when enrollment is not yet opened", + "message": "Enrollment will open on {enrollment_start}" + }, + "components.EnrollableCourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, + "components.EnrollableCourseRunList.selectCourseRun": { + "description": "Label displayed when user do not have select a course run.", + "message": "Select a course run" + }, + "components.EnrolledCourseRun.goToCourse": { + "description": "CTA displayed when user is enrolled to the course run.", + "message": "Go to course" + }, + "components.EnrolledCourseRun.unroll": { + "description": "Button label to unroll.", + "message": "Unroll" + }, + "components.EnrolledCourseRun.unrolling": { + "description": "Accessible label displayed when user is being unrolled.", + "message": "Unrolling..." + }, + "components.LanguageSelector.currentlySelected": { + "description": "Accessible hint to mark the currently selected language in the language selector", + "message": "(currently selected)" + }, + "components.LanguageSelector.languages": { + "description": "Default text for the language selector button when the current language cannot be identified", + "message": "Languages" + }, + "components.LanguageSelector.selectLanguage": { + "description": "Accessible label for the language selector button", + "message": "Select a language:" + }, + "components.LanguageSelector.switchToLanguage": { + "description": "Accessible link title for the language switching links in language selector", + "message": "Switch to {language}" + }, + "components.PaginateCourseSearch.currentlyReadingLastPageN": { + "description": "Accessibility helper in pagination, shown next to the current page number when it is the last page.", + "message": "Currently reading last page {page}" + }, + "components.PaginateCourseSearch.currentlyReadingPageN": { + "description": "Accessibility helper in pagination, shown next to the current page number when it is not the last page.", + "message": "Currently reading page {page}" + }, + "components.PaginateCourseSearch.lastPageN": { + "description": "Accessibility helper for pagination, added on the last page link.", + "message": "Last page {page}" + }, + "components.PaginateCourseSearch.nextPageN": { + "description": "Accessibility helper for pagination, added on the next page link.", + "message": "Next page {page}" + }, + "components.PaginateCourseSearch.pageN": { + "description": "Accessibility helper for pagination, added on all page links for screen readers,\n only shown next to \"page 1\" visually.", + "message": "Page {page}" + }, + "components.PaginateCourseSearch.pagination": { + "description": "Label for the pagination navigation in course search results.", + "message": "Pagination" + }, + "components.PaginateCourseSearch.previousPageN": { + "description": "Accessibility helper for pagination, added on the previous page link.", + "message": "Previous page {page}" + }, + "components.PaymentButton.errorAbort": { + "description": "Error message shown when user aborts the payment.", + "message": "You have aborted the payment." + }, + "components.PaymentButton.errorAborting": { + "description": "Error message shown when user asks to abort the payment.", + "message": "Aborting the payment..." + }, + "components.PaymentButton.errorDefault": { + "description": "Error message shown when payment creation request failed.", + "message": "An error occurred during payment. Please retry later." + }, + "components.PaymentButton.pay": { + "description": "CTA label to proceed to the payment of the product", + "message": "Pay {price}" + }, + "components.PaymentButton.payInOneClick": { + "description": "CTA label to proceed to the one click payment of the product", + "message": "Pay in one click {price}" + }, + "components.PaymentButton.paymentInProgress": { + "description": "Label for screen reader when a payment is in progress.", + "message": "Payment in progress" + }, + "components.PurchasedProductMenu.actionsRelated": { + "description": "Accessible label for the purchased product menu", + "message": "Other actions related to this product" + }, + "components.PurchasedProductMenu.downloadInvoice": { + "description": "Label for selector item to download invoice", + "message": "Download invoice" + }, + "components.PurchasedProductMenu.generatingInvoice": { + "description": "Accessible label when invoice is being generated", + "message": "Invoice is being generated..." + }, + "components.RegisteredCreditCard.expirationDate": { + "description": "Credit card expiration date label", + "message": "Expiration date: {expirationDate}" + }, + "components.RegisteredCreditCard.inputAriaLabel": { + "description": "ARIA Label read by screen reader to inform which card is focused", + "message": "{selected, select, true {Unselect} other {Select}} {title}'s card" + }, + "components.RootSearchSuggestField.searchFieldPlaceholder": { + "description": "Placeholder text displayed in the search field when it is empty.", + "message": "Search for courses" + }, + "components.SaleTunnel.closeDialog": { + "description": "ARIA label used by screenreader to inform that the close dialog button is selected", + "message": "Close the dialog" + }, + "components.SaleTunnel.loginToPurchase": { + "description": "Label displayed inside the product's CTA when user is not logged in", + "message": "Login to purchase" + }, + "components.SaleTunnel.stepPayment": { + "description": "Label of the Payment step", + "message": "Payment" + }, + "components.SaleTunnel.stepResume": { + "description": "Label of the Resume step", + "message": "Resume" + }, + "components.SaleTunnel.stepValidation": { + "description": "Label of the Validation step", + "message": "Validation" + }, + "components.SaleTunnelStepPayment.registeredCardSectionTitle": { + "description": "Label for the registered credit cards section", + "message": "Your registered credit card" + }, + "components.SaleTunnelStepPayment.resumeTile": { + "description": "Label for the resume tile", + "message": "You are about to purchase" + }, + "components.SaleTunnelStepPayment.userBillingAddressAddLabel": { + "description": "Label for the billing address add button", + "message": "Add an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressCreateLabel": { + "description": "Label for the billing address create button", + "message": "Create an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressFieldset": { + "description": "Label for the billing address fieldset", + "message": "Billing address" + }, + "components.SaleTunnelStepPayment.userBillingAddressNoEntry": { + "description": "Message displayed when the user has no address.", + "message": "You have not yet a billing address." + }, + "components.SaleTunnelStepPayment.userBillingAddressSelectLabel": { + "description": "Label for the billing address select", + "message": "Select a billing address" + }, + "components.SaleTunnelStepPayment.userTile": { + "description": "Label for the user information tile", + "message": "Your personal information" + }, + "components.SaleTunnelStepResume.congratulations": { + "description": "Text displayed to thank user for his order", + "message": "Congratulations!" + }, + "components.SaleTunnelStepResume.cta": { + "description": "Label to the call to action to close sale tunnel", + "message": "Start this course now!" + }, + "components.SaleTunnelStepResume.successDetailMessage": { + "description": "Text to remind that order's invoice will be send by email soon", + "message": "You will receive your invoice by email in a few moments." + }, + "components.SaleTunnelStepResume.successMessage": { + "description": "Message to confirm that order has been created", + "message": "Your order has been successfully created." + }, + "components.SaleTunnelStepValidation.availableCourseRuns": { + "description": "Course runs available text", + "message": "{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available" + }, + "components.SaleTunnelStepValidation.courseRunDates": { + "description": "Course run date text", + "message": "From {start} to {end}" + }, + "components.SaleTunnelStepValidation.includingVAT": { + "description": "Text displayed next to the price to mention this is the price including VAT.", + "message": "including VAT" + }, + "components.SaleTunnelStepValidation.proceedToPayment": { + "description": "CTA to go to payment step", + "message": "Proceed to payment" + }, + "components.Search.errorMessage": { + "description": "Error message for Search view when the request to load courses fails", + "message": "Something's wrong! Courses could not be loaded." + }, + "components.Search.hideFiltersPane": { + "description": "Accessibility text for the button/icon that toggles *off* the filters pane on mobile", + "message": "Hide filters pane" + }, + "components.Search.resultsTitle": { + "description": "Title for the search results pane in course search (not shown, made for screen reader users).", + "message": "Search results" + }, + "components.Search.showFiltersPane": { + "description": "Accessibility text for the button/icon that toggles *on* the filters pane on mobile", + "message": "Show filters pane" + }, + "components.Search.spinnerText": { + "description": "Accessibility text for the spinner while search results are being loaded", + "message": "Loading search results..." + }, + "components.Search.textQueryLengthWarning": { + "description": "Warning message in search results when the text query is not long enough to be used.", + "message": "Text search requires at least 3 characters. { query } is not long enough to search. Search results will not be affected by this query." + }, + "components.SearchFilterGroupModal.closeModal": { + "description": "Text for the button to close the search filters modal", + "message": "Close modal" + }, + "components.SearchFilterGroupModal.error": { + "description": "Error message when the search for more filter value fails in the search filters modal.", + "message": "There was an error while searching for {filterName}." + }, + "components.SearchFilterGroupModal.inputLabel": { + "description": "Accessible label for the search input in the search filter modal.", + "message": "Search for filters to add" + }, + "components.SearchFilterGroupModal.inputPlaceholder": { + "description": "Placeholder message for the search input in the search filter modal.", + "message": "Search in { filterName }" + }, + "components.SearchFilterGroupModal.loadMoreResults": { + "description": "Button to manually load more results for the current active filter", + "message": "Load more results" + }, + "components.SearchFilterGroupModal.loadingResults": { + "description": "Loading message while loading more results in the search filter modal.", + "message": "Loading search results..." + }, + "components.SearchFilterGroupModal.modalTitle": { + "description": "Title for the modal to add more filter values in the search filters modal.", + "message": "Add filters for {filterName}" + }, + "components.SearchFilterGroupModal.moreOptionsButton": { + "description": "Test for the button to see more filter values than the top N that appear by default.", + "message": "More options" + }, + "components.SearchFilterGroupModal.queryTooShort": { + "description": "Users need to enter at least 3 characters to search for more filter values; this message informs them when they start typing.", + "message": "Type at least 3 characters to start searching." + }, + "components.SearchFilterValueParent.ariaHideChildren": { + "description": "Accessibility message for the button to hide children of the current filter", + "message": "Hide additional filters for {filterValueName}" + }, + "components.SearchFilterValueParent.ariaShowChildren": { + "description": "Accessibility message for the button to show children of the current filter", + "message": "Show more filters for {filterValueName}" + }, + "components.SearchFiltersPane.clearFilters": { + "description": "Helper button in search filters pane in search page to remove all active filters", + "message": "Clear {activeFilterCount, number} active {activeFilterCount, plural, one {filter} other {filters}}" + }, + "components.SearchFiltersPane.title": { + "description": "Title for the search filters pane in course search.", + "message": "Filter courses" + }, + "components.SearchInput.button": { + "description": "Accessibility text for the search button inside the Search input.", + "message": "Search" + }, + "components.SearchSuggestField.searchFieldPlaceholder": { + "description": "Placeholder text displayed in the search field when it is empty.", + "message": "Search for courses, organizations, categories" + }, + "components.UserLogin.logIn": { + "description": "Text for the login button.", + "message": "Log in" + }, + "components.UserLogin.logOut": { + "description": "Text for the logout button.", + "message": "Log out" + }, + "components.UserLogin.signup": { + "description": "Text for the signup button.", + "message": "Sign up" + }, + "components.UserLogin.spinnerText": { + "description": "Accessibility text for the spinner in the login area.", + "message": "Loading login status..." + }, + "components.useStaticFilters.courses": { + "description": "localized human_name label for coursesConfig filter name", + "message": "Courses" + } +} diff --git a/src/frontend/i18n/locales/fr-CA.json b/src/frontend/i18n/locales/fr-CA.json index 50ab26a112..9437fa4ad2 100644 --- a/src/frontend/i18n/locales/fr-CA.json +++ b/src/frontend/i18n/locales/fr-CA.json @@ -1,12 +1,184 @@ { + "components.AddressesManagement.actionCreation": { + "description": "Action name for address creation.", + "message": "creation" + }, + "components.AddressesManagement.actionDeletion": { + "description": "Action name for address deletion.", + "message": "deletion" + }, + "components.AddressesManagement.actionPromotion": { + "description": "Action name for address promotion.", + "message": "promotion" + }, + "components.AddressesManagement.actionUpdate": { + "description": "Action name for address update.", + "message": "update" + }, + "components.AddressesManagement.addAddress": { + "description": "Title of the address creation form", + "message": "Add a new address" + }, + "components.AddressesManagement.addressInput": { + "description": "Label of the \"address\" input", + "message": "Address" + }, + "components.AddressesManagement.cancelButton": { + "description": "Label of the cancel button", + "message": "Cancel" + }, + "components.AddressesManagement.cancelTitleButton": { + "description": "Title of the cancel button", + "message": "Cancel edition" + }, + "components.AddressesManagement.cityInput": { + "description": "Label of the \"city\" input", + "message": "City" + }, + "components.AddressesManagement.closeButton": { + "description": "Label of the close button", + "message": "Go back" + }, + "components.AddressesManagement.countryInput": { + "description": "Label of the \"country\" input", + "message": "Country" + }, + "components.AddressesManagement.deleteButton": { + "description": "Label of the delete button", + "message": "Delete" + }, + "components.AddressesManagement.deleteButtonLabel": { + "description": "Title of the delete button", + "message": "Delete \"{title}\" address" + }, + "components.AddressesManagement.deletionConfirmation": { + "description": "Confirmation message shown to the user when he wants to delete an address", + "message": "Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after." + }, + "components.AddressesManagement.editAddress": { + "description": "Title of the address edit form", + "message": "Update address {title}" + }, + "components.AddressesManagement.editButton": { + "description": "Label of the edit button", + "message": "Edit" + }, + "components.AddressesManagement.editButtonLabel": { + "description": "Title of the edit button", + "message": "Edit \"{title}\" address" + }, + "components.AddressesManagement.error": { + "description": "Error message shown to the user when address creation/update/deletion request fails.", + "message": "An error occurred while address {action}. Please retry later." + }, + "components.AddressesManagement.first_nameInput": { + "description": "Label of the \"first_name\" input", + "message": "Recipient's first name" + }, + "components.AddressesManagement.last_nameInput": { + "description": "Label of the \"last_name\" input", + "message": "Recipient's last name" + }, + "components.AddressesManagement.postcodeInput": { + "description": "Label of the \"postcode\" input", + "message": "Postcode" + }, + "components.AddressesManagement.promoteButtonLabel": { + "description": "Title of the button to set the address as the main one", + "message": "Define \"{title}\" address as main" + }, + "components.AddressesManagement.registeredAddresses": { + "description": "Title of the registered addresses block", + "message": "Your addresses" + }, + "components.AddressesManagement.saveInput": { + "description": "Label of the \"save\" input", + "message": "Save this address" + }, + "components.AddressesManagement.selectButton": { + "description": "Label of the select button", + "message": "Use this address" + }, + "components.AddressesManagement.selectButtonLabel": { + "description": "Title of the select button", + "message": "Select \"{title}\" address" + }, + "components.AddressesManagement.titleInput": { + "description": "Label of the \"title\" input", + "message": "Address title" + }, + "components.AddressesManagement.updateButton": { + "description": "Label of the update button", + "message": "Update this address" + }, + "components.CourseGlimpse.categoryLabel": { + "description": "Category label text for screen reader users", + "message": "Category" + }, + "components.CourseGlimpse.codeIconAlt": { + "description": "Course code logo alternative text for screen reader users", + "message": "Course code" + }, "components.CourseGlimpse.cover": { "description": "Placeholder text when the course we are glimpsing at is missing a cover image", "message": "Couverture" }, + "components.CourseGlimpse.organizationIconAlt": { + "description": "Organization logo alternative text for screen reader users", + "message": "Organization" + }, + "components.CourseGlimpseFooter.dateIconAlt": { + "description": "Course date logo alternative text for screen reader users", + "message": "Course date" + }, "components.CourseGlimpseList.courseCount": { "description": "Result count & pagination information for course search. Appears right above search results", "message": "Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche" }, + "components.CourseGlimpseList.offscreenCourseCount": { + "description": "Short result count information for course search. Only for screen readers", + "message": "{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search" + }, + "components.CourseProductCertificateItem.certificateExplanation": { + "description": "Text displayed when the product certificate has no description", + "message": "You will be able to download your certificate once you will pass all course runs." + }, + "components.CourseProductCertificateItem.congratulations": { + "description": "Congratulation message when user has passed the course.", + "message": "Congratulations, you passed this course!" + }, + "components.CourseProductCertificateItem.download": { + "description": "Button label to download the certificate", + "message": "Download" + }, + "components.CourseProductCertificateItem.generatingCertificate": { + "description": "Accessible label displayed while certificate is being generated.", + "message": "Certificate is being generated..." + }, + "components.CourseProductItem.enrolled": { + "description": "Message displayed when authenticated user owned the product", + "message": "Enrolled" + }, + "components.CourseProductsList.end": { + "description": "End label displayed in the header of course run dates section", + "message": "End" + }, + "components.CourseProductsList.loadingInitial": { + "description": "Accessible text for the initial loading spinner displayed when course is fetching", + "message": "Loading course information..." + }, + "components.CourseProductsList.start": { + "description": "Start label displayed in the header of course run dates section", + "message": "Start" + }, + "components.CourseProductsLists.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseProductsLists.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, "components.CourseRunEnrollment.enroll": { "description": "CTA for users who can enroll in the course run or could enroll if they logged in.", "message": "S’inscrire maintenant" @@ -35,10 +207,58 @@ "description": "Helper text in the enroll button for non logged in users", "message": "Connectez-vous pour vous inscrire" }, + "components.CourseRunList.enrollFromTo": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, "components.DesktopUserMenu.menuPurpose": { "description": "Accessible label for user menu button", "message": "Accéder aux préférences de votre profil" }, + "components.EnrollableCourseRunList.ariaSelectCourseRun": { + "description": "Accessible label used by screen reader when user checked a course run radio input.", + "message": "Select course run from {start} to {end}." + }, + "components.EnrollableCourseRunList.enroll": { + "description": "Text label for the enroll button", + "message": "Enroll" + }, + "components.EnrollableCourseRunList.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {enrollment_start} to {enrollment_end}" + }, + "components.EnrollableCourseRunList.enrolling": { + "description": "Label displayed when a request to enroll to a course run is loading", + "message": "Enrolling..." + }, + "components.EnrollableCourseRunList.enrollmentNotYetOpened": { + "description": "Text label for the enroll cta when enrollment is not yet opened", + "message": "Enrollment will open on {enrollment_start}" + }, + "components.EnrollableCourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, + "components.EnrollableCourseRunList.selectCourseRun": { + "description": "Label displayed when user do not have select a course run.", + "message": "Select a course run" + }, + "components.EnrolledCourseRun.goToCourse": { + "description": "CTA displayed when user is enrolled to the course run.", + "message": "Go to course" + }, + "components.EnrolledCourseRun.unroll": { + "description": "Button label to unroll.", + "message": "Unroll" + }, + "components.EnrolledCourseRun.unrolling": { + "description": "Accessible label displayed when user is being unrolled.", + "message": "Unrolling..." + }, "components.LanguageSelector.currentlySelected": { "description": "Accessible hint to mark the currently selected language in the language selector", "message": "(actuellement sélectionné)" @@ -83,10 +303,138 @@ "description": "Accessibility helper for pagination, added on the previous page link.", "message": "Page précédente: {page}" }, + "components.PaymentButton.errorAbort": { + "description": "Error message shown when user aborts the payment.", + "message": "Vous avez annulé le paiement." + }, + "components.PaymentButton.errorAborting": { + "description": "Error message shown when user asks to abort the payment.", + "message": "Paiement en cours d'annulation..." + }, + "components.PaymentButton.errorDefault": { + "description": "Error message shown when payment creation request failed.", + "message": "Une erreur s'est produite lors du paiement. Veuillez réessayer plus tard." + }, + "components.PaymentButton.pay": { + "description": "CTA label to proceed to the payment of the product", + "message": "Payer {price}" + }, + "components.PaymentButton.payInOneClick": { + "description": "CTA label to proceed to the one click payment of the product", + "message": "Payer en un clic {price}" + }, + "components.PaymentButton.paymentInProgress": { + "description": "Label for screen reader when a payment is in progress.", + "message": "Paiement en cours" + }, + "components.PurchasedProductMenu.actionsRelated": { + "description": "Accessible label for the purchased product menu", + "message": "Other actions related to this product" + }, + "components.PurchasedProductMenu.downloadInvoice": { + "description": "Label for selector item to download invoice", + "message": "Download invoice" + }, + "components.PurchasedProductMenu.generatingInvoice": { + "description": "Accessible label when invoice is being generated", + "message": "Invoice is being generated..." + }, + "components.RegisteredCreditCard.expirationDate": { + "description": "Credit card expiration date label", + "message": "Expiration date: {expirationDate}" + }, + "components.RegisteredCreditCard.inputAriaLabel": { + "description": "ARIA Label read by screen reader to inform which card is focused", + "message": "{selected, select, true {Unselect} other {Select}} {title}'s card" + }, "components.RootSearchSuggestField.searchFieldPlaceholder": { "description": "Placeholder text displayed in the search field when it is empty.", "message": "Recherche de cours" }, + "components.SaleTunnel.closeDialog": { + "description": "ARIA label used by screenreader to inform that the close dialog button is selected", + "message": "Close the dialog" + }, + "components.SaleTunnel.loginToPurchase": { + "description": "Label displayed inside the product's CTA when user is not logged in", + "message": "Login to purchase" + }, + "components.SaleTunnel.stepPayment": { + "description": "Label of the Payment step", + "message": "Payment" + }, + "components.SaleTunnel.stepResume": { + "description": "Label of the Resume step", + "message": "Resume" + }, + "components.SaleTunnel.stepValidation": { + "description": "Label of the Validation step", + "message": "Validation" + }, + "components.SaleTunnelStepPayment.registeredCardSectionTitle": { + "description": "Label for the registered credit cards section", + "message": "Your registered credit card" + }, + "components.SaleTunnelStepPayment.resumeTile": { + "description": "Label for the resume tile", + "message": "You are about to purchase" + }, + "components.SaleTunnelStepPayment.userBillingAddressAddLabel": { + "description": "Label for the billing address add button", + "message": "Add an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressCreateLabel": { + "description": "Label for the billing address create button", + "message": "Create an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressFieldset": { + "description": "Label for the billing address fieldset", + "message": "Billing address" + }, + "components.SaleTunnelStepPayment.userBillingAddressNoEntry": { + "description": "Message displayed when the user has no address.", + "message": "You have not yet a billing address." + }, + "components.SaleTunnelStepPayment.userBillingAddressSelectLabel": { + "description": "Label for the billing address select", + "message": "Select a billing address" + }, + "components.SaleTunnelStepPayment.userTile": { + "description": "Label for the user information tile", + "message": "Your personal information" + }, + "components.SaleTunnelStepResume.congratulations": { + "description": "Text displayed to thank user for his order", + "message": "Congratulations!" + }, + "components.SaleTunnelStepResume.cta": { + "description": "Label to the call to action to close sale tunnel", + "message": "Start this course now!" + }, + "components.SaleTunnelStepResume.successDetailMessage": { + "description": "Text to remind that order's invoice will be send by email soon", + "message": "You will receive your invoice by email in a few moments." + }, + "components.SaleTunnelStepResume.successMessage": { + "description": "Message to confirm that order has been created", + "message": "Your order has been successfully created." + }, + "components.SaleTunnelStepValidation.availableCourseRuns": { + "description": "Course runs available text", + "message": "{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available" + }, + "components.SaleTunnelStepValidation.courseRunDates": { + "description": "Course run date text", + "message": "From {start} to {end}" + }, + "components.SaleTunnelStepValidation.includingVAT": { + "description": "Text displayed next to the price to mention this is the price including VAT.", + "message": "including VAT" + }, + "components.SaleTunnelStepValidation.proceedToPayment": { + "description": "CTA to go to payment step", + "message": "Proceed to payment" + }, "components.Search.errorMessage": { "description": "Error message for Search view when the request to load courses fails", "message": "Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés." @@ -95,6 +443,10 @@ "description": "Accessibility text for the button/icon that toggles *off* the filters pane on mobile", "message": "Cacher le menu des filtres" }, + "components.Search.resultsTitle": { + "description": "Title for the search results pane in course search (not shown, made for screen reader users).", + "message": "Résultats de recherche" + }, "components.Search.showFiltersPane": { "description": "Accessibility text for the button/icon that toggles *on* the filters pane on mobile", "message": "Montrer le menu des filtres" diff --git a/src/frontend/i18n/locales/fr-FR.json b/src/frontend/i18n/locales/fr-FR.json index 4a3eb9124f..501ac0f43f 100644 --- a/src/frontend/i18n/locales/fr-FR.json +++ b/src/frontend/i18n/locales/fr-FR.json @@ -1,12 +1,184 @@ { + "components.AddressesManagement.actionCreation": { + "description": "Action name for address creation.", + "message": "création" + }, + "components.AddressesManagement.actionDeletion": { + "description": "Action name for address deletion.", + "message": "suppression" + }, + "components.AddressesManagement.actionPromotion": { + "description": "Action name for address promotion.", + "message": "promotion" + }, + "components.AddressesManagement.actionUpdate": { + "description": "Action name for address update.", + "message": "mise à jour" + }, + "components.AddressesManagement.addAddress": { + "description": "Title of the address creation form", + "message": "Ajouter une nouvelle adresse" + }, + "components.AddressesManagement.addressInput": { + "description": "Label of the \"address\" input", + "message": "Adresse" + }, + "components.AddressesManagement.cancelButton": { + "description": "Label of the cancel button", + "message": "Annuler" + }, + "components.AddressesManagement.cancelTitleButton": { + "description": "Title of the cancel button", + "message": "Annuler la modification" + }, + "components.AddressesManagement.cityInput": { + "description": "Label of the \"city\" input", + "message": "Ville" + }, + "components.AddressesManagement.closeButton": { + "description": "Label of the close button", + "message": "Retour" + }, + "components.AddressesManagement.countryInput": { + "description": "Label of the \"country\" input", + "message": "Pays" + }, + "components.AddressesManagement.deleteButton": { + "description": "Label of the delete button", + "message": "Supprimer" + }, + "components.AddressesManagement.deleteButtonLabel": { + "description": "Title of the delete button", + "message": "Supprimer l'adresse \"{title}\"" + }, + "components.AddressesManagement.deletionConfirmation": { + "description": "Confirmation message shown to the user when he wants to delete an address", + "message": "Êtes-vous sûr de vouloir supprimer l'adresse \"{title}\" ? ⚠️ Vous ne pourrez pas annuler ce changement après." + }, + "components.AddressesManagement.editAddress": { + "description": "Title of the address edit form", + "message": "Mettre à jour l'adresse {title}" + }, + "components.AddressesManagement.editButton": { + "description": "Label of the edit button", + "message": "Modifier" + }, + "components.AddressesManagement.editButtonLabel": { + "description": "Title of the edit button", + "message": "Modifier l'adresse \"{title}\"" + }, + "components.AddressesManagement.error": { + "description": "Error message shown to the user when address creation/update/deletion request fails.", + "message": "Une erreur s'est produire lors de la {action} de l'adresse. Veuillez réessayer plus tard." + }, + "components.AddressesManagement.first_nameInput": { + "description": "Label of the \"first_name\" input", + "message": "Prénom du destinataire" + }, + "components.AddressesManagement.last_nameInput": { + "description": "Label of the \"last_name\" input", + "message": "Nom du destinataire" + }, + "components.AddressesManagement.postcodeInput": { + "description": "Label of the \"postcode\" input", + "message": "Code postal" + }, + "components.AddressesManagement.promoteButtonLabel": { + "description": "Title of the button to set the address as the main one", + "message": "Utiliser l'adresse \"{title}\" comme adresse principale" + }, + "components.AddressesManagement.registeredAddresses": { + "description": "Title of the registered addresses block", + "message": "Vos adresses" + }, + "components.AddressesManagement.saveInput": { + "description": "Label of the \"save\" input", + "message": "Sauvegarder cette adresse" + }, + "components.AddressesManagement.selectButton": { + "description": "Label of the select button", + "message": "Utiliser cette adresse" + }, + "components.AddressesManagement.selectButtonLabel": { + "description": "Title of the select button", + "message": "Sélectionner l'adresse \"{title}\"" + }, + "components.AddressesManagement.titleInput": { + "description": "Label of the \"title\" input", + "message": "Titre de l'adresse" + }, + "components.AddressesManagement.updateButton": { + "description": "Label of the update button", + "message": "Mettre à jour cette adresse" + }, + "components.CourseGlimpse.categoryLabel": { + "description": "Category label text for screen reader users", + "message": "Catégorie" + }, + "components.CourseGlimpse.codeIconAlt": { + "description": "Course code logo alternative text for screen reader users", + "message": "Code du cours" + }, "components.CourseGlimpse.cover": { "description": "Placeholder text when the course we are glimpsing at is missing a cover image", "message": "Couverture" }, + "components.CourseGlimpse.organizationIconAlt": { + "description": "Organization logo alternative text for screen reader users", + "message": "Établissement" + }, + "components.CourseGlimpseFooter.dateIconAlt": { + "description": "Course date logo alternative text for screen reader users", + "message": "Date du cours" + }, "components.CourseGlimpseList.courseCount": { "description": "Result count & pagination information for course search. Appears right above search results", "message": "Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche" }, + "components.CourseGlimpseList.offscreenCourseCount": { + "description": "Short result count information for course search. Only for screen readers", + "message": "{courseCount, number} {courseCount, plural, one {cours correspond} other {cours correspondent}} à votre recherche" + }, + "components.CourseProductCertificateItem.certificateExplanation": { + "description": "Text displayed when the product certificate has no description", + "message": "Vous pourrez télécharger votre certificat une fois que vous aurez réussi toutes les sessions." + }, + "components.CourseProductCertificateItem.congratulations": { + "description": "Congratulation message when user has passed the course.", + "message": "Félicitations, vous avez terminé ce cours !" + }, + "components.CourseProductCertificateItem.download": { + "description": "Button label to download the certificate", + "message": "Télécharger" + }, + "components.CourseProductCertificateItem.generatingCertificate": { + "description": "Accessible label displayed while certificate is being generated.", + "message": "Certificat en cours de génération..." + }, + "components.CourseProductItem.enrolled": { + "description": "Message displayed when authenticated user owned the product", + "message": "Inscrit" + }, + "components.CourseProductsList.end": { + "description": "End label displayed in the header of course run dates section", + "message": "Fin" + }, + "components.CourseProductsList.loadingInitial": { + "description": "Accessible text for the initial loading spinner displayed when course is fetching", + "message": "Chargement des informations du cours..." + }, + "components.CourseProductsList.start": { + "description": "Start label displayed in the header of course run dates section", + "message": "Début" + }, + "components.CourseProductsLists.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Inscription du {start} au {end}" + }, + "components.CourseProductsLists.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "Aucune session disponible pour ce cours." + }, "components.CourseRunEnrollment.enroll": { "description": "CTA for users who can enroll in the course run or could enroll if they logged in.", "message": "S’inscrire maintenant" @@ -35,10 +207,58 @@ "description": "Helper text in the enroll button for non logged in users", "message": "Connectez-vous pour vous inscrire" }, + "components.CourseRunList.enrollFromTo": { + "description": "Text label for the enrollment dates", + "message": "Inscription du {start} au {end}" + }, + "components.CourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "Aucune session disponible pour ce cours." + }, "components.DesktopUserMenu.menuPurpose": { "description": "Accessible label for user menu button", "message": "Accéder aux préférences de votre profil" }, + "components.EnrollableCourseRunList.ariaSelectCourseRun": { + "description": "Accessible label used by screen reader when user checked a course run radio input.", + "message": "Sélectionnez le cours se déroulant du {start} au {end}." + }, + "components.EnrollableCourseRunList.enroll": { + "description": "Text label for the enroll button", + "message": "S'inscrire" + }, + "components.EnrollableCourseRunList.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Inscription du {enrollment_start} au {enrollment_end}" + }, + "components.EnrollableCourseRunList.enrolling": { + "description": "Label displayed when a request to enroll to a course run is loading", + "message": "Inscription en cours..." + }, + "components.EnrollableCourseRunList.enrollmentNotYetOpened": { + "description": "Text label for the enroll cta when enrollment is not yet opened", + "message": "Les inscriptions ouvriront le {enrollment_start}" + }, + "components.EnrollableCourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "Aucune session disponible pour ce cours." + }, + "components.EnrollableCourseRunList.selectCourseRun": { + "description": "Label displayed when user do not have select a course run.", + "message": "Sélectionnez une session" + }, + "components.EnrolledCourseRun.goToCourse": { + "description": "CTA displayed when user is enrolled to the course run.", + "message": "Accéder au cours" + }, + "components.EnrolledCourseRun.unroll": { + "description": "Button label to unroll.", + "message": "Se désinscrire" + }, + "components.EnrolledCourseRun.unrolling": { + "description": "Accessible label displayed when user is being unrolled.", + "message": "Unrolling..." + }, "components.LanguageSelector.currentlySelected": { "description": "Accessible hint to mark the currently selected language in the language selector", "message": "(actuellement sélectionné)" @@ -83,10 +303,138 @@ "description": "Accessibility helper for pagination, added on the previous page link.", "message": "Page précédente: {page}" }, + "components.PaymentButton.errorAbort": { + "description": "Error message shown when user aborts the payment.", + "message": "Vous avez annulé le paiement." + }, + "components.PaymentButton.errorAborting": { + "description": "Error message shown when user asks to abort the payment.", + "message": "Paiement en cours d'annulation..." + }, + "components.PaymentButton.errorDefault": { + "description": "Error message shown when payment creation request failed.", + "message": "Une erreur s'est produite lors du paiement. Veuillez réessayer plus tard." + }, + "components.PaymentButton.pay": { + "description": "CTA label to proceed to the payment of the product", + "message": "Payer {price}" + }, + "components.PaymentButton.payInOneClick": { + "description": "CTA label to proceed to the one click payment of the product", + "message": "Payer en un clic {price}" + }, + "components.PaymentButton.paymentInProgress": { + "description": "Label for screen reader when a payment is in progress.", + "message": "Paiement en cours" + }, + "components.PurchasedProductMenu.actionsRelated": { + "description": "Accessible label for the purchased product menu", + "message": "Autres actions liées à ce produit" + }, + "components.PurchasedProductMenu.downloadInvoice": { + "description": "Label for selector item to download invoice", + "message": "Télécharger la facture" + }, + "components.PurchasedProductMenu.generatingInvoice": { + "description": "Accessible label when invoice is being generated", + "message": "La facture est en cours de génération..." + }, + "components.RegisteredCreditCard.expirationDate": { + "description": "Credit card expiration date label", + "message": "Date d'expiration : {expirationDate}" + }, + "components.RegisteredCreditCard.inputAriaLabel": { + "description": "ARIA Label read by screen reader to inform which card is focused", + "message": "{selected, select, true {Déselectionner} other {Sélectionner}} la carte {title}" + }, "components.RootSearchSuggestField.searchFieldPlaceholder": { "description": "Placeholder text displayed in the search field when it is empty.", "message": "Recherche de cours" }, + "components.SaleTunnel.closeDialog": { + "description": "ARIA label used by screenreader to inform that the close dialog button is selected", + "message": "Fermer la fenêtre de dialogue" + }, + "components.SaleTunnel.loginToPurchase": { + "description": "Label displayed inside the product's CTA when user is not logged in", + "message": "Connectez-vous pour acheter" + }, + "components.SaleTunnel.stepPayment": { + "description": "Label of the Payment step", + "message": "Paiement" + }, + "components.SaleTunnel.stepResume": { + "description": "Label of the Resume step", + "message": "Continuer" + }, + "components.SaleTunnel.stepValidation": { + "description": "Label of the Validation step", + "message": "Validation" + }, + "components.SaleTunnelStepPayment.registeredCardSectionTitle": { + "description": "Label for the registered credit cards section", + "message": "Vos cartes enregistrées" + }, + "components.SaleTunnelStepPayment.resumeTile": { + "description": "Label for the resume tile", + "message": "Vous êtes sur le point d'acheter" + }, + "components.SaleTunnelStepPayment.userBillingAddressAddLabel": { + "description": "Label for the billing address add button", + "message": "Ajouter une adresse" + }, + "components.SaleTunnelStepPayment.userBillingAddressCreateLabel": { + "description": "Label for the billing address create button", + "message": "Créer une adresse" + }, + "components.SaleTunnelStepPayment.userBillingAddressFieldset": { + "description": "Label for the billing address fieldset", + "message": "Adresse de facturation" + }, + "components.SaleTunnelStepPayment.userBillingAddressNoEntry": { + "description": "Message displayed when the user has no address.", + "message": "You have not yet a billing address." + }, + "components.SaleTunnelStepPayment.userBillingAddressSelectLabel": { + "description": "Label for the billing address select", + "message": "Sélectionner une adresse de facturation" + }, + "components.SaleTunnelStepPayment.userTile": { + "description": "Label for the user information tile", + "message": "Vos informations personnelles" + }, + "components.SaleTunnelStepResume.congratulations": { + "description": "Text displayed to thank user for his order", + "message": "Félicitations !" + }, + "components.SaleTunnelStepResume.cta": { + "description": "Label to the call to action to close sale tunnel", + "message": "Commencer ce cours dès maintenant !" + }, + "components.SaleTunnelStepResume.successDetailMessage": { + "description": "Text to remind that order's invoice will be send by email soon", + "message": "Vous allez recevoir votre facture par mail dans quelques instants." + }, + "components.SaleTunnelStepResume.successMessage": { + "description": "Message to confirm that order has been created", + "message": "Votre commande a été créée avec succès." + }, + "components.SaleTunnelStepValidation.availableCourseRuns": { + "description": "Course runs available text", + "message": "{ count, plural, =0 {Aucune session disponible} one {Une session disponible} other {# sessions disponibles}}" + }, + "components.SaleTunnelStepValidation.courseRunDates": { + "description": "Course run date text", + "message": "Du {start} au {end}" + }, + "components.SaleTunnelStepValidation.includingVAT": { + "description": "Text displayed next to the price to mention this is the price including VAT.", + "message": "TTC" + }, + "components.SaleTunnelStepValidation.proceedToPayment": { + "description": "CTA to go to payment step", + "message": "Procéder au paiement" + }, "components.Search.errorMessage": { "description": "Error message for Search view when the request to load courses fails", "message": "Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés." @@ -95,6 +443,10 @@ "description": "Accessibility text for the button/icon that toggles *off* the filters pane on mobile", "message": "Cacher le menu des filtres" }, + "components.Search.resultsTitle": { + "description": "Title for the search results pane in course search (not shown, made for screen reader users).", + "message": "Résultats de recherche" + }, "components.Search.showFiltersPane": { "description": "Accessibility text for the button/icon that toggles *on* the filters pane on mobile", "message": "Montrer le menu des filtres" diff --git a/src/frontend/i18n/locales/pt-PT.json b/src/frontend/i18n/locales/pt-PT.json index e653189ab3..89b8480326 100644 --- a/src/frontend/i18n/locales/pt-PT.json +++ b/src/frontend/i18n/locales/pt-PT.json @@ -1,12 +1,184 @@ { + "components.AddressesManagement.actionCreation": { + "description": "Action name for address creation.", + "message": "criação" + }, + "components.AddressesManagement.actionDeletion": { + "description": "Action name for address deletion.", + "message": "exclusão" + }, + "components.AddressesManagement.actionPromotion": { + "description": "Action name for address promotion.", + "message": "promoção" + }, + "components.AddressesManagement.actionUpdate": { + "description": "Action name for address update.", + "message": "atualização" + }, + "components.AddressesManagement.addAddress": { + "description": "Title of the address creation form", + "message": "Adicionar um novo endereço" + }, + "components.AddressesManagement.addressInput": { + "description": "Label of the \"address\" input", + "message": "Endereço" + }, + "components.AddressesManagement.cancelButton": { + "description": "Label of the cancel button", + "message": "Cancelar" + }, + "components.AddressesManagement.cancelTitleButton": { + "description": "Title of the cancel button", + "message": "Cancelar edição" + }, + "components.AddressesManagement.cityInput": { + "description": "Label of the \"city\" input", + "message": "Cidade" + }, + "components.AddressesManagement.closeButton": { + "description": "Label of the close button", + "message": "Voltar" + }, + "components.AddressesManagement.countryInput": { + "description": "Label of the \"country\" input", + "message": "País" + }, + "components.AddressesManagement.deleteButton": { + "description": "Label of the delete button", + "message": "Eliminar" + }, + "components.AddressesManagement.deleteButtonLabel": { + "description": "Title of the delete button", + "message": "Eliminar endereço de \"{title}\"" + }, + "components.AddressesManagement.deletionConfirmation": { + "description": "Confirmation message shown to the user when he wants to delete an address", + "message": "Tem certeza que deseja eliminar o endereço \"{title}? ⚠️ Não é possível desfazer essa alteração." + }, + "components.AddressesManagement.editAddress": { + "description": "Title of the address edit form", + "message": "Atualizar endereço {title}" + }, + "components.AddressesManagement.editButton": { + "description": "Label of the edit button", + "message": "Editar" + }, + "components.AddressesManagement.editButtonLabel": { + "description": "Title of the edit button", + "message": "Editar endereço de \"{title}\"" + }, + "components.AddressesManagement.error": { + "description": "Error message shown to the user when address creation/update/deletion request fails.", + "message": "Ocorreu um erro durante o processo de {action} de endereço. Por favor, tente novamente mais tarde." + }, + "components.AddressesManagement.first_nameInput": { + "description": "Label of the \"first_name\" input", + "message": "Primeiro nome do destinatário" + }, + "components.AddressesManagement.last_nameInput": { + "description": "Label of the \"last_name\" input", + "message": "Apelido do destinatário" + }, + "components.AddressesManagement.postcodeInput": { + "description": "Label of the \"postcode\" input", + "message": "Código Postal" + }, + "components.AddressesManagement.promoteButtonLabel": { + "description": "Title of the button to set the address as the main one", + "message": "Defina o endereço \"{title}\" como principal" + }, + "components.AddressesManagement.registeredAddresses": { + "description": "Title of the registered addresses block", + "message": "Os seus endereços" + }, + "components.AddressesManagement.saveInput": { + "description": "Label of the \"save\" input", + "message": "Guardar este endereço" + }, + "components.AddressesManagement.selectButton": { + "description": "Label of the select button", + "message": "Usar esta endereço" + }, + "components.AddressesManagement.selectButtonLabel": { + "description": "Title of the select button", + "message": "Selecionar o endereço \"{title}\"" + }, + "components.AddressesManagement.titleInput": { + "description": "Label of the \"title\" input", + "message": "Título do Endereço" + }, + "components.AddressesManagement.updateButton": { + "description": "Label of the update button", + "message": "Atualizar este endereço" + }, + "components.CourseGlimpse.categoryLabel": { + "description": "Category label text for screen reader users", + "message": "Categoria" + }, + "components.CourseGlimpse.codeIconAlt": { + "description": "Course code logo alternative text for screen reader users", + "message": "Código do curso" + }, "components.CourseGlimpse.cover": { "description": "Placeholder text when the course we are glimpsing at is missing a cover image", "message": "Capa" }, + "components.CourseGlimpse.organizationIconAlt": { + "description": "Organization logo alternative text for screen reader users", + "message": "Organização" + }, + "components.CourseGlimpseFooter.dateIconAlt": { + "description": "Course date logo alternative text for screen reader users", + "message": "Data do curso" + }, "components.CourseGlimpseList.courseCount": { "description": "Result count & pagination information for course search. Appears right above search results", "message": "A mostrar de {start, number} a {end, number} de {courseCount, number} {courseCount, plural, one {curso} other {cursos}} de acordo com a sua pesquisa" }, + "components.CourseGlimpseList.offscreenCourseCount": { + "description": "Short result count information for course search. Only for screen readers", + "message": "{courseCount, number} {courseCount, plural, one {curso} other {cursos}} {courseCount, plural, one {corresponde} other {correspondem}} à sua pesquisa" + }, + "components.CourseProductCertificateItem.certificateExplanation": { + "description": "Text displayed when the product certificate has no description", + "message": "Poderá descarregar o seu certificado assim que completar todas as edições de curso." + }, + "components.CourseProductCertificateItem.congratulations": { + "description": "Congratulation message when user has passed the course.", + "message": "Parabéns, concluiu o curso com sucesso!" + }, + "components.CourseProductCertificateItem.download": { + "description": "Button label to download the certificate", + "message": "Descarregar" + }, + "components.CourseProductCertificateItem.generatingCertificate": { + "description": "Accessible label displayed while certificate is being generated.", + "message": "O certificado está a ser gerado..." + }, + "components.CourseProductItem.enrolled": { + "description": "Message displayed when authenticated user owned the product", + "message": "Inscrito" + }, + "components.CourseProductsList.end": { + "description": "End label displayed in the header of course run dates section", + "message": "Fim" + }, + "components.CourseProductsList.loadingInitial": { + "description": "Accessible text for the initial loading spinner displayed when course is fetching", + "message": "A carregar informação do curso..." + }, + "components.CourseProductsList.start": { + "description": "Start label displayed in the header of course run dates section", + "message": "Início" + }, + "components.CourseProductsLists.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Inscrições de {start} a {end}" + }, + "components.CourseProductsLists.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "Nenhuma sessão disponível para este curso." + }, "components.CourseRunEnrollment.enroll": { "description": "CTA for users who can enroll in the course run or could enroll if they logged in.", "message": "Inscreva-se já" @@ -35,10 +207,58 @@ "description": "Helper text in the enroll button for non logged in users", "message": "Faça login para se inscrever" }, + "components.CourseRunList.enrollFromTo": { + "description": "Text label for the enrollment dates", + "message": "Inscrição de {start} a {end}" + }, + "components.CourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "Nenhuma sessão disponível para este curso." + }, "components.DesktopUserMenu.menuPurpose": { "description": "Accessible label for user menu button", "message": "Acesso às suas configurações de perfil" }, + "components.EnrollableCourseRunList.ariaSelectCourseRun": { + "description": "Accessible label used by screen reader when user checked a course run radio input.", + "message": "Escolher edição do curso de {start} a {end}." + }, + "components.EnrollableCourseRunList.enroll": { + "description": "Text label for the enroll button", + "message": "Inscrever" + }, + "components.EnrollableCourseRunList.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Inscrições de {enrollment_start} a {enrollment_end}" + }, + "components.EnrollableCourseRunList.enrolling": { + "description": "Label displayed when a request to enroll to a course run is loading", + "message": "Inscrevendo..." + }, + "components.EnrollableCourseRunList.enrollmentNotYetOpened": { + "description": "Text label for the enroll cta when enrollment is not yet opened", + "message": "Inscrições abertas a {enrollment_start}" + }, + "components.EnrollableCourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "Nenhuma sessão disponível para este curso." + }, + "components.EnrollableCourseRunList.selectCourseRun": { + "description": "Label displayed when user do not have select a course run.", + "message": "Selecione uma edição do curso" + }, + "components.EnrolledCourseRun.goToCourse": { + "description": "CTA displayed when user is enrolled to the course run.", + "message": "Ir para o curso" + }, + "components.EnrolledCourseRun.unroll": { + "description": "Button label to unroll.", + "message": "Desinscrever" + }, + "components.EnrolledCourseRun.unrolling": { + "description": "Accessible label displayed when user is being unrolled.", + "message": "Desinscrevendo..." + }, "components.LanguageSelector.currentlySelected": { "description": "Accessible hint to mark the currently selected language in the language selector", "message": "(selecionado)" @@ -83,10 +303,138 @@ "description": "Accessibility helper for pagination, added on the previous page link.", "message": "Página anterior {page}" }, + "components.PaymentButton.errorAbort": { + "description": "Error message shown when user aborts the payment.", + "message": "O pagamento foi cancelado." + }, + "components.PaymentButton.errorAborting": { + "description": "Error message shown when user asks to abort the payment.", + "message": "Cancelando o pagamento..." + }, + "components.PaymentButton.errorDefault": { + "description": "Error message shown when payment creation request failed.", + "message": "Ocorreu um erro durante o pagamento. Por favor, tente novamente mais tarde." + }, + "components.PaymentButton.pay": { + "description": "CTA label to proceed to the payment of the product", + "message": "Pagar {price}" + }, + "components.PaymentButton.payInOneClick": { + "description": "CTA label to proceed to the one click payment of the product", + "message": "Pague com um clique {price}" + }, + "components.PaymentButton.paymentInProgress": { + "description": "Label for screen reader when a payment is in progress.", + "message": "A processar pagamento" + }, + "components.PurchasedProductMenu.actionsRelated": { + "description": "Accessible label for the purchased product menu", + "message": "Outras ações relacionadas com este produto" + }, + "components.PurchasedProductMenu.downloadInvoice": { + "description": "Label for selector item to download invoice", + "message": "Descarregar fatura" + }, + "components.PurchasedProductMenu.generatingInvoice": { + "description": "Accessible label when invoice is being generated", + "message": "A fatura está a ser gerada..." + }, + "components.RegisteredCreditCard.expirationDate": { + "description": "Credit card expiration date label", + "message": "Expira a {expirationDate}" + }, + "components.RegisteredCreditCard.inputAriaLabel": { + "description": "ARIA Label read by screen reader to inform which card is focused", + "message": "{selected, select, true {Não selecionado} other {Selecionado}} o cartão {title}" + }, "components.RootSearchSuggestField.searchFieldPlaceholder": { "description": "Placeholder text displayed in the search field when it is empty.", "message": "Pesquisar cursos" }, + "components.SaleTunnel.closeDialog": { + "description": "ARIA label used by screenreader to inform that the close dialog button is selected", + "message": "Fechar esta caixa de diálogo" + }, + "components.SaleTunnel.loginToPurchase": { + "description": "Label displayed inside the product's CTA when user is not logged in", + "message": "Faça login para comprar" + }, + "components.SaleTunnel.stepPayment": { + "description": "Label of the Payment step", + "message": "Pagamento" + }, + "components.SaleTunnel.stepResume": { + "description": "Label of the Resume step", + "message": "Continuar" + }, + "components.SaleTunnel.stepValidation": { + "description": "Label of the Validation step", + "message": "Validação" + }, + "components.SaleTunnelStepPayment.registeredCardSectionTitle": { + "description": "Label for the registered credit cards section", + "message": "O seu cartão de crédito foi registado" + }, + "components.SaleTunnelStepPayment.resumeTile": { + "description": "Label for the resume tile", + "message": "Está prestes a concluir a compra" + }, + "components.SaleTunnelStepPayment.userBillingAddressAddLabel": { + "description": "Label for the billing address add button", + "message": "Adicionar um endereço" + }, + "components.SaleTunnelStepPayment.userBillingAddressCreateLabel": { + "description": "Label for the billing address create button", + "message": "Criar novo endereço" + }, + "components.SaleTunnelStepPayment.userBillingAddressFieldset": { + "description": "Label for the billing address fieldset", + "message": "Endereço de faturação" + }, + "components.SaleTunnelStepPayment.userBillingAddressNoEntry": { + "description": "Message displayed when the user has no address.", + "message": "Você ainda não tem um endereço de faturação." + }, + "components.SaleTunnelStepPayment.userBillingAddressSelectLabel": { + "description": "Label for the billing address select", + "message": "Selecione o endereço de faturação" + }, + "components.SaleTunnelStepPayment.userTile": { + "description": "Label for the user information tile", + "message": "A sua informação pessoal" + }, + "components.SaleTunnelStepResume.congratulations": { + "description": "Text displayed to thank user for his order", + "message": "Parabéns!" + }, + "components.SaleTunnelStepResume.cta": { + "description": "Label to the call to action to close sale tunnel", + "message": "Iniciar este curso agora!" + }, + "components.SaleTunnelStepResume.successDetailMessage": { + "description": "Text to remind that order's invoice will be send by email soon", + "message": "Dentro de instantes receberá a sua fatura por e-mail." + }, + "components.SaleTunnelStepResume.successMessage": { + "description": "Message to confirm that order has been created", + "message": "O seu pedido foi criado com sucesso." + }, + "components.SaleTunnelStepValidation.availableCourseRuns": { + "description": "Course runs available text", + "message": "{count, plural, =0 {Sem edições de curso} one {Uma edição do curso} other {# edições do curso}} {count, plural, =0 {disponíveis} one {disponível} other {disponíveis}}" + }, + "components.SaleTunnelStepValidation.courseRunDates": { + "description": "Course run date text", + "message": "De {start} a {end}" + }, + "components.SaleTunnelStepValidation.includingVAT": { + "description": "Text displayed next to the price to mention this is the price including VAT.", + "message": "IVA incluído" + }, + "components.SaleTunnelStepValidation.proceedToPayment": { + "description": "CTA to go to payment step", + "message": "Prosseguir para o pagamento" + }, "components.Search.errorMessage": { "description": "Error message for Search view when the request to load courses fails", "message": "Ocorreu um erro! Não foi possível carregar os cursos." @@ -95,6 +443,10 @@ "description": "Accessibility text for the button/icon that toggles *off* the filters pane on mobile", "message": "Ocultar painel de filtros" }, + "components.Search.resultsTitle": { + "description": "Title for the search results pane in course search (not shown, made for screen reader users).", + "message": "Resultados da pesquisa" + }, "components.Search.showFiltersPane": { "description": "Accessibility text for the button/icon that toggles *on* the filters pane on mobile", "message": "Mostrar painel de filtros" diff --git a/src/frontend/i18n/locales/ru-RU.json b/src/frontend/i18n/locales/ru-RU.json index 73461dadc9..2d91f4bc5a 100644 --- a/src/frontend/i18n/locales/ru-RU.json +++ b/src/frontend/i18n/locales/ru-RU.json @@ -1,12 +1,184 @@ { + "components.AddressesManagement.actionCreation": { + "description": "Action name for address creation.", + "message": "creation" + }, + "components.AddressesManagement.actionDeletion": { + "description": "Action name for address deletion.", + "message": "deletion" + }, + "components.AddressesManagement.actionPromotion": { + "description": "Action name for address promotion.", + "message": "promotion" + }, + "components.AddressesManagement.actionUpdate": { + "description": "Action name for address update.", + "message": "update" + }, + "components.AddressesManagement.addAddress": { + "description": "Title of the address creation form", + "message": "Add a new address" + }, + "components.AddressesManagement.addressInput": { + "description": "Label of the \"address\" input", + "message": "Address" + }, + "components.AddressesManagement.cancelButton": { + "description": "Label of the cancel button", + "message": "Cancel" + }, + "components.AddressesManagement.cancelTitleButton": { + "description": "Title of the cancel button", + "message": "Cancel edition" + }, + "components.AddressesManagement.cityInput": { + "description": "Label of the \"city\" input", + "message": "City" + }, + "components.AddressesManagement.closeButton": { + "description": "Label of the close button", + "message": "Go back" + }, + "components.AddressesManagement.countryInput": { + "description": "Label of the \"country\" input", + "message": "Country" + }, + "components.AddressesManagement.deleteButton": { + "description": "Label of the delete button", + "message": "Delete" + }, + "components.AddressesManagement.deleteButtonLabel": { + "description": "Title of the delete button", + "message": "Delete \"{title}\" address" + }, + "components.AddressesManagement.deletionConfirmation": { + "description": "Confirmation message shown to the user when he wants to delete an address", + "message": "Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after." + }, + "components.AddressesManagement.editAddress": { + "description": "Title of the address edit form", + "message": "Update address {title}" + }, + "components.AddressesManagement.editButton": { + "description": "Label of the edit button", + "message": "Edit" + }, + "components.AddressesManagement.editButtonLabel": { + "description": "Title of the edit button", + "message": "Edit \"{title}\" address" + }, + "components.AddressesManagement.error": { + "description": "Error message shown to the user when address creation/update/deletion request fails.", + "message": "An error occurred while address {action}. Please retry later." + }, + "components.AddressesManagement.first_nameInput": { + "description": "Label of the \"first_name\" input", + "message": "Recipient's first name" + }, + "components.AddressesManagement.last_nameInput": { + "description": "Label of the \"last_name\" input", + "message": "Recipient's last name" + }, + "components.AddressesManagement.postcodeInput": { + "description": "Label of the \"postcode\" input", + "message": "Postcode" + }, + "components.AddressesManagement.promoteButtonLabel": { + "description": "Title of the button to set the address as the main one", + "message": "Define \"{title}\" address as main" + }, + "components.AddressesManagement.registeredAddresses": { + "description": "Title of the registered addresses block", + "message": "Your addresses" + }, + "components.AddressesManagement.saveInput": { + "description": "Label of the \"save\" input", + "message": "Save this address" + }, + "components.AddressesManagement.selectButton": { + "description": "Label of the select button", + "message": "Use this address" + }, + "components.AddressesManagement.selectButtonLabel": { + "description": "Title of the select button", + "message": "Select \"{title}\" address" + }, + "components.AddressesManagement.titleInput": { + "description": "Label of the \"title\" input", + "message": "Address title" + }, + "components.AddressesManagement.updateButton": { + "description": "Label of the update button", + "message": "Update this address" + }, + "components.CourseGlimpse.categoryLabel": { + "description": "Category label text for screen reader users", + "message": "Category" + }, + "components.CourseGlimpse.codeIconAlt": { + "description": "Course code logo alternative text for screen reader users", + "message": "Course code" + }, "components.CourseGlimpse.cover": { "description": "Placeholder text when the course we are glimpsing at is missing a cover image", "message": "Обложка" }, + "components.CourseGlimpse.organizationIconAlt": { + "description": "Organization logo alternative text for screen reader users", + "message": "Organization" + }, + "components.CourseGlimpseFooter.dateIconAlt": { + "description": "Course date logo alternative text for screen reader users", + "message": "Course date" + }, "components.CourseGlimpseList.courseCount": { "description": "Result count & pagination information for course search. Appears right above search results", "message": "Показано от {start, number} до {end, number} на {courseCount, number} {courseCount, plural, one {курсе} few {курсах} many {курсах} other {курсах}} в соответствии с вашим поиском" }, + "components.CourseGlimpseList.offscreenCourseCount": { + "description": "Short result count information for course search. Only for screen readers", + "message": "{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search" + }, + "components.CourseProductCertificateItem.certificateExplanation": { + "description": "Text displayed when the product certificate has no description", + "message": "You will be able to download your certificate once you will pass all course runs." + }, + "components.CourseProductCertificateItem.congratulations": { + "description": "Congratulation message when user has passed the course.", + "message": "Congratulations, you passed this course!" + }, + "components.CourseProductCertificateItem.download": { + "description": "Button label to download the certificate", + "message": "Download" + }, + "components.CourseProductCertificateItem.generatingCertificate": { + "description": "Accessible label displayed while certificate is being generated.", + "message": "Certificate is being generated..." + }, + "components.CourseProductItem.enrolled": { + "description": "Message displayed when authenticated user owned the product", + "message": "Enrolled" + }, + "components.CourseProductsList.end": { + "description": "End label displayed in the header of course run dates section", + "message": "End" + }, + "components.CourseProductsList.loadingInitial": { + "description": "Accessible text for the initial loading spinner displayed when course is fetching", + "message": "Loading course information..." + }, + "components.CourseProductsList.start": { + "description": "Start label displayed in the header of course run dates section", + "message": "Start" + }, + "components.CourseProductsLists.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseProductsLists.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, "components.CourseRunEnrollment.enroll": { "description": "CTA for users who can enroll in the course run or could enroll if they logged in.", "message": "Записаться сейчас" @@ -35,10 +207,58 @@ "description": "Helper text in the enroll button for non logged in users", "message": "Войти для записи" }, + "components.CourseRunList.enrollFromTo": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {start} to {end}" + }, + "components.CourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, "components.DesktopUserMenu.menuPurpose": { "description": "Accessible label for user menu button", "message": "Доступ к настройкам вашего профиля" }, + "components.EnrollableCourseRunList.ariaSelectCourseRun": { + "description": "Accessible label used by screen reader when user checked a course run radio input.", + "message": "Select course run from {start} to {end}." + }, + "components.EnrollableCourseRunList.enroll": { + "description": "Text label for the enroll button", + "message": "Enroll" + }, + "components.EnrollableCourseRunList.enrollOn": { + "description": "Text label for the enrollment dates", + "message": "Enrollment from {enrollment_start} to {enrollment_end}" + }, + "components.EnrollableCourseRunList.enrolling": { + "description": "Label displayed when a request to enroll to a course run is loading", + "message": "Enrolling..." + }, + "components.EnrollableCourseRunList.enrollmentNotYetOpened": { + "description": "Text label for the enroll cta when enrollment is not yet opened", + "message": "Enrollment will open on {enrollment_start}" + }, + "components.EnrollableCourseRunList.noCourseRunAvailable": { + "description": "Text displayed when no course run are opened for the course", + "message": "No session available for this course." + }, + "components.EnrollableCourseRunList.selectCourseRun": { + "description": "Label displayed when user do not have select a course run.", + "message": "Select a course run" + }, + "components.EnrolledCourseRun.goToCourse": { + "description": "CTA displayed when user is enrolled to the course run.", + "message": "Go to course" + }, + "components.EnrolledCourseRun.unroll": { + "description": "Button label to unroll.", + "message": "Unroll" + }, + "components.EnrolledCourseRun.unrolling": { + "description": "Accessible label displayed when user is being unrolled.", + "message": "Unrolling..." + }, "components.LanguageSelector.currentlySelected": { "description": "Accessible hint to mark the currently selected language in the language selector", "message": "(сейчас выбрано)" @@ -83,10 +303,138 @@ "description": "Accessibility helper for pagination, added on the previous page link.", "message": "Предыдущая страница {page}" }, + "components.PaymentButton.errorAbort": { + "description": "Error message shown when user aborts the payment.", + "message": "Вы прервали оплату." + }, + "components.PaymentButton.errorAborting": { + "description": "Error message shown when user asks to abort the payment.", + "message": "Прерывание оплаты..." + }, + "components.PaymentButton.errorDefault": { + "description": "Error message shown when payment creation request failed.", + "message": "Произошла ошибка во время оплаты. Пожалуйста, повторите попытку позже." + }, + "components.PaymentButton.pay": { + "description": "CTA label to proceed to the payment of the product", + "message": "Оплатить {price}" + }, + "components.PaymentButton.payInOneClick": { + "description": "CTA label to proceed to the one click payment of the product", + "message": "Оплатить в один клик {price}" + }, + "components.PaymentButton.paymentInProgress": { + "description": "Label for screen reader when a payment is in progress.", + "message": "Оплата в процессе" + }, + "components.PurchasedProductMenu.actionsRelated": { + "description": "Accessible label for the purchased product menu", + "message": "Other actions related to this product" + }, + "components.PurchasedProductMenu.downloadInvoice": { + "description": "Label for selector item to download invoice", + "message": "Download invoice" + }, + "components.PurchasedProductMenu.generatingInvoice": { + "description": "Accessible label when invoice is being generated", + "message": "Invoice is being generated..." + }, + "components.RegisteredCreditCard.expirationDate": { + "description": "Credit card expiration date label", + "message": "Expiration date: {expirationDate}" + }, + "components.RegisteredCreditCard.inputAriaLabel": { + "description": "ARIA Label read by screen reader to inform which card is focused", + "message": "{selected, select, true {Unselect} other {Select}} {title}'s card" + }, "components.RootSearchSuggestField.searchFieldPlaceholder": { "description": "Placeholder text displayed in the search field when it is empty.", "message": "Поиск курсов" }, + "components.SaleTunnel.closeDialog": { + "description": "ARIA label used by screenreader to inform that the close dialog button is selected", + "message": "Close the dialog" + }, + "components.SaleTunnel.loginToPurchase": { + "description": "Label displayed inside the product's CTA when user is not logged in", + "message": "Login to purchase" + }, + "components.SaleTunnel.stepPayment": { + "description": "Label of the Payment step", + "message": "Payment" + }, + "components.SaleTunnel.stepResume": { + "description": "Label of the Resume step", + "message": "Resume" + }, + "components.SaleTunnel.stepValidation": { + "description": "Label of the Validation step", + "message": "Validation" + }, + "components.SaleTunnelStepPayment.registeredCardSectionTitle": { + "description": "Label for the registered credit cards section", + "message": "Your registered credit card" + }, + "components.SaleTunnelStepPayment.resumeTile": { + "description": "Label for the resume tile", + "message": "You are about to purchase" + }, + "components.SaleTunnelStepPayment.userBillingAddressAddLabel": { + "description": "Label for the billing address add button", + "message": "Add an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressCreateLabel": { + "description": "Label for the billing address create button", + "message": "Create an address" + }, + "components.SaleTunnelStepPayment.userBillingAddressFieldset": { + "description": "Label for the billing address fieldset", + "message": "Billing address" + }, + "components.SaleTunnelStepPayment.userBillingAddressNoEntry": { + "description": "Message displayed when the user has no address.", + "message": "You have not yet a billing address." + }, + "components.SaleTunnelStepPayment.userBillingAddressSelectLabel": { + "description": "Label for the billing address select", + "message": "Select a billing address" + }, + "components.SaleTunnelStepPayment.userTile": { + "description": "Label for the user information tile", + "message": "Your personal information" + }, + "components.SaleTunnelStepResume.congratulations": { + "description": "Text displayed to thank user for his order", + "message": "Congratulations!" + }, + "components.SaleTunnelStepResume.cta": { + "description": "Label to the call to action to close sale tunnel", + "message": "Start this course now!" + }, + "components.SaleTunnelStepResume.successDetailMessage": { + "description": "Text to remind that order's invoice will be send by email soon", + "message": "You will receive your invoice by email in a few moments." + }, + "components.SaleTunnelStepResume.successMessage": { + "description": "Message to confirm that order has been created", + "message": "Your order has been successfully created." + }, + "components.SaleTunnelStepValidation.availableCourseRuns": { + "description": "Course runs available text", + "message": "{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available" + }, + "components.SaleTunnelStepValidation.courseRunDates": { + "description": "Course run date text", + "message": "From {start} to {end}" + }, + "components.SaleTunnelStepValidation.includingVAT": { + "description": "Text displayed next to the price to mention this is the price including VAT.", + "message": "including VAT" + }, + "components.SaleTunnelStepValidation.proceedToPayment": { + "description": "CTA to go to payment step", + "message": "Proceed to payment" + }, "components.Search.errorMessage": { "description": "Error message for Search view when the request to load courses fails", "message": "Что-то не так! Курсы не могут быть загружены." @@ -95,6 +443,10 @@ "description": "Accessibility text for the button/icon that toggles *off* the filters pane on mobile", "message": "Скрыть панель фильтров" }, + "components.Search.resultsTitle": { + "description": "Title for the search results pane in course search (not shown, made for screen reader users).", + "message": "Результаты поиска" + }, "components.Search.showFiltersPane": { "description": "Accessibility text for the button/icon that toggles *on* the filters pane on mobile", "message": "Показать панель фильтров" diff --git a/src/frontend/js/translations/ar-SA.json b/src/frontend/js/translations/ar-SA.json index d7a37adfd4..cd43526d44 100644 --- a/src/frontend/js/translations/ar-SA.json +++ b/src/frontend/js/translations/ar-SA.json @@ -1 +1 @@ -{"components.CourseGlimpse.cover":"Cover","components.CourseGlimpseList.courseCount":"Showing {start, number} to {end, number} of {courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseRunEnrollment.enroll":"Enroll now","components.CourseRunEnrollment.enrolled":"You are enrolled in this course run","components.CourseRunEnrollment.enrollmentClosed":"Enrollment in this course run is closed at the moment","components.CourseRunEnrollment.enrollmentFailed":"Your enrollment request failed.","components.CourseRunEnrollment.goToCourse":"Go to course","components.CourseRunEnrollment.loadingInitial":"Loading enrollment information...","components.CourseRunEnrollment.loginToEnroll":"Log in to enroll","components.DesktopUserMenu.menuPurpose":"Access to your profile settings","components.LanguageSelector.currentlySelected":"(currently selected)","components.LanguageSelector.languages":"Languages","components.LanguageSelector.selectLanguage":"Select a language:","components.LanguageSelector.switchToLanguage":"Switch to {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Currently reading last page {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Currently reading page {page}","components.PaginateCourseSearch.lastPageN":"Last page {page}","components.PaginateCourseSearch.nextPageN":"Next page {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Previous page {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Search for courses","components.Search.errorMessage":"Something's wrong! Courses could not be loaded.","components.Search.hideFiltersPane":"Hide filters pane","components.Search.showFiltersPane":"Show filters pane","components.Search.spinnerText":"Loading search results...","components.Search.textQueryLengthWarning":"Text search requires at least 3 characters. { query } is not long enough to search. Search results will not be affected by this query.","components.SearchFilterGroupModal.closeModal":"Close modal","components.SearchFilterGroupModal.error":"There was an error while searching for {filterName}.","components.SearchFilterGroupModal.inputLabel":"Search for filters to add","components.SearchFilterGroupModal.inputPlaceholder":"Search in { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Load more results","components.SearchFilterGroupModal.loadingResults":"Loading search results...","components.SearchFilterGroupModal.modalTitle":"Add filters for {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"More options","components.SearchFilterGroupModal.queryTooShort":"Type at least 3 characters to start searching.","components.SearchFilterValueParent.ariaHideChildren":"Hide additional filters for {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Show more filters for {filterValueName}","components.SearchFiltersPane.clearFilters":"Clear {activeFilterCount, number} active {activeFilterCount, plural, one {filter} other {filters}}","components.SearchFiltersPane.title":"Filter courses","components.SearchInput.button":"Search","components.SearchSuggestField.searchFieldPlaceholder":"Search for courses, organizations, categories","components.UserLogin.logIn":"Log in","components.UserLogin.logOut":"Log out","components.UserLogin.signup":"Sign up","components.UserLogin.spinnerText":"Loading login status...","components.useStaticFilters.courses":"Courses"} \ No newline at end of file +{"components.AddressesManagement.actionCreation":"creation","components.AddressesManagement.actionDeletion":"deletion","components.AddressesManagement.actionPromotion":"promotion","components.AddressesManagement.actionUpdate":"update","components.AddressesManagement.addAddress":"Add a new address","components.AddressesManagement.addressInput":"Address","components.AddressesManagement.cancelButton":"Cancel","components.AddressesManagement.cancelTitleButton":"Cancel edition","components.AddressesManagement.cityInput":"City","components.AddressesManagement.closeButton":"Go back","components.AddressesManagement.countryInput":"Country","components.AddressesManagement.deleteButton":"Delete","components.AddressesManagement.deleteButtonLabel":"Delete \"{title}\" address","components.AddressesManagement.deletionConfirmation":"Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after.","components.AddressesManagement.editAddress":"Update address {title}","components.AddressesManagement.editButton":"Edit","components.AddressesManagement.editButtonLabel":"Edit \"{title}\" address","components.AddressesManagement.error":"An error occurred while address {action}. Please retry later.","components.AddressesManagement.first_nameInput":"Recipient's first name","components.AddressesManagement.last_nameInput":"Recipient's last name","components.AddressesManagement.postcodeInput":"Postcode","components.AddressesManagement.promoteButtonLabel":"Define \"{title}\" address as main","components.AddressesManagement.registeredAddresses":"Your addresses","components.AddressesManagement.saveInput":"Save this address","components.AddressesManagement.selectButton":"Use this address","components.AddressesManagement.selectButtonLabel":"Select \"{title}\" address","components.AddressesManagement.titleInput":"Address title","components.AddressesManagement.updateButton":"Update this address","components.CourseGlimpse.categoryLabel":"Category","components.CourseGlimpse.codeIconAlt":"Course code","components.CourseGlimpse.cover":"Cover","components.CourseGlimpse.organizationIconAlt":"Organization","components.CourseGlimpseFooter.dateIconAlt":"Course date","components.CourseGlimpseList.courseCount":"Showing {start, number} to {end, number} of {courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseGlimpseList.offscreenCourseCount":"{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseProductCertificateItem.certificateExplanation":"You will be able to download your certificate once you will pass all course runs.","components.CourseProductCertificateItem.congratulations":"Congratulations, you passed this course!","components.CourseProductCertificateItem.download":"Download","components.CourseProductCertificateItem.generatingCertificate":"Certificate is being generated...","components.CourseProductItem.enrolled":"Enrolled","components.CourseProductsList.end":"End","components.CourseProductsList.loadingInitial":"Loading course information...","components.CourseProductsList.start":"Start","components.CourseProductsLists.enrollOn":"Enrollment from {start} to {end}","components.CourseProductsLists.noCourseRunAvailable":"No session available for this course.","components.CourseRunEnrollment.enroll":"Enroll now","components.CourseRunEnrollment.enrolled":"You are enrolled in this course run","components.CourseRunEnrollment.enrollmentClosed":"Enrollment in this course run is closed at the moment","components.CourseRunEnrollment.enrollmentFailed":"Your enrollment request failed.","components.CourseRunEnrollment.goToCourse":"Go to course","components.CourseRunEnrollment.loadingInitial":"Loading enrollment information...","components.CourseRunEnrollment.loginToEnroll":"Log in to enroll","components.CourseRunList.enrollFromTo":"Enrollment from {start} to {end}","components.CourseRunList.noCourseRunAvailable":"No session available for this course.","components.DesktopUserMenu.menuPurpose":"Access to your profile settings","components.EnrollableCourseRunList.ariaSelectCourseRun":"Select course run from {start} to {end}.","components.EnrollableCourseRunList.enroll":"Enroll","components.EnrollableCourseRunList.enrollOn":"Enrollment from {enrollment_start} to {enrollment_end}","components.EnrollableCourseRunList.enrolling":"Enrolling...","components.EnrollableCourseRunList.enrollmentNotYetOpened":"Enrollment will open on {enrollment_start}","components.EnrollableCourseRunList.noCourseRunAvailable":"No session available for this course.","components.EnrollableCourseRunList.selectCourseRun":"Select a course run","components.EnrolledCourseRun.goToCourse":"Go to course","components.EnrolledCourseRun.unroll":"Unroll","components.EnrolledCourseRun.unrolling":"Unrolling...","components.LanguageSelector.currentlySelected":"(currently selected)","components.LanguageSelector.languages":"Languages","components.LanguageSelector.selectLanguage":"Select a language:","components.LanguageSelector.switchToLanguage":"Switch to {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Currently reading last page {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Currently reading page {page}","components.PaginateCourseSearch.lastPageN":"Last page {page}","components.PaginateCourseSearch.nextPageN":"Next page {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Previous page {page}","components.PaymentButton.errorAbort":"You have aborted the payment.","components.PaymentButton.errorAborting":"Aborting the payment...","components.PaymentButton.errorDefault":"An error occurred during payment. Please retry later.","components.PaymentButton.pay":"Pay {price}","components.PaymentButton.payInOneClick":"Pay in one click {price}","components.PaymentButton.paymentInProgress":"Payment in progress","components.PurchasedProductMenu.actionsRelated":"Other actions related to this product","components.PurchasedProductMenu.downloadInvoice":"Download invoice","components.PurchasedProductMenu.generatingInvoice":"Invoice is being generated...","components.RegisteredCreditCard.expirationDate":"Expiration date: {expirationDate}","components.RegisteredCreditCard.inputAriaLabel":"{selected, select, true {Unselect} other {Select}} {title}'s card","components.RootSearchSuggestField.searchFieldPlaceholder":"Search for courses","components.SaleTunnel.closeDialog":"Close the dialog","components.SaleTunnel.loginToPurchase":"Login to purchase","components.SaleTunnel.stepPayment":"Payment","components.SaleTunnel.stepResume":"Resume","components.SaleTunnel.stepValidation":"Validation","components.SaleTunnelStepPayment.registeredCardSectionTitle":"Your registered credit card","components.SaleTunnelStepPayment.resumeTile":"You are about to purchase","components.SaleTunnelStepPayment.userBillingAddressAddLabel":"Add an address","components.SaleTunnelStepPayment.userBillingAddressCreateLabel":"Create an address","components.SaleTunnelStepPayment.userBillingAddressFieldset":"Billing address","components.SaleTunnelStepPayment.userBillingAddressNoEntry":"You have not yet a billing address.","components.SaleTunnelStepPayment.userBillingAddressSelectLabel":"Select a billing address","components.SaleTunnelStepPayment.userTile":"Your personal information","components.SaleTunnelStepResume.congratulations":"Congratulations!","components.SaleTunnelStepResume.cta":"Start this course now!","components.SaleTunnelStepResume.successDetailMessage":"You will receive your invoice by email in a few moments.","components.SaleTunnelStepResume.successMessage":"Your order has been successfully created.","components.SaleTunnelStepValidation.availableCourseRuns":"{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available","components.SaleTunnelStepValidation.courseRunDates":"From {start} to {end}","components.SaleTunnelStepValidation.includingVAT":"including VAT","components.SaleTunnelStepValidation.proceedToPayment":"Proceed to payment","components.Search.errorMessage":"Something's wrong! Courses could not be loaded.","components.Search.hideFiltersPane":"Hide filters pane","components.Search.resultsTitle":"Search results","components.Search.showFiltersPane":"Show filters pane","components.Search.spinnerText":"Loading search results...","components.Search.textQueryLengthWarning":"Text search requires at least 3 characters. { query } is not long enough to search. Search results will not be affected by this query.","components.SearchFilterGroupModal.closeModal":"Close modal","components.SearchFilterGroupModal.error":"There was an error while searching for {filterName}.","components.SearchFilterGroupModal.inputLabel":"Search for filters to add","components.SearchFilterGroupModal.inputPlaceholder":"Search in { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Load more results","components.SearchFilterGroupModal.loadingResults":"Loading search results...","components.SearchFilterGroupModal.modalTitle":"Add filters for {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"More options","components.SearchFilterGroupModal.queryTooShort":"Type at least 3 characters to start searching.","components.SearchFilterValueParent.ariaHideChildren":"Hide additional filters for {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Show more filters for {filterValueName}","components.SearchFiltersPane.clearFilters":"Clear {activeFilterCount, number} active {activeFilterCount, plural, one {filter} other {filters}}","components.SearchFiltersPane.title":"Filter courses","components.SearchInput.button":"Search","components.SearchSuggestField.searchFieldPlaceholder":"Search for courses, organizations, categories","components.UserLogin.logIn":"Log in","components.UserLogin.logOut":"Log out","components.UserLogin.signup":"Sign up","components.UserLogin.spinnerText":"Loading login status...","components.useStaticFilters.courses":"Courses"} \ No newline at end of file diff --git a/src/frontend/js/translations/es-ES.json b/src/frontend/js/translations/es-ES.json index fbc5249c41..dc4e0b485d 100644 --- a/src/frontend/js/translations/es-ES.json +++ b/src/frontend/js/translations/es-ES.json @@ -1 +1 @@ -{"components.CourseGlimpse.cover":"Portada","components.CourseGlimpseList.courseCount":"Mostrando {start, number} a {end, number} de {courseCount, number} ¡ {courseCount, plural, one {curso} other {cursos}} que coinciden con su búsqueda","components.CourseRunEnrollment.enroll":"Inscribirse ahora","components.CourseRunEnrollment.enrolled":"Se ha inscrito en este curso","components.CourseRunEnrollment.enrollmentClosed":"La inscripción en este curso está cerrada por el momento","components.CourseRunEnrollment.enrollmentFailed":"Su solicitud de inscripción ha fallado.","components.CourseRunEnrollment.goToCourse":"Ir al curso","components.CourseRunEnrollment.loadingInitial":"Cargando información de inscripción...","components.CourseRunEnrollment.loginToEnroll":"Inicia sesión para inscribirse","components.DesktopUserMenu.menuPurpose":"Acceso a la configuración de su perfil","components.LanguageSelector.currentlySelected":"(actualmente seleccionado)","components.LanguageSelector.languages":"Idiomas","components.LanguageSelector.selectLanguage":"Seleccione un idioma:","components.LanguageSelector.switchToLanguage":"Cambiar a {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Leyendo la última página {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actualmente leyendo la página {page}","components.PaginateCourseSearch.lastPageN":"Última página {page}","components.PaginateCourseSearch.nextPageN":"Página siguiente {page}","components.PaginateCourseSearch.pageN":"Página {page}","components.PaginateCourseSearch.pagination":"Paginación","components.PaginateCourseSearch.previousPageN":"Página anterior {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Buscar cursos","components.Search.errorMessage":"¡Algo está mal! No se han podido cargar los cursos.","components.Search.hideFiltersPane":"Ocultar panel de filtros","components.Search.showFiltersPane":"Mostrar panel de filtros","components.Search.spinnerText":"Cargando resultados de búsqueda...","components.Search.textQueryLengthWarning":"La búsqueda de texto requiere al menos 3 caracteres. { query } no es lo suficientemente larga para buscar. Los resultados de la búsqueda no se verán afectados por esta consulta.","components.SearchFilterGroupModal.closeModal":"Cerrar ventana modal","components.SearchFilterGroupModal.error":"Se ha producido un error al buscar {filterName}.","components.SearchFilterGroupModal.inputLabel":"Buscar filtros para añadir","components.SearchFilterGroupModal.inputPlaceholder":"Buscar en { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Cargar más resultados","components.SearchFilterGroupModal.loadingResults":"Cargando resultados de búsqueda...","components.SearchFilterGroupModal.modalTitle":"Añadir filtros para {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Más opciones","components.SearchFilterGroupModal.queryTooShort":"Escriba por lo menos 3 caracteres para iniciar la búsqueda.","components.SearchFilterValueParent.ariaHideChildren":"Ocultar filtros adicionales para {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Mostrar más filtros para {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirar {activeFilterCount, number} activo {activeFilterCount, plural, one {filtro} other {filtros}}","components.SearchFiltersPane.title":"Filtrar cursos","components.SearchInput.button":"Buscar","components.SearchSuggestField.searchFieldPlaceholder":"Buscar cursos, organizaciones, categorías","components.UserLogin.logIn":"Iniciar sesión","components.UserLogin.logOut":"Cerrar sesión","components.UserLogin.signup":"Registrarse","components.UserLogin.spinnerText":"Cargando estado de inicio de sesión...","components.useStaticFilters.courses":"Cursos"} \ No newline at end of file +{"components.AddressesManagement.actionCreation":"creation","components.AddressesManagement.actionDeletion":"deletion","components.AddressesManagement.actionPromotion":"promotion","components.AddressesManagement.actionUpdate":"update","components.AddressesManagement.addAddress":"Add a new address","components.AddressesManagement.addressInput":"Address","components.AddressesManagement.cancelButton":"Cancel","components.AddressesManagement.cancelTitleButton":"Cancel edition","components.AddressesManagement.cityInput":"City","components.AddressesManagement.closeButton":"Go back","components.AddressesManagement.countryInput":"Country","components.AddressesManagement.deleteButton":"Delete","components.AddressesManagement.deleteButtonLabel":"Delete \"{title}\" address","components.AddressesManagement.deletionConfirmation":"Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after.","components.AddressesManagement.editAddress":"Update address {title}","components.AddressesManagement.editButton":"Edit","components.AddressesManagement.editButtonLabel":"Edit \"{title}\" address","components.AddressesManagement.error":"An error occurred while address {action}. Please retry later.","components.AddressesManagement.first_nameInput":"Recipient's first name","components.AddressesManagement.last_nameInput":"Recipient's last name","components.AddressesManagement.postcodeInput":"Postcode","components.AddressesManagement.promoteButtonLabel":"Define \"{title}\" address as main","components.AddressesManagement.registeredAddresses":"Your addresses","components.AddressesManagement.saveInput":"Save this address","components.AddressesManagement.selectButton":"Use this address","components.AddressesManagement.selectButtonLabel":"Select \"{title}\" address","components.AddressesManagement.titleInput":"Address title","components.AddressesManagement.updateButton":"Update this address","components.CourseGlimpse.categoryLabel":"Category","components.CourseGlimpse.codeIconAlt":"Course code","components.CourseGlimpse.cover":"Portada","components.CourseGlimpse.organizationIconAlt":"Organization","components.CourseGlimpseFooter.dateIconAlt":"Course date","components.CourseGlimpseList.courseCount":"Mostrando {start, number} a {end, number} de {courseCount, number} ¡ {courseCount, plural, one {curso} other {cursos}} que coinciden con su búsqueda","components.CourseGlimpseList.offscreenCourseCount":"{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseProductCertificateItem.certificateExplanation":"You will be able to download your certificate once you will pass all course runs.","components.CourseProductCertificateItem.congratulations":"Congratulations, you passed this course!","components.CourseProductCertificateItem.download":"Download","components.CourseProductCertificateItem.generatingCertificate":"Certificate is being generated...","components.CourseProductItem.enrolled":"Enrolled","components.CourseProductsList.end":"End","components.CourseProductsList.loadingInitial":"Loading course information...","components.CourseProductsList.start":"Start","components.CourseProductsLists.enrollOn":"Enrollment from {start} to {end}","components.CourseProductsLists.noCourseRunAvailable":"No session available for this course.","components.CourseRunEnrollment.enroll":"Inscribirse ahora","components.CourseRunEnrollment.enrolled":"Se ha inscrito en este curso","components.CourseRunEnrollment.enrollmentClosed":"La inscripción en este curso está cerrada por el momento","components.CourseRunEnrollment.enrollmentFailed":"Su solicitud de inscripción ha fallado.","components.CourseRunEnrollment.goToCourse":"Ir al curso","components.CourseRunEnrollment.loadingInitial":"Cargando información de inscripción...","components.CourseRunEnrollment.loginToEnroll":"Inicia sesión para inscribirse","components.CourseRunList.enrollFromTo":"Enrollment from {start} to {end}","components.CourseRunList.noCourseRunAvailable":"No session available for this course.","components.DesktopUserMenu.menuPurpose":"Acceso a la configuración de su perfil","components.EnrollableCourseRunList.ariaSelectCourseRun":"Select course run from {start} to {end}.","components.EnrollableCourseRunList.enroll":"Enroll","components.EnrollableCourseRunList.enrollOn":"Enrollment from {enrollment_start} to {enrollment_end}","components.EnrollableCourseRunList.enrolling":"Enrolling...","components.EnrollableCourseRunList.enrollmentNotYetOpened":"Enrollment will open on {enrollment_start}","components.EnrollableCourseRunList.noCourseRunAvailable":"No session available for this course.","components.EnrollableCourseRunList.selectCourseRun":"Select a course run","components.EnrolledCourseRun.goToCourse":"Go to course","components.EnrolledCourseRun.unroll":"Unroll","components.EnrolledCourseRun.unrolling":"Unrolling...","components.LanguageSelector.currentlySelected":"(actualmente seleccionado)","components.LanguageSelector.languages":"Idiomas","components.LanguageSelector.selectLanguage":"Seleccione un idioma:","components.LanguageSelector.switchToLanguage":"Cambiar a {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Leyendo la última página {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actualmente leyendo la página {page}","components.PaginateCourseSearch.lastPageN":"Última página {page}","components.PaginateCourseSearch.nextPageN":"Página siguiente {page}","components.PaginateCourseSearch.pageN":"Página {page}","components.PaginateCourseSearch.pagination":"Paginación","components.PaginateCourseSearch.previousPageN":"Página anterior {page}","components.PaymentButton.errorAbort":"Ha cancelado el pago.","components.PaymentButton.errorAborting":"Cancelando el pago...","components.PaymentButton.errorDefault":"Se ha producido un error durante el pago. Vuelva a intentarlo más tarde.","components.PaymentButton.pay":"Pagar {price}€","components.PaymentButton.payInOneClick":"Pague en un solo clic {price}","components.PaymentButton.paymentInProgress":"Pago en curso","components.PurchasedProductMenu.actionsRelated":"Other actions related to this product","components.PurchasedProductMenu.downloadInvoice":"Download invoice","components.PurchasedProductMenu.generatingInvoice":"Invoice is being generated...","components.RegisteredCreditCard.expirationDate":"Expiration date: {expirationDate}","components.RegisteredCreditCard.inputAriaLabel":"{selected, select, true {Unselect} other {Select}} {title}'s card","components.RootSearchSuggestField.searchFieldPlaceholder":"Buscar cursos","components.SaleTunnel.closeDialog":"Close the dialog","components.SaleTunnel.loginToPurchase":"Login to purchase","components.SaleTunnel.stepPayment":"Payment","components.SaleTunnel.stepResume":"Resume","components.SaleTunnel.stepValidation":"Validation","components.SaleTunnelStepPayment.registeredCardSectionTitle":"Your registered credit card","components.SaleTunnelStepPayment.resumeTile":"You are about to purchase","components.SaleTunnelStepPayment.userBillingAddressAddLabel":"Add an address","components.SaleTunnelStepPayment.userBillingAddressCreateLabel":"Create an address","components.SaleTunnelStepPayment.userBillingAddressFieldset":"Billing address","components.SaleTunnelStepPayment.userBillingAddressNoEntry":"You have not yet a billing address.","components.SaleTunnelStepPayment.userBillingAddressSelectLabel":"Select a billing address","components.SaleTunnelStepPayment.userTile":"Your personal information","components.SaleTunnelStepResume.congratulations":"Congratulations!","components.SaleTunnelStepResume.cta":"Start this course now!","components.SaleTunnelStepResume.successDetailMessage":"You will receive your invoice by email in a few moments.","components.SaleTunnelStepResume.successMessage":"Your order has been successfully created.","components.SaleTunnelStepValidation.availableCourseRuns":"{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available","components.SaleTunnelStepValidation.courseRunDates":"From {start} to {end}","components.SaleTunnelStepValidation.includingVAT":"including VAT","components.SaleTunnelStepValidation.proceedToPayment":"Proceed to payment","components.Search.errorMessage":"¡Algo está mal! No se han podido cargar los cursos.","components.Search.hideFiltersPane":"Ocultar panel de filtros","components.Search.resultsTitle":"Resultados de búsqueda","components.Search.showFiltersPane":"Mostrar panel de filtros","components.Search.spinnerText":"Cargando resultados de búsqueda...","components.Search.textQueryLengthWarning":"La búsqueda de texto requiere al menos 3 caracteres. { query } no es lo suficientemente larga para buscar. Los resultados de la búsqueda no se verán afectados por esta consulta.","components.SearchFilterGroupModal.closeModal":"Cerrar ventana modal","components.SearchFilterGroupModal.error":"Se ha producido un error al buscar {filterName}.","components.SearchFilterGroupModal.inputLabel":"Buscar filtros para añadir","components.SearchFilterGroupModal.inputPlaceholder":"Buscar en { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Cargar más resultados","components.SearchFilterGroupModal.loadingResults":"Cargando resultados de búsqueda...","components.SearchFilterGroupModal.modalTitle":"Añadir filtros para {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Más opciones","components.SearchFilterGroupModal.queryTooShort":"Escriba por lo menos 3 caracteres para iniciar la búsqueda.","components.SearchFilterValueParent.ariaHideChildren":"Ocultar filtros adicionales para {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Mostrar más filtros para {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirar {activeFilterCount, number} activo {activeFilterCount, plural, one {filtro} other {filtros}}","components.SearchFiltersPane.title":"Filtrar cursos","components.SearchInput.button":"Buscar","components.SearchSuggestField.searchFieldPlaceholder":"Buscar cursos, organizaciones, categorías","components.UserLogin.logIn":"Iniciar sesión","components.UserLogin.logOut":"Cerrar sesión","components.UserLogin.signup":"Registrarse","components.UserLogin.spinnerText":"Cargando estado de inicio de sesión...","components.useStaticFilters.courses":"Cursos"} \ No newline at end of file diff --git a/src/frontend/js/translations/fa-IR.json b/src/frontend/js/translations/fa-IR.json new file mode 100644 index 0000000000..cd43526d44 --- /dev/null +++ b/src/frontend/js/translations/fa-IR.json @@ -0,0 +1 @@ +{"components.AddressesManagement.actionCreation":"creation","components.AddressesManagement.actionDeletion":"deletion","components.AddressesManagement.actionPromotion":"promotion","components.AddressesManagement.actionUpdate":"update","components.AddressesManagement.addAddress":"Add a new address","components.AddressesManagement.addressInput":"Address","components.AddressesManagement.cancelButton":"Cancel","components.AddressesManagement.cancelTitleButton":"Cancel edition","components.AddressesManagement.cityInput":"City","components.AddressesManagement.closeButton":"Go back","components.AddressesManagement.countryInput":"Country","components.AddressesManagement.deleteButton":"Delete","components.AddressesManagement.deleteButtonLabel":"Delete \"{title}\" address","components.AddressesManagement.deletionConfirmation":"Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after.","components.AddressesManagement.editAddress":"Update address {title}","components.AddressesManagement.editButton":"Edit","components.AddressesManagement.editButtonLabel":"Edit \"{title}\" address","components.AddressesManagement.error":"An error occurred while address {action}. Please retry later.","components.AddressesManagement.first_nameInput":"Recipient's first name","components.AddressesManagement.last_nameInput":"Recipient's last name","components.AddressesManagement.postcodeInput":"Postcode","components.AddressesManagement.promoteButtonLabel":"Define \"{title}\" address as main","components.AddressesManagement.registeredAddresses":"Your addresses","components.AddressesManagement.saveInput":"Save this address","components.AddressesManagement.selectButton":"Use this address","components.AddressesManagement.selectButtonLabel":"Select \"{title}\" address","components.AddressesManagement.titleInput":"Address title","components.AddressesManagement.updateButton":"Update this address","components.CourseGlimpse.categoryLabel":"Category","components.CourseGlimpse.codeIconAlt":"Course code","components.CourseGlimpse.cover":"Cover","components.CourseGlimpse.organizationIconAlt":"Organization","components.CourseGlimpseFooter.dateIconAlt":"Course date","components.CourseGlimpseList.courseCount":"Showing {start, number} to {end, number} of {courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseGlimpseList.offscreenCourseCount":"{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseProductCertificateItem.certificateExplanation":"You will be able to download your certificate once you will pass all course runs.","components.CourseProductCertificateItem.congratulations":"Congratulations, you passed this course!","components.CourseProductCertificateItem.download":"Download","components.CourseProductCertificateItem.generatingCertificate":"Certificate is being generated...","components.CourseProductItem.enrolled":"Enrolled","components.CourseProductsList.end":"End","components.CourseProductsList.loadingInitial":"Loading course information...","components.CourseProductsList.start":"Start","components.CourseProductsLists.enrollOn":"Enrollment from {start} to {end}","components.CourseProductsLists.noCourseRunAvailable":"No session available for this course.","components.CourseRunEnrollment.enroll":"Enroll now","components.CourseRunEnrollment.enrolled":"You are enrolled in this course run","components.CourseRunEnrollment.enrollmentClosed":"Enrollment in this course run is closed at the moment","components.CourseRunEnrollment.enrollmentFailed":"Your enrollment request failed.","components.CourseRunEnrollment.goToCourse":"Go to course","components.CourseRunEnrollment.loadingInitial":"Loading enrollment information...","components.CourseRunEnrollment.loginToEnroll":"Log in to enroll","components.CourseRunList.enrollFromTo":"Enrollment from {start} to {end}","components.CourseRunList.noCourseRunAvailable":"No session available for this course.","components.DesktopUserMenu.menuPurpose":"Access to your profile settings","components.EnrollableCourseRunList.ariaSelectCourseRun":"Select course run from {start} to {end}.","components.EnrollableCourseRunList.enroll":"Enroll","components.EnrollableCourseRunList.enrollOn":"Enrollment from {enrollment_start} to {enrollment_end}","components.EnrollableCourseRunList.enrolling":"Enrolling...","components.EnrollableCourseRunList.enrollmentNotYetOpened":"Enrollment will open on {enrollment_start}","components.EnrollableCourseRunList.noCourseRunAvailable":"No session available for this course.","components.EnrollableCourseRunList.selectCourseRun":"Select a course run","components.EnrolledCourseRun.goToCourse":"Go to course","components.EnrolledCourseRun.unroll":"Unroll","components.EnrolledCourseRun.unrolling":"Unrolling...","components.LanguageSelector.currentlySelected":"(currently selected)","components.LanguageSelector.languages":"Languages","components.LanguageSelector.selectLanguage":"Select a language:","components.LanguageSelector.switchToLanguage":"Switch to {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Currently reading last page {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Currently reading page {page}","components.PaginateCourseSearch.lastPageN":"Last page {page}","components.PaginateCourseSearch.nextPageN":"Next page {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Previous page {page}","components.PaymentButton.errorAbort":"You have aborted the payment.","components.PaymentButton.errorAborting":"Aborting the payment...","components.PaymentButton.errorDefault":"An error occurred during payment. Please retry later.","components.PaymentButton.pay":"Pay {price}","components.PaymentButton.payInOneClick":"Pay in one click {price}","components.PaymentButton.paymentInProgress":"Payment in progress","components.PurchasedProductMenu.actionsRelated":"Other actions related to this product","components.PurchasedProductMenu.downloadInvoice":"Download invoice","components.PurchasedProductMenu.generatingInvoice":"Invoice is being generated...","components.RegisteredCreditCard.expirationDate":"Expiration date: {expirationDate}","components.RegisteredCreditCard.inputAriaLabel":"{selected, select, true {Unselect} other {Select}} {title}'s card","components.RootSearchSuggestField.searchFieldPlaceholder":"Search for courses","components.SaleTunnel.closeDialog":"Close the dialog","components.SaleTunnel.loginToPurchase":"Login to purchase","components.SaleTunnel.stepPayment":"Payment","components.SaleTunnel.stepResume":"Resume","components.SaleTunnel.stepValidation":"Validation","components.SaleTunnelStepPayment.registeredCardSectionTitle":"Your registered credit card","components.SaleTunnelStepPayment.resumeTile":"You are about to purchase","components.SaleTunnelStepPayment.userBillingAddressAddLabel":"Add an address","components.SaleTunnelStepPayment.userBillingAddressCreateLabel":"Create an address","components.SaleTunnelStepPayment.userBillingAddressFieldset":"Billing address","components.SaleTunnelStepPayment.userBillingAddressNoEntry":"You have not yet a billing address.","components.SaleTunnelStepPayment.userBillingAddressSelectLabel":"Select a billing address","components.SaleTunnelStepPayment.userTile":"Your personal information","components.SaleTunnelStepResume.congratulations":"Congratulations!","components.SaleTunnelStepResume.cta":"Start this course now!","components.SaleTunnelStepResume.successDetailMessage":"You will receive your invoice by email in a few moments.","components.SaleTunnelStepResume.successMessage":"Your order has been successfully created.","components.SaleTunnelStepValidation.availableCourseRuns":"{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available","components.SaleTunnelStepValidation.courseRunDates":"From {start} to {end}","components.SaleTunnelStepValidation.includingVAT":"including VAT","components.SaleTunnelStepValidation.proceedToPayment":"Proceed to payment","components.Search.errorMessage":"Something's wrong! Courses could not be loaded.","components.Search.hideFiltersPane":"Hide filters pane","components.Search.resultsTitle":"Search results","components.Search.showFiltersPane":"Show filters pane","components.Search.spinnerText":"Loading search results...","components.Search.textQueryLengthWarning":"Text search requires at least 3 characters. { query } is not long enough to search. Search results will not be affected by this query.","components.SearchFilterGroupModal.closeModal":"Close modal","components.SearchFilterGroupModal.error":"There was an error while searching for {filterName}.","components.SearchFilterGroupModal.inputLabel":"Search for filters to add","components.SearchFilterGroupModal.inputPlaceholder":"Search in { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Load more results","components.SearchFilterGroupModal.loadingResults":"Loading search results...","components.SearchFilterGroupModal.modalTitle":"Add filters for {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"More options","components.SearchFilterGroupModal.queryTooShort":"Type at least 3 characters to start searching.","components.SearchFilterValueParent.ariaHideChildren":"Hide additional filters for {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Show more filters for {filterValueName}","components.SearchFiltersPane.clearFilters":"Clear {activeFilterCount, number} active {activeFilterCount, plural, one {filter} other {filters}}","components.SearchFiltersPane.title":"Filter courses","components.SearchInput.button":"Search","components.SearchSuggestField.searchFieldPlaceholder":"Search for courses, organizations, categories","components.UserLogin.logIn":"Log in","components.UserLogin.logOut":"Log out","components.UserLogin.signup":"Sign up","components.UserLogin.spinnerText":"Loading login status...","components.useStaticFilters.courses":"Courses"} \ No newline at end of file diff --git a/src/frontend/js/translations/fr-CA.json b/src/frontend/js/translations/fr-CA.json index a327552718..dd498f8e52 100644 --- a/src/frontend/js/translations/fr-CA.json +++ b/src/frontend/js/translations/fr-CA.json @@ -1 +1 @@ -{"components.CourseGlimpse.cover":"Couverture","components.CourseGlimpseList.courseCount":"Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche","components.CourseRunEnrollment.enroll":"S’inscrire maintenant","components.CourseRunEnrollment.enrolled":"Vous êtes inscrit à cette session","components.CourseRunEnrollment.enrollmentClosed":"L'inscription à ce cours est fermée pour le moment","components.CourseRunEnrollment.enrollmentFailed":"Votre demande d'inscription a échoué.","components.CourseRunEnrollment.goToCourse":"Accéder au cours","components.CourseRunEnrollment.loadingInitial":"Chargement des critères d'inscription...","components.CourseRunEnrollment.loginToEnroll":"Connectez-vous pour vous inscrire","components.DesktopUserMenu.menuPurpose":"Accéder aux préférences de votre profil","components.LanguageSelector.currentlySelected":"(actuellement sélectionné)","components.LanguageSelector.languages":"Langues","components.LanguageSelector.selectLanguage":"Sélectionnez une langue:","components.LanguageSelector.switchToLanguage":"Voir en {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Actuellement sur la dernière page: {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actuellement sur la page {page}","components.PaginateCourseSearch.lastPageN":"Dernière page: {page}","components.PaginateCourseSearch.nextPageN":"Page suivante: {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Page précédente: {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Recherche de cours","components.Search.errorMessage":"Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés.","components.Search.hideFiltersPane":"Cacher le menu des filtres","components.Search.showFiltersPane":"Montrer le menu des filtres","components.Search.spinnerText":"Chargement des résultats de recherche...","components.Search.textQueryLengthWarning":"La recherche de texte nécessite au moins 3 caractères. { query } n'est pas assez long. Les résultats de recherche ne seront pas affectés par cette requête.","components.SearchFilterGroupModal.closeModal":"Fermer le modal","components.SearchFilterGroupModal.error":"La recherche de filtres pour {filterName} a rencontré une erreur.","components.SearchFilterGroupModal.inputLabel":"Rechercher des filtres à ajouter","components.SearchFilterGroupModal.inputPlaceholder":"Rechercher parmi les { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Charger plus de résultats","components.SearchFilterGroupModal.loadingResults":"Chargement des résultats de recherche...","components.SearchFilterGroupModal.modalTitle":"Ajouter des filtres pour {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Plus de choix","components.SearchFilterGroupModal.queryTooShort":"Tapez 3 caractères ou plus pour commencer à chercher.","components.SearchFilterValueParent.ariaHideChildren":"Cacher les filtres supplémentaires pour {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Montrer plus de filtres pour {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirer {activeFilterCount, number} {activeFilterCount, plural, one {filtre actif} other {filtres actifs}}","components.SearchFiltersPane.title":"Filtrer les cours","components.SearchInput.button":"Chercher","components.SearchSuggestField.searchFieldPlaceholder":"Recherche des cours, des organisations, des catégories","components.UserLogin.logIn":"Connexion","components.UserLogin.logOut":"Déconnexion","components.UserLogin.signup":"Inscription","components.UserLogin.spinnerText":"Vérification de l'état de connexion...","components.useStaticFilters.courses":"Cours"} \ No newline at end of file +{"components.AddressesManagement.actionCreation":"creation","components.AddressesManagement.actionDeletion":"deletion","components.AddressesManagement.actionPromotion":"promotion","components.AddressesManagement.actionUpdate":"update","components.AddressesManagement.addAddress":"Add a new address","components.AddressesManagement.addressInput":"Address","components.AddressesManagement.cancelButton":"Cancel","components.AddressesManagement.cancelTitleButton":"Cancel edition","components.AddressesManagement.cityInput":"City","components.AddressesManagement.closeButton":"Go back","components.AddressesManagement.countryInput":"Country","components.AddressesManagement.deleteButton":"Delete","components.AddressesManagement.deleteButtonLabel":"Delete \"{title}\" address","components.AddressesManagement.deletionConfirmation":"Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after.","components.AddressesManagement.editAddress":"Update address {title}","components.AddressesManagement.editButton":"Edit","components.AddressesManagement.editButtonLabel":"Edit \"{title}\" address","components.AddressesManagement.error":"An error occurred while address {action}. Please retry later.","components.AddressesManagement.first_nameInput":"Recipient's first name","components.AddressesManagement.last_nameInput":"Recipient's last name","components.AddressesManagement.postcodeInput":"Postcode","components.AddressesManagement.promoteButtonLabel":"Define \"{title}\" address as main","components.AddressesManagement.registeredAddresses":"Your addresses","components.AddressesManagement.saveInput":"Save this address","components.AddressesManagement.selectButton":"Use this address","components.AddressesManagement.selectButtonLabel":"Select \"{title}\" address","components.AddressesManagement.titleInput":"Address title","components.AddressesManagement.updateButton":"Update this address","components.CourseGlimpse.categoryLabel":"Category","components.CourseGlimpse.codeIconAlt":"Course code","components.CourseGlimpse.cover":"Couverture","components.CourseGlimpse.organizationIconAlt":"Organization","components.CourseGlimpseFooter.dateIconAlt":"Course date","components.CourseGlimpseList.courseCount":"Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche","components.CourseGlimpseList.offscreenCourseCount":"{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseProductCertificateItem.certificateExplanation":"You will be able to download your certificate once you will pass all course runs.","components.CourseProductCertificateItem.congratulations":"Congratulations, you passed this course!","components.CourseProductCertificateItem.download":"Download","components.CourseProductCertificateItem.generatingCertificate":"Certificate is being generated...","components.CourseProductItem.enrolled":"Enrolled","components.CourseProductsList.end":"End","components.CourseProductsList.loadingInitial":"Loading course information...","components.CourseProductsList.start":"Start","components.CourseProductsLists.enrollOn":"Enrollment from {start} to {end}","components.CourseProductsLists.noCourseRunAvailable":"No session available for this course.","components.CourseRunEnrollment.enroll":"S’inscrire maintenant","components.CourseRunEnrollment.enrolled":"Vous êtes inscrit à cette session","components.CourseRunEnrollment.enrollmentClosed":"L'inscription à ce cours est fermée pour le moment","components.CourseRunEnrollment.enrollmentFailed":"Votre demande d'inscription a échoué.","components.CourseRunEnrollment.goToCourse":"Accéder au cours","components.CourseRunEnrollment.loadingInitial":"Chargement des critères d'inscription...","components.CourseRunEnrollment.loginToEnroll":"Connectez-vous pour vous inscrire","components.CourseRunList.enrollFromTo":"Enrollment from {start} to {end}","components.CourseRunList.noCourseRunAvailable":"No session available for this course.","components.DesktopUserMenu.menuPurpose":"Accéder aux préférences de votre profil","components.EnrollableCourseRunList.ariaSelectCourseRun":"Select course run from {start} to {end}.","components.EnrollableCourseRunList.enroll":"Enroll","components.EnrollableCourseRunList.enrollOn":"Enrollment from {enrollment_start} to {enrollment_end}","components.EnrollableCourseRunList.enrolling":"Enrolling...","components.EnrollableCourseRunList.enrollmentNotYetOpened":"Enrollment will open on {enrollment_start}","components.EnrollableCourseRunList.noCourseRunAvailable":"No session available for this course.","components.EnrollableCourseRunList.selectCourseRun":"Select a course run","components.EnrolledCourseRun.goToCourse":"Go to course","components.EnrolledCourseRun.unroll":"Unroll","components.EnrolledCourseRun.unrolling":"Unrolling...","components.LanguageSelector.currentlySelected":"(actuellement sélectionné)","components.LanguageSelector.languages":"Langues","components.LanguageSelector.selectLanguage":"Sélectionnez une langue:","components.LanguageSelector.switchToLanguage":"Voir en {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Actuellement sur la dernière page: {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actuellement sur la page {page}","components.PaginateCourseSearch.lastPageN":"Dernière page: {page}","components.PaginateCourseSearch.nextPageN":"Page suivante: {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Page précédente: {page}","components.PaymentButton.errorAbort":"Vous avez annulé le paiement.","components.PaymentButton.errorAborting":"Paiement en cours d'annulation...","components.PaymentButton.errorDefault":"Une erreur s'est produite lors du paiement. Veuillez réessayer plus tard.","components.PaymentButton.pay":"Payer {price}","components.PaymentButton.payInOneClick":"Payer en un clic {price}","components.PaymentButton.paymentInProgress":"Paiement en cours","components.PurchasedProductMenu.actionsRelated":"Other actions related to this product","components.PurchasedProductMenu.downloadInvoice":"Download invoice","components.PurchasedProductMenu.generatingInvoice":"Invoice is being generated...","components.RegisteredCreditCard.expirationDate":"Expiration date: {expirationDate}","components.RegisteredCreditCard.inputAriaLabel":"{selected, select, true {Unselect} other {Select}} {title}'s card","components.RootSearchSuggestField.searchFieldPlaceholder":"Recherche de cours","components.SaleTunnel.closeDialog":"Close the dialog","components.SaleTunnel.loginToPurchase":"Login to purchase","components.SaleTunnel.stepPayment":"Payment","components.SaleTunnel.stepResume":"Resume","components.SaleTunnel.stepValidation":"Validation","components.SaleTunnelStepPayment.registeredCardSectionTitle":"Your registered credit card","components.SaleTunnelStepPayment.resumeTile":"You are about to purchase","components.SaleTunnelStepPayment.userBillingAddressAddLabel":"Add an address","components.SaleTunnelStepPayment.userBillingAddressCreateLabel":"Create an address","components.SaleTunnelStepPayment.userBillingAddressFieldset":"Billing address","components.SaleTunnelStepPayment.userBillingAddressNoEntry":"You have not yet a billing address.","components.SaleTunnelStepPayment.userBillingAddressSelectLabel":"Select a billing address","components.SaleTunnelStepPayment.userTile":"Your personal information","components.SaleTunnelStepResume.congratulations":"Congratulations!","components.SaleTunnelStepResume.cta":"Start this course now!","components.SaleTunnelStepResume.successDetailMessage":"You will receive your invoice by email in a few moments.","components.SaleTunnelStepResume.successMessage":"Your order has been successfully created.","components.SaleTunnelStepValidation.availableCourseRuns":"{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available","components.SaleTunnelStepValidation.courseRunDates":"From {start} to {end}","components.SaleTunnelStepValidation.includingVAT":"including VAT","components.SaleTunnelStepValidation.proceedToPayment":"Proceed to payment","components.Search.errorMessage":"Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés.","components.Search.hideFiltersPane":"Cacher le menu des filtres","components.Search.resultsTitle":"Résultats de recherche","components.Search.showFiltersPane":"Montrer le menu des filtres","components.Search.spinnerText":"Chargement des résultats de recherche...","components.Search.textQueryLengthWarning":"La recherche de texte nécessite au moins 3 caractères. { query } n'est pas assez long. Les résultats de recherche ne seront pas affectés par cette requête.","components.SearchFilterGroupModal.closeModal":"Fermer le modal","components.SearchFilterGroupModal.error":"La recherche de filtres pour {filterName} a rencontré une erreur.","components.SearchFilterGroupModal.inputLabel":"Rechercher des filtres à ajouter","components.SearchFilterGroupModal.inputPlaceholder":"Rechercher parmi les { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Charger plus de résultats","components.SearchFilterGroupModal.loadingResults":"Chargement des résultats de recherche...","components.SearchFilterGroupModal.modalTitle":"Ajouter des filtres pour {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Plus de choix","components.SearchFilterGroupModal.queryTooShort":"Tapez 3 caractères ou plus pour commencer à chercher.","components.SearchFilterValueParent.ariaHideChildren":"Cacher les filtres supplémentaires pour {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Montrer plus de filtres pour {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirer {activeFilterCount, number} {activeFilterCount, plural, one {filtre actif} other {filtres actifs}}","components.SearchFiltersPane.title":"Filtrer les cours","components.SearchInput.button":"Chercher","components.SearchSuggestField.searchFieldPlaceholder":"Recherche des cours, des organisations, des catégories","components.UserLogin.logIn":"Connexion","components.UserLogin.logOut":"Déconnexion","components.UserLogin.signup":"Inscription","components.UserLogin.spinnerText":"Vérification de l'état de connexion...","components.useStaticFilters.courses":"Cours"} \ No newline at end of file diff --git a/src/frontend/js/translations/fr-FR.json b/src/frontend/js/translations/fr-FR.json index 37fc44b942..8305016662 100644 --- a/src/frontend/js/translations/fr-FR.json +++ b/src/frontend/js/translations/fr-FR.json @@ -1 +1 @@ -{"components.CourseGlimpse.cover":"Couverture","components.CourseGlimpseList.courseCount":"Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche","components.CourseRunEnrollment.enroll":"S’inscrire maintenant","components.CourseRunEnrollment.enrolled":"Vous êtes inscrit à cette session","components.CourseRunEnrollment.enrollmentClosed":"L'inscription à ce cours est fermée pour le moment","components.CourseRunEnrollment.enrollmentFailed":"Votre demande d'inscription a échoué.","components.CourseRunEnrollment.goToCourse":"Accéder au cours","components.CourseRunEnrollment.loadingInitial":"Chargement des critères d'inscription...","components.CourseRunEnrollment.loginToEnroll":"Connectez-vous pour vous inscrire","components.DesktopUserMenu.menuPurpose":"Accéder aux préférences de votre profil","components.LanguageSelector.currentlySelected":"(actuellement sélectionné)","components.LanguageSelector.languages":"Langues","components.LanguageSelector.selectLanguage":"Sélectionnez une langue:","components.LanguageSelector.switchToLanguage":"Voir en {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Actuellement sur la dernière page: {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actuellement sur la page {page}","components.PaginateCourseSearch.lastPageN":"Dernière page: {page}","components.PaginateCourseSearch.nextPageN":"Page suivante: {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Page précédente: {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Recherche de cours","components.Search.errorMessage":"Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés.","components.Search.hideFiltersPane":"Cacher le menu des filtres","components.Search.showFiltersPane":"Montrer le menu des filtres","components.Search.spinnerText":"Chargement des résultats de recherche...","components.Search.textQueryLengthWarning":"La recherche de texte nécessite au moins 3 caractères. { query } n'est pas assez long pour la recherche. Les résultats de recherche ne seront pas affectés par cette requête.","components.SearchFilterGroupModal.closeModal":"Fermer la fenêtre modale","components.SearchFilterGroupModal.error":"La recherche de filtres pour {filterName} a rencontré une erreur.","components.SearchFilterGroupModal.inputLabel":"Rechercher des filtres à ajouter","components.SearchFilterGroupModal.inputPlaceholder":"Rechercher parmi les { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Charger plus de résultats","components.SearchFilterGroupModal.loadingResults":"Chargement des résultats de recherche...","components.SearchFilterGroupModal.modalTitle":"Ajouter des filtres pour {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Plus de choix","components.SearchFilterGroupModal.queryTooShort":"Tapez 3 caractères ou plus pour commencer à chercher.","components.SearchFilterValueParent.ariaHideChildren":"Cacher les filtres supplémentaires pour {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Montrer plus de filtres pour {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirer {activeFilterCount, number} {activeFilterCount, plural, one {filtre actif} other {filtres actifs}}","components.SearchFiltersPane.title":"Filtrer les cours","components.SearchInput.button":"Recherche","components.SearchSuggestField.searchFieldPlaceholder":"Recherche des cours, des organisations, des catégories","components.UserLogin.logIn":"Connexion","components.UserLogin.logOut":"Déconnexion","components.UserLogin.signup":"Inscription","components.UserLogin.spinnerText":"Vérification de l'état de connexion...","components.useStaticFilters.courses":"Cours"} \ No newline at end of file +{"components.AddressesManagement.actionCreation":"création","components.AddressesManagement.actionDeletion":"suppression","components.AddressesManagement.actionPromotion":"promotion","components.AddressesManagement.actionUpdate":"mise à jour","components.AddressesManagement.addAddress":"Ajouter une nouvelle adresse","components.AddressesManagement.addressInput":"Adresse","components.AddressesManagement.cancelButton":"Annuler","components.AddressesManagement.cancelTitleButton":"Annuler la modification","components.AddressesManagement.cityInput":"Ville","components.AddressesManagement.closeButton":"Retour","components.AddressesManagement.countryInput":"Pays","components.AddressesManagement.deleteButton":"Supprimer","components.AddressesManagement.deleteButtonLabel":"Supprimer l'adresse \"{title}\"","components.AddressesManagement.deletionConfirmation":"Êtes-vous sûr de vouloir supprimer l'adresse \"{title}\" ? ⚠️ Vous ne pourrez pas annuler ce changement après.","components.AddressesManagement.editAddress":"Mettre à jour l'adresse {title}","components.AddressesManagement.editButton":"Modifier","components.AddressesManagement.editButtonLabel":"Modifier l'adresse \"{title}\"","components.AddressesManagement.error":"Une erreur s'est produire lors de la {action} de l'adresse. Veuillez réessayer plus tard.","components.AddressesManagement.first_nameInput":"Prénom du destinataire","components.AddressesManagement.last_nameInput":"Nom du destinataire","components.AddressesManagement.postcodeInput":"Code postal","components.AddressesManagement.promoteButtonLabel":"Utiliser l'adresse \"{title}\" comme adresse principale","components.AddressesManagement.registeredAddresses":"Vos adresses","components.AddressesManagement.saveInput":"Sauvegarder cette adresse","components.AddressesManagement.selectButton":"Utiliser cette adresse","components.AddressesManagement.selectButtonLabel":"Sélectionner l'adresse \"{title}\"","components.AddressesManagement.titleInput":"Titre de l'adresse","components.AddressesManagement.updateButton":"Mettre à jour cette adresse","components.CourseGlimpse.categoryLabel":"Catégorie","components.CourseGlimpse.codeIconAlt":"Code du cours","components.CourseGlimpse.cover":"Couverture","components.CourseGlimpse.organizationIconAlt":"Établissement","components.CourseGlimpseFooter.dateIconAlt":"Date du cours","components.CourseGlimpseList.courseCount":"Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche","components.CourseGlimpseList.offscreenCourseCount":"{courseCount, number} {courseCount, plural, one {cours correspond} other {cours correspondent}} à votre recherche","components.CourseProductCertificateItem.certificateExplanation":"Vous pourrez télécharger votre certificat une fois que vous aurez réussi toutes les sessions.","components.CourseProductCertificateItem.congratulations":"Félicitations, vous avez terminé ce cours !","components.CourseProductCertificateItem.download":"Télécharger","components.CourseProductCertificateItem.generatingCertificate":"Certificat en cours de génération...","components.CourseProductItem.enrolled":"Inscrit","components.CourseProductsList.end":"Fin","components.CourseProductsList.loadingInitial":"Chargement des informations du cours...","components.CourseProductsList.start":"Début","components.CourseProductsLists.enrollOn":"Inscription du {start} au {end}","components.CourseProductsLists.noCourseRunAvailable":"Aucune session disponible pour ce cours.","components.CourseRunEnrollment.enroll":"S’inscrire maintenant","components.CourseRunEnrollment.enrolled":"Vous êtes inscrit à cette session","components.CourseRunEnrollment.enrollmentClosed":"L'inscription à ce cours est fermée pour le moment","components.CourseRunEnrollment.enrollmentFailed":"Votre demande d'inscription a échoué.","components.CourseRunEnrollment.goToCourse":"Accéder au cours","components.CourseRunEnrollment.loadingInitial":"Chargement des critères d'inscription...","components.CourseRunEnrollment.loginToEnroll":"Connectez-vous pour vous inscrire","components.CourseRunList.enrollFromTo":"Inscription du {start} au {end}","components.CourseRunList.noCourseRunAvailable":"Aucune session disponible pour ce cours.","components.DesktopUserMenu.menuPurpose":"Accéder aux préférences de votre profil","components.EnrollableCourseRunList.ariaSelectCourseRun":"Sélectionnez le cours se déroulant du {start} au {end}.","components.EnrollableCourseRunList.enroll":"S'inscrire","components.EnrollableCourseRunList.enrollOn":"Inscription du {enrollment_start} au {enrollment_end}","components.EnrollableCourseRunList.enrolling":"Inscription en cours...","components.EnrollableCourseRunList.enrollmentNotYetOpened":"Les inscriptions ouvriront le {enrollment_start}","components.EnrollableCourseRunList.noCourseRunAvailable":"Aucune session disponible pour ce cours.","components.EnrollableCourseRunList.selectCourseRun":"Sélectionnez une session","components.EnrolledCourseRun.goToCourse":"Accéder au cours","components.EnrolledCourseRun.unroll":"Se désinscrire","components.EnrolledCourseRun.unrolling":"Unrolling...","components.LanguageSelector.currentlySelected":"(actuellement sélectionné)","components.LanguageSelector.languages":"Langues","components.LanguageSelector.selectLanguage":"Sélectionnez une langue:","components.LanguageSelector.switchToLanguage":"Voir en {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Actuellement sur la dernière page: {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actuellement sur la page {page}","components.PaginateCourseSearch.lastPageN":"Dernière page: {page}","components.PaginateCourseSearch.nextPageN":"Page suivante: {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Page précédente: {page}","components.PaymentButton.errorAbort":"Vous avez annulé le paiement.","components.PaymentButton.errorAborting":"Paiement en cours d'annulation...","components.PaymentButton.errorDefault":"Une erreur s'est produite lors du paiement. Veuillez réessayer plus tard.","components.PaymentButton.pay":"Payer {price}","components.PaymentButton.payInOneClick":"Payer en un clic {price}","components.PaymentButton.paymentInProgress":"Paiement en cours","components.PurchasedProductMenu.actionsRelated":"Autres actions liées à ce produit","components.PurchasedProductMenu.downloadInvoice":"Télécharger la facture","components.PurchasedProductMenu.generatingInvoice":"La facture est en cours de génération...","components.RegisteredCreditCard.expirationDate":"Date d'expiration : {expirationDate}","components.RegisteredCreditCard.inputAriaLabel":"{selected, select, true {Déselectionner} other {Sélectionner}} la carte {title}","components.RootSearchSuggestField.searchFieldPlaceholder":"Recherche de cours","components.SaleTunnel.closeDialog":"Fermer la fenêtre de dialogue","components.SaleTunnel.loginToPurchase":"Connectez-vous pour acheter","components.SaleTunnel.stepPayment":"Paiement","components.SaleTunnel.stepResume":"Continuer","components.SaleTunnel.stepValidation":"Validation","components.SaleTunnelStepPayment.registeredCardSectionTitle":"Vos cartes enregistrées","components.SaleTunnelStepPayment.resumeTile":"Vous êtes sur le point d'acheter","components.SaleTunnelStepPayment.userBillingAddressAddLabel":"Ajouter une adresse","components.SaleTunnelStepPayment.userBillingAddressCreateLabel":"Créer une adresse","components.SaleTunnelStepPayment.userBillingAddressFieldset":"Adresse de facturation","components.SaleTunnelStepPayment.userBillingAddressNoEntry":"You have not yet a billing address.","components.SaleTunnelStepPayment.userBillingAddressSelectLabel":"Sélectionner une adresse de facturation","components.SaleTunnelStepPayment.userTile":"Vos informations personnelles","components.SaleTunnelStepResume.congratulations":"Félicitations !","components.SaleTunnelStepResume.cta":"Commencer ce cours dès maintenant !","components.SaleTunnelStepResume.successDetailMessage":"Vous allez recevoir votre facture par mail dans quelques instants.","components.SaleTunnelStepResume.successMessage":"Votre commande a été créée avec succès.","components.SaleTunnelStepValidation.availableCourseRuns":"{ count, plural, =0 {Aucune session disponible} one {Une session disponible} other {# sessions disponibles}}","components.SaleTunnelStepValidation.courseRunDates":"Du {start} au {end}","components.SaleTunnelStepValidation.includingVAT":"TTC","components.SaleTunnelStepValidation.proceedToPayment":"Procéder au paiement","components.Search.errorMessage":"Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés.","components.Search.hideFiltersPane":"Cacher le menu des filtres","components.Search.resultsTitle":"Résultats de recherche","components.Search.showFiltersPane":"Montrer le menu des filtres","components.Search.spinnerText":"Chargement des résultats de recherche...","components.Search.textQueryLengthWarning":"La recherche de texte nécessite au moins 3 caractères. { query } n'est pas assez long pour la recherche. Les résultats de recherche ne seront pas affectés par cette requête.","components.SearchFilterGroupModal.closeModal":"Fermer la fenêtre modale","components.SearchFilterGroupModal.error":"La recherche de filtres pour {filterName} a rencontré une erreur.","components.SearchFilterGroupModal.inputLabel":"Rechercher des filtres à ajouter","components.SearchFilterGroupModal.inputPlaceholder":"Rechercher parmi les { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Charger plus de résultats","components.SearchFilterGroupModal.loadingResults":"Chargement des résultats de recherche...","components.SearchFilterGroupModal.modalTitle":"Ajouter des filtres pour {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Plus de choix","components.SearchFilterGroupModal.queryTooShort":"Tapez 3 caractères ou plus pour commencer à chercher.","components.SearchFilterValueParent.ariaHideChildren":"Cacher les filtres supplémentaires pour {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Montrer plus de filtres pour {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirer {activeFilterCount, number} {activeFilterCount, plural, one {filtre actif} other {filtres actifs}}","components.SearchFiltersPane.title":"Filtrer les cours","components.SearchInput.button":"Recherche","components.SearchSuggestField.searchFieldPlaceholder":"Recherche des cours, des organisations, des catégories","components.UserLogin.logIn":"Connexion","components.UserLogin.logOut":"Déconnexion","components.UserLogin.signup":"Inscription","components.UserLogin.spinnerText":"Vérification de l'état de connexion...","components.useStaticFilters.courses":"Cours"} \ No newline at end of file diff --git a/src/frontend/js/translations/pt-PT.json b/src/frontend/js/translations/pt-PT.json index 546ed5db45..a5820fa5ae 100644 --- a/src/frontend/js/translations/pt-PT.json +++ b/src/frontend/js/translations/pt-PT.json @@ -1 +1 @@ -{"components.CourseGlimpse.cover":"Capa","components.CourseGlimpseList.courseCount":"A mostrar de {start, number} a {end, number} de {courseCount, number} {courseCount, plural, one {curso} other {cursos}} de acordo com a sua pesquisa","components.CourseRunEnrollment.enroll":"Inscreva-se já","components.CourseRunEnrollment.enrolled":"Está inscrito nesta edição do curso","components.CourseRunEnrollment.enrollmentClosed":"A inscrição nesta edição do curso está fechada de momento","components.CourseRunEnrollment.enrollmentFailed":"Ocorreu um erro ao processar a inscrição.","components.CourseRunEnrollment.goToCourse":"Ir para o curso","components.CourseRunEnrollment.loadingInitial":"A carregar a informação da inscrição...","components.CourseRunEnrollment.loginToEnroll":"Faça login para se inscrever","components.DesktopUserMenu.menuPurpose":"Acesso às suas configurações de perfil","components.LanguageSelector.currentlySelected":"(selecionado)","components.LanguageSelector.languages":"Idiomas","components.LanguageSelector.selectLanguage":"Selecione um idioma:","components.LanguageSelector.switchToLanguage":"Mudar idioma para {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"A ler a última página {page}","components.PaginateCourseSearch.currentlyReadingPageN":"A ler a página {page}","components.PaginateCourseSearch.lastPageN":"Última página {page}","components.PaginateCourseSearch.nextPageN":"Página seguinte {page}","components.PaginateCourseSearch.pageN":"Página {page}","components.PaginateCourseSearch.pagination":"Paginação","components.PaginateCourseSearch.previousPageN":"Página anterior {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Pesquisar cursos","components.Search.errorMessage":"Ocorreu um erro! Não foi possível carregar os cursos.","components.Search.hideFiltersPane":"Ocultar painel de filtros","components.Search.showFiltersPane":"Mostrar painel de filtros","components.Search.spinnerText":"A carregar os resultados da pesquisa...","components.Search.textQueryLengthWarning":"A pesquisa de texto requer pelo menos 3 caracteres. { query } não é longo o suficiente para pesquisar. Os resultados da pesquisa não serão alterados por esta consulta.","components.SearchFilterGroupModal.closeModal":"Fechar modal","components.SearchFilterGroupModal.error":"Ocorreu um erro ao pesquisar por {filterName}.","components.SearchFilterGroupModal.inputLabel":"Pesquisar por filtros para adicionar","components.SearchFilterGroupModal.inputPlaceholder":"Pesquisar em { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Carregar mais resultados","components.SearchFilterGroupModal.loadingResults":"A carregar os resultados da pesquisa...","components.SearchFilterGroupModal.modalTitle":"Adicionar filtros para {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Mais opções","components.SearchFilterGroupModal.queryTooShort":"Digite pelo menos 3 caracteres para iniciar a pesquisa.","components.SearchFilterValueParent.ariaHideChildren":"Ocultar filtros adicionais para {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Mostrar mais filtros para {filterValueName}","components.SearchFiltersPane.clearFilters":"Limpar {activeFilterCount, number} {activeFilterCount, plural, one {filtro} other {filtros}} {activeFilterCount, plural, one {ativo} other {ativos}}","components.SearchFiltersPane.title":"Filtrar cursos","components.SearchInput.button":"Pesquisar","components.SearchSuggestField.searchFieldPlaceholder":"Pesquisar cursos, organizações, categorias","components.UserLogin.logIn":"Entrar","components.UserLogin.logOut":"Sair","components.UserLogin.signup":"Registar","components.UserLogin.spinnerText":"A carregar estado do login...","components.useStaticFilters.courses":"Cursos"} \ No newline at end of file +{"components.AddressesManagement.actionCreation":"criação","components.AddressesManagement.actionDeletion":"exclusão","components.AddressesManagement.actionPromotion":"promoção","components.AddressesManagement.actionUpdate":"atualização","components.AddressesManagement.addAddress":"Adicionar um novo endereço","components.AddressesManagement.addressInput":"Endereço","components.AddressesManagement.cancelButton":"Cancelar","components.AddressesManagement.cancelTitleButton":"Cancelar edição","components.AddressesManagement.cityInput":"Cidade","components.AddressesManagement.closeButton":"Voltar","components.AddressesManagement.countryInput":"País","components.AddressesManagement.deleteButton":"Eliminar","components.AddressesManagement.deleteButtonLabel":"Eliminar endereço de \"{title}\"","components.AddressesManagement.deletionConfirmation":"Tem certeza que deseja eliminar o endereço \"{title}? ⚠️ Não é possível desfazer essa alteração.","components.AddressesManagement.editAddress":"Atualizar endereço {title}","components.AddressesManagement.editButton":"Editar","components.AddressesManagement.editButtonLabel":"Editar endereço de \"{title}\"","components.AddressesManagement.error":"Ocorreu um erro durante o processo de {action} de endereço. Por favor, tente novamente mais tarde.","components.AddressesManagement.first_nameInput":"Primeiro nome do destinatário","components.AddressesManagement.last_nameInput":"Apelido do destinatário","components.AddressesManagement.postcodeInput":"Código Postal","components.AddressesManagement.promoteButtonLabel":"Defina o endereço \"{title}\" como principal","components.AddressesManagement.registeredAddresses":"Os seus endereços","components.AddressesManagement.saveInput":"Guardar este endereço","components.AddressesManagement.selectButton":"Usar esta endereço","components.AddressesManagement.selectButtonLabel":"Selecionar o endereço \"{title}\"","components.AddressesManagement.titleInput":"Título do Endereço","components.AddressesManagement.updateButton":"Atualizar este endereço","components.CourseGlimpse.categoryLabel":"Categoria","components.CourseGlimpse.codeIconAlt":"Código do curso","components.CourseGlimpse.cover":"Capa","components.CourseGlimpse.organizationIconAlt":"Organização","components.CourseGlimpseFooter.dateIconAlt":"Data do curso","components.CourseGlimpseList.courseCount":"A mostrar de {start, number} a {end, number} de {courseCount, number} {courseCount, plural, one {curso} other {cursos}} de acordo com a sua pesquisa","components.CourseGlimpseList.offscreenCourseCount":"{courseCount, number} {courseCount, plural, one {curso} other {cursos}} {courseCount, plural, one {corresponde} other {correspondem}} à sua pesquisa","components.CourseProductCertificateItem.certificateExplanation":"Poderá descarregar o seu certificado assim que completar todas as edições de curso.","components.CourseProductCertificateItem.congratulations":"Parabéns, concluiu o curso com sucesso!","components.CourseProductCertificateItem.download":"Descarregar","components.CourseProductCertificateItem.generatingCertificate":"O certificado está a ser gerado...","components.CourseProductItem.enrolled":"Inscrito","components.CourseProductsList.end":"Fim","components.CourseProductsList.loadingInitial":"A carregar informação do curso...","components.CourseProductsList.start":"Início","components.CourseProductsLists.enrollOn":"Inscrições de {start} a {end}","components.CourseProductsLists.noCourseRunAvailable":"Nenhuma sessão disponível para este curso.","components.CourseRunEnrollment.enroll":"Inscreva-se já","components.CourseRunEnrollment.enrolled":"Está inscrito nesta edição do curso","components.CourseRunEnrollment.enrollmentClosed":"A inscrição nesta edição do curso está fechada de momento","components.CourseRunEnrollment.enrollmentFailed":"Ocorreu um erro ao processar a inscrição.","components.CourseRunEnrollment.goToCourse":"Ir para o curso","components.CourseRunEnrollment.loadingInitial":"A carregar a informação da inscrição...","components.CourseRunEnrollment.loginToEnroll":"Faça login para se inscrever","components.CourseRunList.enrollFromTo":"Inscrição de {start} a {end}","components.CourseRunList.noCourseRunAvailable":"Nenhuma sessão disponível para este curso.","components.DesktopUserMenu.menuPurpose":"Acesso às suas configurações de perfil","components.EnrollableCourseRunList.ariaSelectCourseRun":"Escolher edição do curso de {start} a {end}.","components.EnrollableCourseRunList.enroll":"Inscrever","components.EnrollableCourseRunList.enrollOn":"Inscrições de {enrollment_start} a {enrollment_end}","components.EnrollableCourseRunList.enrolling":"Inscrevendo...","components.EnrollableCourseRunList.enrollmentNotYetOpened":"Inscrições abertas a {enrollment_start}","components.EnrollableCourseRunList.noCourseRunAvailable":"Nenhuma sessão disponível para este curso.","components.EnrollableCourseRunList.selectCourseRun":"Selecione uma edição do curso","components.EnrolledCourseRun.goToCourse":"Ir para o curso","components.EnrolledCourseRun.unroll":"Desinscrever","components.EnrolledCourseRun.unrolling":"Desinscrevendo...","components.LanguageSelector.currentlySelected":"(selecionado)","components.LanguageSelector.languages":"Idiomas","components.LanguageSelector.selectLanguage":"Selecione um idioma:","components.LanguageSelector.switchToLanguage":"Mudar idioma para {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"A ler a última página {page}","components.PaginateCourseSearch.currentlyReadingPageN":"A ler a página {page}","components.PaginateCourseSearch.lastPageN":"Última página {page}","components.PaginateCourseSearch.nextPageN":"Página seguinte {page}","components.PaginateCourseSearch.pageN":"Página {page}","components.PaginateCourseSearch.pagination":"Paginação","components.PaginateCourseSearch.previousPageN":"Página anterior {page}","components.PaymentButton.errorAbort":"O pagamento foi cancelado.","components.PaymentButton.errorAborting":"Cancelando o pagamento...","components.PaymentButton.errorDefault":"Ocorreu um erro durante o pagamento. Por favor, tente novamente mais tarde.","components.PaymentButton.pay":"Pagar {price}","components.PaymentButton.payInOneClick":"Pague com um clique {price}","components.PaymentButton.paymentInProgress":"A processar pagamento","components.PurchasedProductMenu.actionsRelated":"Outras ações relacionadas com este produto","components.PurchasedProductMenu.downloadInvoice":"Descarregar fatura","components.PurchasedProductMenu.generatingInvoice":"A fatura está a ser gerada...","components.RegisteredCreditCard.expirationDate":"Expira a {expirationDate}","components.RegisteredCreditCard.inputAriaLabel":"{selected, select, true {Não selecionado} other {Selecionado}} o cartão {title}","components.RootSearchSuggestField.searchFieldPlaceholder":"Pesquisar cursos","components.SaleTunnel.closeDialog":"Fechar esta caixa de diálogo","components.SaleTunnel.loginToPurchase":"Faça login para comprar","components.SaleTunnel.stepPayment":"Pagamento","components.SaleTunnel.stepResume":"Continuar","components.SaleTunnel.stepValidation":"Validação","components.SaleTunnelStepPayment.registeredCardSectionTitle":"O seu cartão de crédito foi registado","components.SaleTunnelStepPayment.resumeTile":"Está prestes a concluir a compra","components.SaleTunnelStepPayment.userBillingAddressAddLabel":"Adicionar um endereço","components.SaleTunnelStepPayment.userBillingAddressCreateLabel":"Criar novo endereço","components.SaleTunnelStepPayment.userBillingAddressFieldset":"Endereço de faturação","components.SaleTunnelStepPayment.userBillingAddressNoEntry":"Você ainda não tem um endereço de faturação.","components.SaleTunnelStepPayment.userBillingAddressSelectLabel":"Selecione o endereço de faturação","components.SaleTunnelStepPayment.userTile":"A sua informação pessoal","components.SaleTunnelStepResume.congratulations":"Parabéns!","components.SaleTunnelStepResume.cta":"Iniciar este curso agora!","components.SaleTunnelStepResume.successDetailMessage":"Dentro de instantes receberá a sua fatura por e-mail.","components.SaleTunnelStepResume.successMessage":"O seu pedido foi criado com sucesso.","components.SaleTunnelStepValidation.availableCourseRuns":"{count, plural, =0 {Sem edições de curso} one {Uma edição do curso} other {# edições do curso}} {count, plural, =0 {disponíveis} one {disponível} other {disponíveis}}","components.SaleTunnelStepValidation.courseRunDates":"De {start} a {end}","components.SaleTunnelStepValidation.includingVAT":"IVA incluído","components.SaleTunnelStepValidation.proceedToPayment":"Prosseguir para o pagamento","components.Search.errorMessage":"Ocorreu um erro! Não foi possível carregar os cursos.","components.Search.hideFiltersPane":"Ocultar painel de filtros","components.Search.resultsTitle":"Resultados da pesquisa","components.Search.showFiltersPane":"Mostrar painel de filtros","components.Search.spinnerText":"A carregar os resultados da pesquisa...","components.Search.textQueryLengthWarning":"A pesquisa de texto requer pelo menos 3 caracteres. { query } não é longo o suficiente para pesquisar. Os resultados da pesquisa não serão alterados por esta consulta.","components.SearchFilterGroupModal.closeModal":"Fechar modal","components.SearchFilterGroupModal.error":"Ocorreu um erro ao pesquisar por {filterName}.","components.SearchFilterGroupModal.inputLabel":"Pesquisar por filtros para adicionar","components.SearchFilterGroupModal.inputPlaceholder":"Pesquisar em { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Carregar mais resultados","components.SearchFilterGroupModal.loadingResults":"A carregar os resultados da pesquisa...","components.SearchFilterGroupModal.modalTitle":"Adicionar filtros para {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Mais opções","components.SearchFilterGroupModal.queryTooShort":"Digite pelo menos 3 caracteres para iniciar a pesquisa.","components.SearchFilterValueParent.ariaHideChildren":"Ocultar filtros adicionais para {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Mostrar mais filtros para {filterValueName}","components.SearchFiltersPane.clearFilters":"Limpar {activeFilterCount, number} {activeFilterCount, plural, one {filtro} other {filtros}} {activeFilterCount, plural, one {ativo} other {ativos}}","components.SearchFiltersPane.title":"Filtrar cursos","components.SearchInput.button":"Pesquisar","components.SearchSuggestField.searchFieldPlaceholder":"Pesquisar cursos, organizações, categorias","components.UserLogin.logIn":"Entrar","components.UserLogin.logOut":"Sair","components.UserLogin.signup":"Registar","components.UserLogin.spinnerText":"A carregar estado do login...","components.useStaticFilters.courses":"Cursos"} \ No newline at end of file diff --git a/src/frontend/js/translations/ru-RU.json b/src/frontend/js/translations/ru-RU.json index 3940c5e93b..8c7ef23401 100644 --- a/src/frontend/js/translations/ru-RU.json +++ b/src/frontend/js/translations/ru-RU.json @@ -1 +1 @@ -{"components.CourseGlimpse.cover":"Обложка","components.CourseGlimpseList.courseCount":"Показано от {start, number} до {end, number} на {courseCount, number} {courseCount, plural, one {курсе} few {курсах} many {курсах} other {курсах}} в соответствии с вашим поиском","components.CourseRunEnrollment.enroll":"Записаться сейчас","components.CourseRunEnrollment.enrolled":"Вы зачислены на этот курс","components.CourseRunEnrollment.enrollmentClosed":"Регистрация на курс в данный момент закрыта","components.CourseRunEnrollment.enrollmentFailed":"Не удалось выполнить запрос на зачисление.","components.CourseRunEnrollment.goToCourse":"Перейти к курсу","components.CourseRunEnrollment.loadingInitial":"Загрузка информации о зачислении...","components.CourseRunEnrollment.loginToEnroll":"Войти для записи","components.DesktopUserMenu.menuPurpose":"Доступ к настройкам вашего профиля","components.LanguageSelector.currentlySelected":"(сейчас выбрано)","components.LanguageSelector.languages":"Языки","components.LanguageSelector.selectLanguage":"Выберите язык:","components.LanguageSelector.switchToLanguage":"Переключиться на {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"В настоящее время чтение последней страницы {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Сейчас чтение страницы {page}","components.PaginateCourseSearch.lastPageN":"Последняя страница {page}","components.PaginateCourseSearch.nextPageN":"Следующая страница {page}","components.PaginateCourseSearch.pageN":"Страница {page}","components.PaginateCourseSearch.pagination":"Постраничная навигация","components.PaginateCourseSearch.previousPageN":"Предыдущая страница {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Поиск курсов","components.Search.errorMessage":"Что-то не так! Курсы не могут быть загружены.","components.Search.hideFiltersPane":"Скрыть панель фильтров","components.Search.showFiltersPane":"Показать панель фильтров","components.Search.spinnerText":"Загрузка результатов поиска...","components.Search.textQueryLengthWarning":"Текстовый поиск требует не менее 3 символов. { query } не достаточно длинный, чтобы искать. Этот запрос не повлияет на результаты поиска.","components.SearchFilterGroupModal.closeModal":"Закрыть модальное окно","components.SearchFilterGroupModal.error":"Произошла ошибка при поиске {filterName}.","components.SearchFilterGroupModal.inputLabel":"Поиск фильтров для добавления","components.SearchFilterGroupModal.inputPlaceholder":"Искать в { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Загрузить больше результатов","components.SearchFilterGroupModal.loadingResults":"Загрузка результатов поиска...","components.SearchFilterGroupModal.modalTitle":"Добавить фильтры для {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Ещё опции","components.SearchFilterGroupModal.queryTooShort":"Введите минимум 3 символа, чтобы начать поиск.","components.SearchFilterValueParent.ariaHideChildren":"Скрыть дополнительные фильтры для {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Показать больше фильтров для {filterValueName}","components.SearchFiltersPane.clearFilters":"Очистите {activeFilterCount, number} {activeFilterCount, plural, one {активный фильтр} few {активных фильтра} many {активных фильтров} other {активных фильтров}}","components.SearchFiltersPane.title":"Фильтровать курсы","components.SearchInput.button":"Поиск","components.SearchSuggestField.searchFieldPlaceholder":"Поиск курсов, организаций, категорий","components.UserLogin.logIn":"Вход","components.UserLogin.logOut":"Выход","components.UserLogin.signup":"Зарегистрироваться","components.UserLogin.spinnerText":"Загрузка статуса входа...","components.useStaticFilters.courses":"Курсы"} \ No newline at end of file +{"components.AddressesManagement.actionCreation":"creation","components.AddressesManagement.actionDeletion":"deletion","components.AddressesManagement.actionPromotion":"promotion","components.AddressesManagement.actionUpdate":"update","components.AddressesManagement.addAddress":"Add a new address","components.AddressesManagement.addressInput":"Address","components.AddressesManagement.cancelButton":"Cancel","components.AddressesManagement.cancelTitleButton":"Cancel edition","components.AddressesManagement.cityInput":"City","components.AddressesManagement.closeButton":"Go back","components.AddressesManagement.countryInput":"Country","components.AddressesManagement.deleteButton":"Delete","components.AddressesManagement.deleteButtonLabel":"Delete \"{title}\" address","components.AddressesManagement.deletionConfirmation":"Are you sure you want to delete the \"{title}\" address ? ⚠️ You cannot undo this change after.","components.AddressesManagement.editAddress":"Update address {title}","components.AddressesManagement.editButton":"Edit","components.AddressesManagement.editButtonLabel":"Edit \"{title}\" address","components.AddressesManagement.error":"An error occurred while address {action}. Please retry later.","components.AddressesManagement.first_nameInput":"Recipient's first name","components.AddressesManagement.last_nameInput":"Recipient's last name","components.AddressesManagement.postcodeInput":"Postcode","components.AddressesManagement.promoteButtonLabel":"Define \"{title}\" address as main","components.AddressesManagement.registeredAddresses":"Your addresses","components.AddressesManagement.saveInput":"Save this address","components.AddressesManagement.selectButton":"Use this address","components.AddressesManagement.selectButtonLabel":"Select \"{title}\" address","components.AddressesManagement.titleInput":"Address title","components.AddressesManagement.updateButton":"Update this address","components.CourseGlimpse.categoryLabel":"Category","components.CourseGlimpse.codeIconAlt":"Course code","components.CourseGlimpse.cover":"Обложка","components.CourseGlimpse.organizationIconAlt":"Organization","components.CourseGlimpseFooter.dateIconAlt":"Course date","components.CourseGlimpseList.courseCount":"Показано от {start, number} до {end, number} на {courseCount, number} {courseCount, plural, one {курсе} few {курсах} many {курсах} other {курсах}} в соответствии с вашим поиском","components.CourseGlimpseList.offscreenCourseCount":"{courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseProductCertificateItem.certificateExplanation":"You will be able to download your certificate once you will pass all course runs.","components.CourseProductCertificateItem.congratulations":"Congratulations, you passed this course!","components.CourseProductCertificateItem.download":"Download","components.CourseProductCertificateItem.generatingCertificate":"Certificate is being generated...","components.CourseProductItem.enrolled":"Enrolled","components.CourseProductsList.end":"End","components.CourseProductsList.loadingInitial":"Loading course information...","components.CourseProductsList.start":"Start","components.CourseProductsLists.enrollOn":"Enrollment from {start} to {end}","components.CourseProductsLists.noCourseRunAvailable":"No session available for this course.","components.CourseRunEnrollment.enroll":"Записаться сейчас","components.CourseRunEnrollment.enrolled":"Вы зачислены на этот курс","components.CourseRunEnrollment.enrollmentClosed":"Регистрация на курс в данный момент закрыта","components.CourseRunEnrollment.enrollmentFailed":"Не удалось выполнить запрос на зачисление.","components.CourseRunEnrollment.goToCourse":"Перейти к курсу","components.CourseRunEnrollment.loadingInitial":"Загрузка информации о зачислении...","components.CourseRunEnrollment.loginToEnroll":"Войти для записи","components.CourseRunList.enrollFromTo":"Enrollment from {start} to {end}","components.CourseRunList.noCourseRunAvailable":"No session available for this course.","components.DesktopUserMenu.menuPurpose":"Доступ к настройкам вашего профиля","components.EnrollableCourseRunList.ariaSelectCourseRun":"Select course run from {start} to {end}.","components.EnrollableCourseRunList.enroll":"Enroll","components.EnrollableCourseRunList.enrollOn":"Enrollment from {enrollment_start} to {enrollment_end}","components.EnrollableCourseRunList.enrolling":"Enrolling...","components.EnrollableCourseRunList.enrollmentNotYetOpened":"Enrollment will open on {enrollment_start}","components.EnrollableCourseRunList.noCourseRunAvailable":"No session available for this course.","components.EnrollableCourseRunList.selectCourseRun":"Select a course run","components.EnrolledCourseRun.goToCourse":"Go to course","components.EnrolledCourseRun.unroll":"Unroll","components.EnrolledCourseRun.unrolling":"Unrolling...","components.LanguageSelector.currentlySelected":"(сейчас выбрано)","components.LanguageSelector.languages":"Языки","components.LanguageSelector.selectLanguage":"Выберите язык:","components.LanguageSelector.switchToLanguage":"Переключиться на {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"В настоящее время чтение последней страницы {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Сейчас чтение страницы {page}","components.PaginateCourseSearch.lastPageN":"Последняя страница {page}","components.PaginateCourseSearch.nextPageN":"Следующая страница {page}","components.PaginateCourseSearch.pageN":"Страница {page}","components.PaginateCourseSearch.pagination":"Постраничная навигация","components.PaginateCourseSearch.previousPageN":"Предыдущая страница {page}","components.PaymentButton.errorAbort":"Вы прервали оплату.","components.PaymentButton.errorAborting":"Прерывание оплаты...","components.PaymentButton.errorDefault":"Произошла ошибка во время оплаты. Пожалуйста, повторите попытку позже.","components.PaymentButton.pay":"Оплатить {price}","components.PaymentButton.payInOneClick":"Оплатить в один клик {price}","components.PaymentButton.paymentInProgress":"Оплата в процессе","components.PurchasedProductMenu.actionsRelated":"Other actions related to this product","components.PurchasedProductMenu.downloadInvoice":"Download invoice","components.PurchasedProductMenu.generatingInvoice":"Invoice is being generated...","components.RegisteredCreditCard.expirationDate":"Expiration date: {expirationDate}","components.RegisteredCreditCard.inputAriaLabel":"{selected, select, true {Unselect} other {Select}} {title}'s card","components.RootSearchSuggestField.searchFieldPlaceholder":"Поиск курсов","components.SaleTunnel.closeDialog":"Close the dialog","components.SaleTunnel.loginToPurchase":"Login to purchase","components.SaleTunnel.stepPayment":"Payment","components.SaleTunnel.stepResume":"Resume","components.SaleTunnel.stepValidation":"Validation","components.SaleTunnelStepPayment.registeredCardSectionTitle":"Your registered credit card","components.SaleTunnelStepPayment.resumeTile":"You are about to purchase","components.SaleTunnelStepPayment.userBillingAddressAddLabel":"Add an address","components.SaleTunnelStepPayment.userBillingAddressCreateLabel":"Create an address","components.SaleTunnelStepPayment.userBillingAddressFieldset":"Billing address","components.SaleTunnelStepPayment.userBillingAddressNoEntry":"You have not yet a billing address.","components.SaleTunnelStepPayment.userBillingAddressSelectLabel":"Select a billing address","components.SaleTunnelStepPayment.userTile":"Your personal information","components.SaleTunnelStepResume.congratulations":"Congratulations!","components.SaleTunnelStepResume.cta":"Start this course now!","components.SaleTunnelStepResume.successDetailMessage":"You will receive your invoice by email in a few moments.","components.SaleTunnelStepResume.successMessage":"Your order has been successfully created.","components.SaleTunnelStepValidation.availableCourseRuns":"{ count, plural, =0 {No course runs} one {One course run} other {# course runs} } available","components.SaleTunnelStepValidation.courseRunDates":"From {start} to {end}","components.SaleTunnelStepValidation.includingVAT":"including VAT","components.SaleTunnelStepValidation.proceedToPayment":"Proceed to payment","components.Search.errorMessage":"Что-то не так! Курсы не могут быть загружены.","components.Search.hideFiltersPane":"Скрыть панель фильтров","components.Search.resultsTitle":"Результаты поиска","components.Search.showFiltersPane":"Показать панель фильтров","components.Search.spinnerText":"Загрузка результатов поиска...","components.Search.textQueryLengthWarning":"Текстовый поиск требует не менее 3 символов. { query } не достаточно длинный, чтобы искать. Этот запрос не повлияет на результаты поиска.","components.SearchFilterGroupModal.closeModal":"Закрыть модальное окно","components.SearchFilterGroupModal.error":"Произошла ошибка при поиске {filterName}.","components.SearchFilterGroupModal.inputLabel":"Поиск фильтров для добавления","components.SearchFilterGroupModal.inputPlaceholder":"Искать в { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Загрузить больше результатов","components.SearchFilterGroupModal.loadingResults":"Загрузка результатов поиска...","components.SearchFilterGroupModal.modalTitle":"Добавить фильтры для {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Ещё опции","components.SearchFilterGroupModal.queryTooShort":"Введите минимум 3 символа, чтобы начать поиск.","components.SearchFilterValueParent.ariaHideChildren":"Скрыть дополнительные фильтры для {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Показать больше фильтров для {filterValueName}","components.SearchFiltersPane.clearFilters":"Очистите {activeFilterCount, number} {activeFilterCount, plural, one {активный фильтр} few {активных фильтра} many {активных фильтров} other {активных фильтров}}","components.SearchFiltersPane.title":"Фильтровать курсы","components.SearchInput.button":"Поиск","components.SearchSuggestField.searchFieldPlaceholder":"Поиск курсов, организаций, категорий","components.UserLogin.logIn":"Вход","components.UserLogin.logOut":"Выход","components.UserLogin.signup":"Зарегистрироваться","components.UserLogin.spinnerText":"Загрузка статуса входа...","components.useStaticFilters.courses":"Курсы"} \ No newline at end of file diff --git a/src/frontend/package.json b/src/frontend/package.json index bac3fb2a5f..5ead530e67 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,6 +1,6 @@ { "name": "richie-education", - "version": "2.13.0", + "version": "2.14.0", "description": "A CMS to build learning portals for Open Education", "main": "sandbox/manage.py", "scripts": { diff --git a/src/richie/locale/ar_SA/LC_MESSAGES/django.mo b/src/richie/locale/ar_SA/LC_MESSAGES/django.mo index 73052c2b08..163c84a87e 100644 Binary files a/src/richie/locale/ar_SA/LC_MESSAGES/django.mo and b/src/richie/locale/ar_SA/LC_MESSAGES/django.mo differ diff --git a/src/richie/locale/ar_SA/LC_MESSAGES/django.po b/src/richie/locale/ar_SA/LC_MESSAGES/django.po index 03f037532c..169748e161 100644 --- a/src/richie/locale/ar_SA/LC_MESSAGES/django.po +++ b/src/richie/locale/ar_SA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: richie\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-17 18:04+0000\n" -"PO-Revision-Date: 2022-02-18 09:49\n" +"POT-Creation-Date: 2022-04-01 15:01+0000\n" +"PO-Revision-Date: 2022-04-04 07:53\n" "Last-Translator: \n" "Language-Team: Arabic, Saudi Arabia\n" "Language: ar_SA\n" @@ -103,29 +103,28 @@ msgstr "" msgid "You are here:" msgstr "" -#: apps/core/templates/richie/base.html:74 +#: apps/core/templates/richie/base.html:78 msgid "Skip to main content" msgstr "" -#: apps/core/templates/richie/base.html:86 +#: apps/core/templates/richie/base.html:90 msgid "Go to homepage" msgstr "" -#: apps/core/templates/richie/base.html:111 -#: apps/courses/templates/courses/cms/course_detail.html:172 +#: apps/core/templates/richie/base.html:115 msgid "Contact us" msgstr "" -#: apps/core/templates/richie/base.html:143 +#: apps/core/templates/richie/base.html:147 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:32 msgid "Learn more" msgstr "" -#: apps/core/templates/richie/base.html:157 +#: apps/core/templates/richie/base.html:161 msgid "Life-changing learning!" msgstr "" -#: apps/core/templates/richie/base.html:171 +#: apps/core/templates/richie/base.html:175 msgid "Powered by" msgstr "" @@ -182,23 +181,31 @@ msgstr "" msgid "Richie news: %(title)s %(url)s" msgstr "" -#: apps/core/templates/social-networks/blogpost-badges.html:10 -#: apps/core/templates/social-networks/course-badges.html:10 +#: apps/core/templates/social-networks/blogpost-badges.html:11 +#: apps/core/templates/social-networks/blogpost-badges.html:12 +#: apps/core/templates/social-networks/course-badges.html:11 +#: apps/core/templates/social-networks/course-badges.html:12 msgid "Share on Facebook" msgstr "" -#: apps/core/templates/social-networks/blogpost-badges.html:20 -#: apps/core/templates/social-networks/course-badges.html:20 +#: apps/core/templates/social-networks/blogpost-badges.html:21 +#: apps/core/templates/social-networks/blogpost-badges.html:22 +#: apps/core/templates/social-networks/course-badges.html:21 +#: apps/core/templates/social-networks/course-badges.html:22 msgid "Share on Twitter" msgstr "" -#: apps/core/templates/social-networks/blogpost-badges.html:30 -#: apps/core/templates/social-networks/course-badges.html:30 +#: apps/core/templates/social-networks/blogpost-badges.html:31 +#: apps/core/templates/social-networks/blogpost-badges.html:32 +#: apps/core/templates/social-networks/course-badges.html:31 +#: apps/core/templates/social-networks/course-badges.html:32 msgid "Share on Linkedin" msgstr "" -#: apps/core/templates/social-networks/blogpost-badges.html:40 -#: apps/core/templates/social-networks/course-badges.html:40 +#: apps/core/templates/social-networks/blogpost-badges.html:41 +#: apps/core/templates/social-networks/blogpost-badges.html:42 +#: apps/core/templates/social-networks/course-badges.html:41 +#: apps/core/templates/social-networks/course-badges.html:42 msgid "Share by Email" msgstr "" @@ -211,21 +218,19 @@ msgstr "" msgid "I just enrolled to the course \"%(title)s\" on Richie: %(url)s" msgstr "" +#: apps/core/templates/social-networks/footer-badges.html:7 #: apps/core/templates/social-networks/footer-badges.html:8 msgid "Facebook" msgstr "" -#: apps/core/templates/social-networks/footer-badges.html:16 +#: apps/core/templates/social-networks/footer-badges.html:17 +#: apps/core/templates/social-networks/footer-badges.html:18 msgid "Twitter page" msgstr "" -#: apps/core/templates/social-networks/footer-badges.html:19 -msgid "Twitter" -msgstr "" - #: apps/core/templates/social-networks/footer-badges.html:27 -#: apps/core/templates/social-networks/footer-badges.html:30 -msgid "Linkedin" +#: apps/core/templates/social-networks/footer-badges.html:28 +msgid "Linkedin page" msgstr "" #: apps/core/views/error.py:7 @@ -273,6 +278,8 @@ msgid "See filer folder" msgstr "" #: apps/courses/cms_plugins.py:27 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:55 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:56 msgid "Organization" msgstr "" @@ -281,6 +288,7 @@ msgid "Organization by Category" msgstr "" #: apps/courses/cms_plugins.py:87 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:29 msgid "Category" msgstr "" @@ -538,13 +546,13 @@ msgid "blog posts" msgstr "" #: apps/courses/models/blog.py:91 apps/courses/models/category.py:154 -#: apps/courses/models/course.py:981 apps/courses/models/organization.py:199 +#: apps/courses/models/course.py:983 apps/courses/models/organization.py:199 #: apps/courses/models/organization.py:233 msgid "variant" msgstr "" #: apps/courses/models/blog.py:94 apps/courses/models/category.py:157 -#: apps/courses/models/course.py:984 apps/courses/models/organization.py:202 +#: apps/courses/models/course.py:986 apps/courses/models/organization.py:202 #: apps/courses/models/organization.py:236 msgid "Optional glimpse variant for a custom look." msgstr "" @@ -737,55 +745,59 @@ msgstr "" msgid "Course run translations" msgstr "" -#: apps/courses/models/course.py:991 +#: apps/courses/models/course.py:932 +msgid "Empty title" +msgstr "" + +#: apps/courses/models/course.py:993 msgid "course plugin" msgstr "" -#: apps/courses/models/course.py:992 +#: apps/courses/models/course.py:994 msgid "course plugins" msgstr "" -#: apps/courses/models/course.py:1009 plugins/large_banner/models.py:38 +#: apps/courses/models/course.py:1011 plugins/large_banner/models.py:38 msgid "logo" msgstr "" -#: apps/courses/models/course.py:1011 +#: apps/courses/models/course.py:1013 msgid "url" msgstr "" -#: apps/courses/models/course.py:1014 apps/courses/models/course.py:1038 +#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1040 msgid "name" msgstr "" -#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1039 +#: apps/courses/models/course.py:1018 apps/courses/models/course.py:1041 msgid "content" msgstr "" -#: apps/courses/models/course.py:1021 +#: apps/courses/models/course.py:1023 msgid "licence" msgstr "" -#: apps/courses/models/course.py:1022 +#: apps/courses/models/course.py:1024 msgid "licences" msgstr "" -#: apps/courses/models/course.py:1044 +#: apps/courses/models/course.py:1046 msgid "Licence translation" msgstr "" -#: apps/courses/models/course.py:1045 +#: apps/courses/models/course.py:1047 msgid "licence translations" msgstr "" -#: apps/courses/models/course.py:1059 +#: apps/courses/models/course.py:1061 msgid "description" msgstr "" -#: apps/courses/models/course.py:1063 +#: apps/courses/models/course.py:1065 msgid "licence plugin" msgstr "" -#: apps/courses/models/course.py:1064 +#: apps/courses/models/course.py:1066 msgid "licence plugins" msgstr "" @@ -897,213 +909,241 @@ msgstr "" msgid "{:s} | {:s}" msgstr "" -#: apps/courses/settings/__init__.py:35 +#: apps/courses/settings/__init__.py:77 msgid "Course page" msgstr "" -#: apps/courses/settings/__init__.py:36 +#: apps/courses/settings/__init__.py:78 msgid "Organization list" msgstr "" -#: apps/courses/settings/__init__.py:37 +#: apps/courses/settings/__init__.py:79 msgid "Organization page" msgstr "" -#: apps/courses/settings/__init__.py:38 +#: apps/courses/settings/__init__.py:80 msgid "Category list" msgstr "" -#: apps/courses/settings/__init__.py:39 +#: apps/courses/settings/__init__.py:81 msgid "Category page" msgstr "" -#: apps/courses/settings/__init__.py:40 +#: apps/courses/settings/__init__.py:82 msgid "Blog post list" msgstr "" -#: apps/courses/settings/__init__.py:41 +#: apps/courses/settings/__init__.py:83 msgid "Blog post page" msgstr "" -#: apps/courses/settings/__init__.py:42 +#: apps/courses/settings/__init__.py:84 msgid "Person page" msgstr "" -#: apps/courses/settings/__init__.py:43 +#: apps/courses/settings/__init__.py:85 msgid "Person list" msgstr "" -#: apps/courses/settings/__init__.py:44 +#: apps/courses/settings/__init__.py:86 msgid "Program page" msgstr "" -#: apps/courses/settings/__init__.py:45 +#: apps/courses/settings/__init__.py:87 msgid "Program list" msgstr "" -#: apps/courses/settings/__init__.py:46 +#: apps/courses/settings/__init__.py:88 msgid "Search" msgstr "" -#: apps/courses/settings/__init__.py:47 +#: apps/courses/settings/__init__.py:89 msgid "List of child pages" msgstr "" -#: apps/courses/settings/__init__.py:48 +#: apps/courses/settings/__init__.py:90 msgid "Homepage" msgstr "" -#: apps/courses/settings/__init__.py:49 +#: apps/courses/settings/__init__.py:91 msgid "Single column" msgstr "" -#: apps/courses/settings/__init__.py:56 +#: apps/courses/settings/__init__.py:92 +msgid "Three columns: (33% | 33% | 33%)" +msgstr "" + +#: apps/courses/settings/__init__.py:93 +msgid "Two columns: (50% | 50%)" +msgstr "" + +#: apps/courses/settings/__init__.py:94 +msgid "Two columns: (25% | 75%)" +msgstr "" + +#: apps/courses/settings/__init__.py:95 +msgid "Two columns: (75% | 25%)" +msgstr "" + +#: apps/courses/settings/__init__.py:102 msgid "Footer" msgstr "" -#: apps/courses/settings/__init__.py:61 +#: apps/courses/settings/__init__.py:107 msgid "Static headline" msgstr "" -#: apps/courses/settings/__init__.py:68 apps/courses/settings/__init__.py:90 -#: apps/courses/settings/__init__.py:317 +#: apps/courses/settings/__init__.py:114 apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:138 apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:155 apps/courses/settings/__init__.py:162 +#: apps/courses/settings/__init__.py:371 msgid "Main content" msgstr "" -#: apps/courses/settings/__init__.py:120 apps/courses/settings/__init__.py:278 -#: apps/courses/settings/__init__.py:298 +#: apps/courses/settings/__init__.py:141 apps/courses/settings/__init__.py:151 +#: apps/courses/settings/__init__.py:158 apps/courses/settings/__init__.py:165 +msgid "Secondary content" +msgstr "" + +#: apps/courses/settings/__init__.py:144 +msgid "Third content" +msgstr "" + +#: apps/courses/settings/__init__.py:169 apps/courses/settings/__init__.py:332 +#: apps/courses/settings/__init__.py:352 #: apps/courses/templates/courses/cms/blogpost_detail.html:108 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:10 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:41 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:76 -#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:9 -#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:8 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:10 +#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:9 #: apps/courses/templates/courses/cms/program_detail.html:40 msgid "Cover" msgstr "" -#: apps/courses/settings/__init__.py:125 +#: apps/courses/settings/__init__.py:174 msgid "Catch phrase" msgstr "" -#: apps/courses/settings/__init__.py:130 +#: apps/courses/settings/__init__.py:179 msgid "Teaser" msgstr "" -#: apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:184 msgid "About the course" msgstr "" -#: apps/courses/settings/__init__.py:140 +#: apps/courses/settings/__init__.py:189 msgid "What you will learn" msgstr "" -#: apps/courses/settings/__init__.py:144 +#: apps/courses/settings/__init__.py:193 msgid "Format" msgstr "" -#: apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:197 msgid "Prerequisites" msgstr "" -#: apps/courses/settings/__init__.py:152 +#: apps/courses/settings/__init__.py:201 msgid "Team" msgstr "" -#: apps/courses/settings/__init__.py:156 +#: apps/courses/settings/__init__.py:205 msgid "Plan" msgstr "" -#: apps/courses/settings/__init__.py:161 +#: apps/courses/settings/__init__.py:210 msgid "Complementary information" msgstr "" -#: apps/courses/settings/__init__.py:173 -#: apps/courses/templates/courses/cms/course_detail.html:464 +#: apps/courses/settings/__init__.py:222 +#: apps/courses/templates/courses/cms/course_detail.html:526 #: apps/courses/templates/courses/cms/fragment_course_relations.html:47 msgid "License for the course content" msgstr "" -#: apps/courses/settings/__init__.py:178 -#: apps/courses/templates/courses/cms/course_detail.html:475 +#: apps/courses/settings/__init__.py:227 +#: apps/courses/templates/courses/cms/course_detail.html:537 #: apps/courses/templates/courses/cms/fragment_course_relations.html:56 msgid "License for the content created by course participants" msgstr "" -#: apps/courses/settings/__init__.py:183 apps/courses/settings/__init__.py:211 -#: apps/courses/settings/__init__.py:242 apps/courses/settings/__init__.py:274 +#: apps/courses/settings/__init__.py:232 apps/courses/settings/__init__.py:260 +#: apps/courses/settings/__init__.py:296 apps/courses/settings/__init__.py:328 msgid "Categories" msgstr "" -#: apps/courses/settings/__init__.py:187 apps/courses/settings/__init__.py:231 +#: apps/courses/settings/__init__.py:236 apps/courses/settings/__init__.py:285 msgid "Icon" msgstr "" -#: apps/courses/settings/__init__.py:192 apps/courses/settings/__init__.py:264 +#: apps/courses/settings/__init__.py:241 apps/courses/settings/__init__.py:318 #: apps/courses/templates/courses/cms/fragment_course_relations.html:27 #: apps/courses/templates/courses/cms/person_detail.html:112 #: apps/search/defaults.py:115 msgid "Organizations" msgstr "" -#: apps/courses/settings/__init__.py:196 +#: apps/courses/settings/__init__.py:245 msgid "Assessment and Certification" msgstr "" -#: apps/courses/settings/__init__.py:201 apps/courses/settings/__init__.py:221 +#: apps/courses/settings/__init__.py:250 apps/courses/settings/__init__.py:275 #: apps/courses/templates/courses/cms/category_detail.html:35 msgid "Banner" msgstr "" -#: apps/courses/settings/__init__.py:206 apps/courses/settings/__init__.py:226 +#: apps/courses/settings/__init__.py:255 apps/courses/settings/__init__.py:280 #: apps/courses/templates/courses/cms/category_detail.html:53 -#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:40 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:41 msgid "Logo" msgstr "" -#: apps/courses/settings/__init__.py:215 apps/courses/settings/__init__.py:236 -#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:35 +#: apps/courses/settings/__init__.py:264 apps/courses/settings/__init__.py:290 msgid "Description" msgstr "" -#: apps/courses/settings/__init__.py:246 +#: apps/courses/settings/__init__.py:269 apps/courses/settings/__init__.py:337 +#: apps/courses/settings/__init__.py:357 +#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:46 +msgid "Excerpt" +msgstr "" + +#: apps/courses/settings/__init__.py:300 msgid "Portrait" msgstr "" -#: apps/courses/settings/__init__.py:251 +#: apps/courses/settings/__init__.py:305 msgid "Bio" msgstr "" -#: apps/courses/settings/__init__.py:256 +#: apps/courses/settings/__init__.py:310 msgid "Main Content" msgstr "" -#: apps/courses/settings/__init__.py:269 +#: apps/courses/settings/__init__.py:323 msgid "Author" msgstr "" -#: apps/courses/settings/__init__.py:283 apps/courses/settings/__init__.py:303 -msgid "Excerpt" -msgstr "" - -#: apps/courses/settings/__init__.py:288 apps/courses/settings/__init__.py:308 +#: apps/courses/settings/__init__.py:342 apps/courses/settings/__init__.py:362 msgid "Body" msgstr "" -#: apps/courses/settings/__init__.py:292 +#: apps/courses/settings/__init__.py:346 msgid "Headline" msgstr "" -#: apps/courses/settings/__init__.py:313 +#: apps/courses/settings/__init__.py:367 #: apps/courses/templates/courses/cms/person_detail.html:129 msgid "Courses" msgstr "" -#: apps/courses/settings/__init__.py:439 +#: apps/courses/settings/__init__.py:493 msgid "Button caesura" msgstr "" -#: apps/courses/settings/__init__.py:441 +#: apps/courses/settings/__init__.py:495 msgid "Full width" msgstr "" @@ -1124,6 +1164,7 @@ msgid "blog post cover image" msgstr "" #: apps/courses/templates/courses/cms/blogpost_detail.html:138 +#: apps/courses/templates/courses/cms/organization_detail.html:102 #: apps/courses/templates/courses/cms/program_detail.html:60 msgid "No excerpt content" msgstr "" @@ -1154,7 +1195,7 @@ msgid "Sub categories" msgstr "" #: apps/courses/templates/courses/cms/category_detail.html:118 -#: apps/courses/templates/courses/cms/organization_detail.html:106 +#: apps/courses/templates/courses/cms/organization_detail.html:120 #: apps/courses/templates/courses/cms/program_detail.html:78 msgid "Related courses" msgstr "" @@ -1192,12 +1233,12 @@ msgid "Related blogposts pagination" msgstr "" #: apps/courses/templates/courses/cms/category_detail.html:188 -#: apps/courses/templates/courses/cms/organization_detail.html:132 +#: apps/courses/templates/courses/cms/organization_detail.html:146 msgid "Related persons" msgstr "" #: apps/courses/templates/courses/cms/category_detail.html:193 -#: apps/courses/templates/courses/cms/organization_detail.html:139 +#: apps/courses/templates/courses/cms/organization_detail.html:153 msgid "Related persons pagination" msgstr "" @@ -1205,147 +1246,173 @@ msgstr "" msgid "No categories" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:58 -#: apps/courses/templates/courses/cms/organization_detail.html:87 -#: apps/courses/templates/courses/cms/person_detail.html:47 -msgid "No associated categories" +#: apps/courses/templates/courses/cms/course_detail.html:6 +#, python-format +msgid "%(course_title)s - Course" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:72 +#: apps/courses/templates/courses/cms/course_detail.html:59 msgid "Ref. " msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:88 +#: apps/courses/templates/courses/cms/course_detail.html:73 +#: apps/courses/templates/courses/cms/organization_detail.html:91 +#: apps/courses/templates/courses/cms/person_detail.html:47 +msgid "No associated categories" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:94 msgid "Duration:" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:97 +#: apps/courses/templates/courses/cms/course_detail.html:103 msgid "Effort:" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:106 +#: apps/courses/templates/courses/cms/course_detail.html:112 msgid "Pace:" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:116 +#: apps/courses/templates/courses/cms/course_detail.html:122 msgid "Enter here a introduction of your course." msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:124 +#: apps/courses/templates/courses/cms/course_detail.html:130 #, python-format msgid "\n" " %(count)s already enrolled!\n" " " msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:136 +#: apps/courses/templates/courses/cms/course_detail.html:142 msgid "Add a teaser video or add a cover image below and it will be used as teaser image as well." msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:148 -#: apps/courses/templates/courses/cms/course_detail.html:226 +#: apps/courses/templates/courses/cms/course_detail.html:154 +#: apps/courses/templates/courses/cms/course_detail.html:255 msgid "course cover image" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:198 +#: apps/courses/templates/courses/cms/course_detail.html:182 +msgid "No open course runs" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:192 +msgid "course runs are currently open for this course" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:196 +msgid "Choose now" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:227 #, python-format msgid "\n" " Archived on %(creation_date)s\n" " " msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:202 +#: apps/courses/templates/courses/cms/course_detail.html:231 msgid "Go to current version" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:213 +#: apps/courses/templates/courses/cms/course_detail.html:242 msgid "Glimpse cover" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:215 +#: apps/courses/templates/courses/cms/course_detail.html:244 msgid "Add an image for course cover on its glimpse." msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:239 +#: apps/courses/templates/courses/cms/course_detail.html:268 msgctxt "course_detail__title" msgid "What you will learn" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:240 +#: apps/courses/templates/courses/cms/course_detail.html:269 msgid "At the end of this course, you will be able to:" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:249 +#: apps/courses/templates/courses/cms/course_detail.html:278 msgctxt "course_detail__title" msgid "Description" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:260 +#: apps/courses/templates/courses/cms/course_detail.html:289 msgctxt "course_detail__title" msgid "Format" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:262 +#: apps/courses/templates/courses/cms/course_detail.html:291 msgid "How is the course structured?" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:271 +#: apps/courses/templates/courses/cms/course_detail.html:300 msgctxt "course_detail__title" msgid "Prerequisites" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:274 +#: apps/courses/templates/courses/cms/course_detail.html:303 msgid "What are the prerequisites to follow this course?" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:284 +#: apps/courses/templates/courses/cms/course_detail.html:313 msgctxt "course_detail__title" msgid "Assessment and certification" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:287 +#: apps/courses/templates/courses/cms/course_detail.html:316 msgid "How is progress evaluated and/or certified?" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:299 +#: apps/courses/templates/courses/cms/course_detail.html:328 msgctxt "course_detail__title" msgid "Course plan" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:302 +#: apps/courses/templates/courses/cms/course_detail.html:331 msgid "Enter here the detailed course plan." msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:317 +#: apps/courses/templates/courses/cms/course_detail.html:349 +msgctxt "course_detail__title" +msgid "Other course runs" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:351 msgctxt "course_detail__title" msgid "Course runs" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:323 -msgid "No open course runs" +#: apps/courses/templates/courses/cms/course_detail.html:361 +msgid "No course runs" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:363 +msgid "No other course runs" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:332 +#: apps/courses/templates/courses/cms/course_detail.html:387 msgctxt "Course runs to be scheduled (plural)" msgid "To be scheduled" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:343 +#: apps/courses/templates/courses/cms/course_detail.html:400 msgctxt "Upcoming course runs (plural)" msgid "Upcoming" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:354 +#: apps/courses/templates/courses/cms/course_detail.html:413 msgctxt "Ongoing course runs (plural)" msgid "Ongoing" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:365 +#: apps/courses/templates/courses/cms/course_detail.html:426 msgctxt "Archived course runs (plural)" msgid "Archived" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:389 +#: apps/courses/templates/courses/cms/course_detail.html:451 msgid "\n" " This course is part of a program\n" " " @@ -1359,41 +1426,51 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: apps/courses/templates/courses/cms/course_detail.html:415 +#: apps/courses/templates/courses/cms/course_detail.html:477 msgctxt "course_detail__title" msgid "Course team" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:420 +#: apps/courses/templates/courses/cms/course_detail.html:482 #: apps/courses/templates/courses/cms/fragment_course_relations.html:13 msgid "Who are the teachers in the course team?" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:434 +#: apps/courses/templates/courses/cms/course_detail.html:496 msgctxt "course_detail__title" msgid "Organizations" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:439 +#: apps/courses/templates/courses/cms/course_detail.html:501 #: apps/courses/templates/courses/cms/fragment_course_relations.html:32 msgid "What are the organizations publishing this course?" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:460 +#: apps/courses/templates/courses/cms/course_detail.html:522 msgctxt "course_detail__title" msgid "License" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:467 +#: apps/courses/templates/courses/cms/course_detail.html:529 #: apps/courses/templates/courses/cms/fragment_course_relations.html:50 msgid "What is the license for the course content?" msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:478 +#: apps/courses/templates/courses/cms/course_detail.html:540 #: apps/courses/templates/courses/cms/fragment_course_relations.html:59 msgid "What is the license for the content created by course participants?" msgstr "" +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:63 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:64 +msgid "Course code" +msgstr "" + +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:83 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:84 +msgid "Course date" +msgstr "" + #: apps/courses/templates/courses/cms/fragment_course_relations.html:8 msgid "Course team" msgstr "" @@ -1448,28 +1525,26 @@ msgid "\n" " " msgstr "" -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:16 -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:39 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:8 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:9 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:17 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:40 msgid "Main organization" msgstr "" -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:29 -msgid "main organization logo" -msgstr "" - -#: apps/courses/templates/courses/cms/organization_detail.html:50 +#: apps/courses/templates/courses/cms/organization_detail.html:54 msgid "organization banner" msgstr "" -#: apps/courses/templates/courses/cms/organization_detail.html:71 +#: apps/courses/templates/courses/cms/organization_detail.html:75 msgid "organization logo" msgstr "" -#: apps/courses/templates/courses/cms/organization_detail.html:111 +#: apps/courses/templates/courses/cms/organization_detail.html:125 msgid "Related courses pagination" msgstr "" -#: apps/courses/templates/courses/cms/organization_detail.html:114 +#: apps/courses/templates/courses/cms/organization_detail.html:128 #, python-format msgid "\n" " See all courses related to %(organization_title)s\n" @@ -1522,7 +1597,7 @@ msgstr "" #. Translators: delay indicates when the course will start as a duration. #. In english the string will be "The course will start in 3 days" -#: apps/courses/templatetags/extra_tags.py:262 +#: apps/courses/templatetags/extra_tags.py:278 msgid "The course will start {delay:s}" msgstr "" diff --git a/src/richie/locale/es_ES/LC_MESSAGES/django.mo b/src/richie/locale/es_ES/LC_MESSAGES/django.mo index fb1afb80e4..baab7f33dc 100644 Binary files a/src/richie/locale/es_ES/LC_MESSAGES/django.mo and b/src/richie/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/src/richie/locale/es_ES/LC_MESSAGES/django.po b/src/richie/locale/es_ES/LC_MESSAGES/django.po index 0f50257fec..00c4900432 100644 --- a/src/richie/locale/es_ES/LC_MESSAGES/django.po +++ b/src/richie/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: richie\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-17 18:04+0000\n" -"PO-Revision-Date: 2022-02-18 09:49\n" +"POT-Creation-Date: 2022-04-01 15:01+0000\n" +"PO-Revision-Date: 2022-04-04 07:53\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -99,29 +99,28 @@ msgstr "Su navegador no admite este formato de vídeo." msgid "You are here:" msgstr "Usted está aquí:" -#: apps/core/templates/richie/base.html:74 +#: apps/core/templates/richie/base.html:78 msgid "Skip to main content" msgstr "Saltar al contenido principal" -#: apps/core/templates/richie/base.html:86 +#: apps/core/templates/richie/base.html:90 msgid "Go to homepage" msgstr "Ir a la página de inicio" -#: apps/core/templates/richie/base.html:111 -#: apps/courses/templates/courses/cms/course_detail.html:172 +#: apps/core/templates/richie/base.html:115 msgid "Contact us" msgstr "Contáctenos" -#: apps/core/templates/richie/base.html:143 +#: apps/core/templates/richie/base.html:147 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:32 msgid "Learn more" msgstr "Saber más" -#: apps/core/templates/richie/base.html:157 +#: apps/core/templates/richie/base.html:161 msgid "Life-changing learning!" msgstr "¡Aprendizaje que cambia la vida!" -#: apps/core/templates/richie/base.html:171 +#: apps/core/templates/richie/base.html:175 msgid "Powered by" msgstr "Impulsado por" @@ -178,23 +177,31 @@ msgstr "Noticias de Richie: %(title)s" msgid "Richie news: %(title)s %(url)s" msgstr "Noticias de Richie: %(title)s %(url)s" -#: apps/core/templates/social-networks/blogpost-badges.html:10 -#: apps/core/templates/social-networks/course-badges.html:10 +#: apps/core/templates/social-networks/blogpost-badges.html:11 +#: apps/core/templates/social-networks/blogpost-badges.html:12 +#: apps/core/templates/social-networks/course-badges.html:11 +#: apps/core/templates/social-networks/course-badges.html:12 msgid "Share on Facebook" msgstr "Compartir en Facebook" -#: apps/core/templates/social-networks/blogpost-badges.html:20 -#: apps/core/templates/social-networks/course-badges.html:20 +#: apps/core/templates/social-networks/blogpost-badges.html:21 +#: apps/core/templates/social-networks/blogpost-badges.html:22 +#: apps/core/templates/social-networks/course-badges.html:21 +#: apps/core/templates/social-networks/course-badges.html:22 msgid "Share on Twitter" msgstr "Compartir en Twitter" -#: apps/core/templates/social-networks/blogpost-badges.html:30 -#: apps/core/templates/social-networks/course-badges.html:30 +#: apps/core/templates/social-networks/blogpost-badges.html:31 +#: apps/core/templates/social-networks/blogpost-badges.html:32 +#: apps/core/templates/social-networks/course-badges.html:31 +#: apps/core/templates/social-networks/course-badges.html:32 msgid "Share on Linkedin" msgstr "Compartir en Linkedin" -#: apps/core/templates/social-networks/blogpost-badges.html:40 -#: apps/core/templates/social-networks/course-badges.html:40 +#: apps/core/templates/social-networks/blogpost-badges.html:41 +#: apps/core/templates/social-networks/blogpost-badges.html:42 +#: apps/core/templates/social-networks/course-badges.html:41 +#: apps/core/templates/social-networks/course-badges.html:42 msgid "Share by Email" msgstr "Compartir por Email" @@ -207,22 +214,20 @@ msgstr "Sigua un curso en línea con Richie" msgid "I just enrolled to the course \"%(title)s\" on Richie: %(url)s" msgstr "Acabo de inscribirme al curso \"%(title)s\" en Richie: %(url)s" +#: apps/core/templates/social-networks/footer-badges.html:7 #: apps/core/templates/social-networks/footer-badges.html:8 msgid "Facebook" msgstr "Facebook" -#: apps/core/templates/social-networks/footer-badges.html:16 +#: apps/core/templates/social-networks/footer-badges.html:17 +#: apps/core/templates/social-networks/footer-badges.html:18 msgid "Twitter page" msgstr "Página de Twitter" -#: apps/core/templates/social-networks/footer-badges.html:19 -msgid "Twitter" -msgstr "Twitter" - #: apps/core/templates/social-networks/footer-badges.html:27 -#: apps/core/templates/social-networks/footer-badges.html:30 -msgid "Linkedin" -msgstr "Linkedin" +#: apps/core/templates/social-networks/footer-badges.html:28 +msgid "Linkedin page" +msgstr "" #: apps/core/views/error.py:7 msgid "Bad request" @@ -269,6 +274,8 @@ msgid "See filer folder" msgstr "Ver carpeta de archivos" #: apps/courses/cms_plugins.py:27 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:55 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:56 msgid "Organization" msgstr "Organizaciones" @@ -277,6 +284,7 @@ msgid "Organization by Category" msgstr "Organización por categoría" #: apps/courses/cms_plugins.py:87 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:29 msgid "Category" msgstr "Categoría" @@ -534,13 +542,13 @@ msgid "blog posts" msgstr "entradas de blog" #: apps/courses/models/blog.py:91 apps/courses/models/category.py:154 -#: apps/courses/models/course.py:981 apps/courses/models/organization.py:199 +#: apps/courses/models/course.py:983 apps/courses/models/organization.py:199 #: apps/courses/models/organization.py:233 msgid "variant" msgstr "variante" #: apps/courses/models/blog.py:94 apps/courses/models/category.py:157 -#: apps/courses/models/course.py:984 apps/courses/models/organization.py:202 +#: apps/courses/models/course.py:986 apps/courses/models/organization.py:202 #: apps/courses/models/organization.py:236 msgid "Optional glimpse variant for a custom look." msgstr "Variante vista previa optional para un aspecto personalizado." @@ -733,55 +741,59 @@ msgstr "Traducción de la sesión de curso" msgid "Course run translations" msgstr "Traducciones de la sesión de curso" -#: apps/courses/models/course.py:991 +#: apps/courses/models/course.py:932 +msgid "Empty title" +msgstr "Sin título" + +#: apps/courses/models/course.py:993 msgid "course plugin" msgstr "plugin de curso" -#: apps/courses/models/course.py:992 +#: apps/courses/models/course.py:994 msgid "course plugins" msgstr "plugins de curso" -#: apps/courses/models/course.py:1009 plugins/large_banner/models.py:38 +#: apps/courses/models/course.py:1011 plugins/large_banner/models.py:38 msgid "logo" msgstr "logo" -#: apps/courses/models/course.py:1011 +#: apps/courses/models/course.py:1013 msgid "url" msgstr "url" -#: apps/courses/models/course.py:1014 apps/courses/models/course.py:1038 +#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1040 msgid "name" msgstr "nombre" -#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1039 +#: apps/courses/models/course.py:1018 apps/courses/models/course.py:1041 msgid "content" msgstr "contenido" -#: apps/courses/models/course.py:1021 +#: apps/courses/models/course.py:1023 msgid "licence" msgstr "licencia" -#: apps/courses/models/course.py:1022 +#: apps/courses/models/course.py:1024 msgid "licences" msgstr "licencias" -#: apps/courses/models/course.py:1044 +#: apps/courses/models/course.py:1046 msgid "Licence translation" msgstr "Traducción de la licencia" -#: apps/courses/models/course.py:1045 +#: apps/courses/models/course.py:1047 msgid "licence translations" msgstr "traducciones de licencias" -#: apps/courses/models/course.py:1059 +#: apps/courses/models/course.py:1061 msgid "description" msgstr "descripción" -#: apps/courses/models/course.py:1063 +#: apps/courses/models/course.py:1065 msgid "licence plugin" msgstr "plugin de licencia" -#: apps/courses/models/course.py:1064 +#: apps/courses/models/course.py:1066 msgid "licence plugins" msgstr "plugins de licencia" @@ -893,213 +905,241 @@ msgstr "roles de página" msgid "{:s} | {:s}" msgstr "{:s} | {:s}" -#: apps/courses/settings/__init__.py:35 +#: apps/courses/settings/__init__.py:77 msgid "Course page" msgstr "Página de curso" -#: apps/courses/settings/__init__.py:36 +#: apps/courses/settings/__init__.py:78 msgid "Organization list" msgstr "Lista de organizaciones" -#: apps/courses/settings/__init__.py:37 +#: apps/courses/settings/__init__.py:79 msgid "Organization page" msgstr "Página organización" -#: apps/courses/settings/__init__.py:38 +#: apps/courses/settings/__init__.py:80 msgid "Category list" msgstr "Lista de categorías" -#: apps/courses/settings/__init__.py:39 +#: apps/courses/settings/__init__.py:81 msgid "Category page" msgstr "Página de categoría" -#: apps/courses/settings/__init__.py:40 +#: apps/courses/settings/__init__.py:82 msgid "Blog post list" msgstr "Lista de entradas de blog" -#: apps/courses/settings/__init__.py:41 +#: apps/courses/settings/__init__.py:83 msgid "Blog post page" msgstr "Página de entrada de blog" -#: apps/courses/settings/__init__.py:42 +#: apps/courses/settings/__init__.py:84 msgid "Person page" msgstr "Página persona" -#: apps/courses/settings/__init__.py:43 +#: apps/courses/settings/__init__.py:85 msgid "Person list" msgstr "Lista de personas" -#: apps/courses/settings/__init__.py:44 +#: apps/courses/settings/__init__.py:86 msgid "Program page" msgstr "Página de programa" -#: apps/courses/settings/__init__.py:45 +#: apps/courses/settings/__init__.py:87 msgid "Program list" msgstr "Lista de programas" -#: apps/courses/settings/__init__.py:46 +#: apps/courses/settings/__init__.py:88 msgid "Search" msgstr "Buscar" -#: apps/courses/settings/__init__.py:47 +#: apps/courses/settings/__init__.py:89 msgid "List of child pages" msgstr "Lista de páginas hijas" -#: apps/courses/settings/__init__.py:48 +#: apps/courses/settings/__init__.py:90 msgid "Homepage" msgstr "Página principal" -#: apps/courses/settings/__init__.py:49 +#: apps/courses/settings/__init__.py:91 msgid "Single column" msgstr "Columna única" -#: apps/courses/settings/__init__.py:56 +#: apps/courses/settings/__init__.py:92 +msgid "Three columns: (33% | 33% | 33%)" +msgstr "Tres columnas: (33% | 33% | 33%)" + +#: apps/courses/settings/__init__.py:93 +msgid "Two columns: (50% | 50%)" +msgstr "Dos columnas: (50% | 50%)" + +#: apps/courses/settings/__init__.py:94 +msgid "Two columns: (25% | 75%)" +msgstr "Dos columnas: (25% | 75%)" + +#: apps/courses/settings/__init__.py:95 +msgid "Two columns: (75% | 25%)" +msgstr "Dos columnas: (75% | 25%)" + +#: apps/courses/settings/__init__.py:102 msgid "Footer" msgstr "Pie de página" -#: apps/courses/settings/__init__.py:61 +#: apps/courses/settings/__init__.py:107 msgid "Static headline" msgstr "Encabezado estático" -#: apps/courses/settings/__init__.py:68 apps/courses/settings/__init__.py:90 -#: apps/courses/settings/__init__.py:317 +#: apps/courses/settings/__init__.py:114 apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:138 apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:155 apps/courses/settings/__init__.py:162 +#: apps/courses/settings/__init__.py:371 msgid "Main content" msgstr "Contenido principal" -#: apps/courses/settings/__init__.py:120 apps/courses/settings/__init__.py:278 -#: apps/courses/settings/__init__.py:298 +#: apps/courses/settings/__init__.py:141 apps/courses/settings/__init__.py:151 +#: apps/courses/settings/__init__.py:158 apps/courses/settings/__init__.py:165 +msgid "Secondary content" +msgstr "Contenido secundario" + +#: apps/courses/settings/__init__.py:144 +msgid "Third content" +msgstr "Tercer contenido" + +#: apps/courses/settings/__init__.py:169 apps/courses/settings/__init__.py:332 +#: apps/courses/settings/__init__.py:352 #: apps/courses/templates/courses/cms/blogpost_detail.html:108 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:10 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:41 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:76 -#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:9 -#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:8 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:10 +#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:9 #: apps/courses/templates/courses/cms/program_detail.html:40 msgid "Cover" msgstr "Portada" -#: apps/courses/settings/__init__.py:125 +#: apps/courses/settings/__init__.py:174 msgid "Catch phrase" msgstr "Eslogan" -#: apps/courses/settings/__init__.py:130 +#: apps/courses/settings/__init__.py:179 msgid "Teaser" msgstr "Teaser" -#: apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:184 msgid "About the course" msgstr "Acerca del curso" -#: apps/courses/settings/__init__.py:140 +#: apps/courses/settings/__init__.py:189 msgid "What you will learn" msgstr "Lo que aprenderás" -#: apps/courses/settings/__init__.py:144 +#: apps/courses/settings/__init__.py:193 msgid "Format" msgstr "Formato" -#: apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:197 msgid "Prerequisites" msgstr "Prerrequisitos" -#: apps/courses/settings/__init__.py:152 +#: apps/courses/settings/__init__.py:201 msgid "Team" msgstr "Equipo" -#: apps/courses/settings/__init__.py:156 +#: apps/courses/settings/__init__.py:205 msgid "Plan" msgstr "Plan" -#: apps/courses/settings/__init__.py:161 +#: apps/courses/settings/__init__.py:210 msgid "Complementary information" msgstr "Información complementaria" -#: apps/courses/settings/__init__.py:173 -#: apps/courses/templates/courses/cms/course_detail.html:464 +#: apps/courses/settings/__init__.py:222 +#: apps/courses/templates/courses/cms/course_detail.html:526 #: apps/courses/templates/courses/cms/fragment_course_relations.html:47 msgid "License for the course content" msgstr "Licencia para el contenido del curso" -#: apps/courses/settings/__init__.py:178 -#: apps/courses/templates/courses/cms/course_detail.html:475 +#: apps/courses/settings/__init__.py:227 +#: apps/courses/templates/courses/cms/course_detail.html:537 #: apps/courses/templates/courses/cms/fragment_course_relations.html:56 msgid "License for the content created by course participants" msgstr "Licencia para el contenido creado por los participantes del curso" -#: apps/courses/settings/__init__.py:183 apps/courses/settings/__init__.py:211 -#: apps/courses/settings/__init__.py:242 apps/courses/settings/__init__.py:274 +#: apps/courses/settings/__init__.py:232 apps/courses/settings/__init__.py:260 +#: apps/courses/settings/__init__.py:296 apps/courses/settings/__init__.py:328 msgid "Categories" msgstr "Categorías" -#: apps/courses/settings/__init__.py:187 apps/courses/settings/__init__.py:231 +#: apps/courses/settings/__init__.py:236 apps/courses/settings/__init__.py:285 msgid "Icon" msgstr "Icono" -#: apps/courses/settings/__init__.py:192 apps/courses/settings/__init__.py:264 +#: apps/courses/settings/__init__.py:241 apps/courses/settings/__init__.py:318 #: apps/courses/templates/courses/cms/fragment_course_relations.html:27 #: apps/courses/templates/courses/cms/person_detail.html:112 #: apps/search/defaults.py:115 msgid "Organizations" msgstr "Organizaciones" -#: apps/courses/settings/__init__.py:196 +#: apps/courses/settings/__init__.py:245 msgid "Assessment and Certification" msgstr "Evaluación y certificación" -#: apps/courses/settings/__init__.py:201 apps/courses/settings/__init__.py:221 +#: apps/courses/settings/__init__.py:250 apps/courses/settings/__init__.py:275 #: apps/courses/templates/courses/cms/category_detail.html:35 msgid "Banner" msgstr "Banner" -#: apps/courses/settings/__init__.py:206 apps/courses/settings/__init__.py:226 +#: apps/courses/settings/__init__.py:255 apps/courses/settings/__init__.py:280 #: apps/courses/templates/courses/cms/category_detail.html:53 -#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:40 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:41 msgid "Logo" msgstr "Logo" -#: apps/courses/settings/__init__.py:215 apps/courses/settings/__init__.py:236 -#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:35 +#: apps/courses/settings/__init__.py:264 apps/courses/settings/__init__.py:290 msgid "Description" msgstr "Descripción" -#: apps/courses/settings/__init__.py:246 +#: apps/courses/settings/__init__.py:269 apps/courses/settings/__init__.py:337 +#: apps/courses/settings/__init__.py:357 +#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:46 +msgid "Excerpt" +msgstr "Extracto" + +#: apps/courses/settings/__init__.py:300 msgid "Portrait" msgstr "Retrato" -#: apps/courses/settings/__init__.py:251 +#: apps/courses/settings/__init__.py:305 msgid "Bio" msgstr "Biografía" -#: apps/courses/settings/__init__.py:256 +#: apps/courses/settings/__init__.py:310 msgid "Main Content" msgstr "Contenido principal" -#: apps/courses/settings/__init__.py:269 +#: apps/courses/settings/__init__.py:323 msgid "Author" msgstr "Autor" -#: apps/courses/settings/__init__.py:283 apps/courses/settings/__init__.py:303 -msgid "Excerpt" -msgstr "Extracto" - -#: apps/courses/settings/__init__.py:288 apps/courses/settings/__init__.py:308 +#: apps/courses/settings/__init__.py:342 apps/courses/settings/__init__.py:362 msgid "Body" msgstr "Cuerpo" -#: apps/courses/settings/__init__.py:292 +#: apps/courses/settings/__init__.py:346 msgid "Headline" msgstr "Encabezado" -#: apps/courses/settings/__init__.py:313 +#: apps/courses/settings/__init__.py:367 #: apps/courses/templates/courses/cms/person_detail.html:129 msgid "Courses" msgstr "Cursos" -#: apps/courses/settings/__init__.py:439 +#: apps/courses/settings/__init__.py:493 msgid "Button caesura" msgstr "Botón cesura" -#: apps/courses/settings/__init__.py:441 +#: apps/courses/settings/__init__.py:495 msgid "Full width" msgstr "Anchura total" @@ -1120,6 +1160,7 @@ msgid "blog post cover image" msgstr "imagen de portada del post del blog" #: apps/courses/templates/courses/cms/blogpost_detail.html:138 +#: apps/courses/templates/courses/cms/organization_detail.html:102 #: apps/courses/templates/courses/cms/program_detail.html:60 msgid "No excerpt content" msgstr "No hay extracto de contenido" @@ -1150,7 +1191,7 @@ msgid "Sub categories" msgstr "Subcategorías" #: apps/courses/templates/courses/cms/category_detail.html:118 -#: apps/courses/templates/courses/cms/organization_detail.html:106 +#: apps/courses/templates/courses/cms/organization_detail.html:120 #: apps/courses/templates/courses/cms/program_detail.html:78 msgid "Related courses" msgstr "Cursos relacionados" @@ -1190,12 +1231,12 @@ msgid "Related blogposts pagination" msgstr "Paginación de entradas de blog relacionadas" #: apps/courses/templates/courses/cms/category_detail.html:188 -#: apps/courses/templates/courses/cms/organization_detail.html:132 +#: apps/courses/templates/courses/cms/organization_detail.html:146 msgid "Related persons" msgstr "Personas relacionadas" #: apps/courses/templates/courses/cms/category_detail.html:193 -#: apps/courses/templates/courses/cms/organization_detail.html:139 +#: apps/courses/templates/courses/cms/organization_detail.html:153 msgid "Related persons pagination" msgstr "Paginación de personas relacionadas" @@ -1203,33 +1244,38 @@ msgstr "Paginación de personas relacionadas" msgid "No categories" msgstr "Sin categorías" -#: apps/courses/templates/courses/cms/course_detail.html:58 -#: apps/courses/templates/courses/cms/organization_detail.html:87 -#: apps/courses/templates/courses/cms/person_detail.html:47 -msgid "No associated categories" -msgstr "No hay categorías asociadas" +#: apps/courses/templates/courses/cms/course_detail.html:6 +#, python-format +msgid "%(course_title)s - Course" +msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:72 +#: apps/courses/templates/courses/cms/course_detail.html:59 msgid "Ref. " msgstr "Ref. " -#: apps/courses/templates/courses/cms/course_detail.html:88 +#: apps/courses/templates/courses/cms/course_detail.html:73 +#: apps/courses/templates/courses/cms/organization_detail.html:91 +#: apps/courses/templates/courses/cms/person_detail.html:47 +msgid "No associated categories" +msgstr "No hay categorías asociadas" + +#: apps/courses/templates/courses/cms/course_detail.html:94 msgid "Duration:" msgstr "Duración:" -#: apps/courses/templates/courses/cms/course_detail.html:97 +#: apps/courses/templates/courses/cms/course_detail.html:103 msgid "Effort:" msgstr "Esfuerzo:" -#: apps/courses/templates/courses/cms/course_detail.html:106 +#: apps/courses/templates/courses/cms/course_detail.html:112 msgid "Pace:" msgstr "Ritmo:" -#: apps/courses/templates/courses/cms/course_detail.html:116 +#: apps/courses/templates/courses/cms/course_detail.html:122 msgid "Enter here a introduction of your course." msgstr "Introduzca aquí una descripción de su curso." -#: apps/courses/templates/courses/cms/course_detail.html:124 +#: apps/courses/templates/courses/cms/course_detail.html:130 #, python-format msgid "\n" " %(count)s already enrolled!\n" @@ -1238,16 +1284,28 @@ msgstr "\n" " ¡%(count)s ya están inscritos!\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:136 +#: apps/courses/templates/courses/cms/course_detail.html:142 msgid "Add a teaser video or add a cover image below and it will be used as teaser image as well." msgstr "Añada un video de teaser o añada una imagen de portada a continuación y se utilizará como imagen de teaser." -#: apps/courses/templates/courses/cms/course_detail.html:148 -#: apps/courses/templates/courses/cms/course_detail.html:226 +#: apps/courses/templates/courses/cms/course_detail.html:154 +#: apps/courses/templates/courses/cms/course_detail.html:255 msgid "course cover image" msgstr "imagen de portada del curso" -#: apps/courses/templates/courses/cms/course_detail.html:198 +#: apps/courses/templates/courses/cms/course_detail.html:182 +msgid "No open course runs" +msgstr "Ninguna sesión de curso abierta" + +#: apps/courses/templates/courses/cms/course_detail.html:192 +msgid "course runs are currently open for this course" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:196 +msgid "Choose now" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:227 #, python-format msgid "\n" " Archived on %(creation_date)s\n" @@ -1256,98 +1314,107 @@ msgstr "\n" " Archivado el %(creation_date)s\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:202 +#: apps/courses/templates/courses/cms/course_detail.html:231 msgid "Go to current version" msgstr "Ir a la sesión actual" -#: apps/courses/templates/courses/cms/course_detail.html:213 +#: apps/courses/templates/courses/cms/course_detail.html:242 msgid "Glimpse cover" msgstr "Vista previa de la cobertura" -#: apps/courses/templates/courses/cms/course_detail.html:215 +#: apps/courses/templates/courses/cms/course_detail.html:244 msgid "Add an image for course cover on its glimpse." msgstr "Agrega una imagen para la portada del curso en la vista previa." -#: apps/courses/templates/courses/cms/course_detail.html:239 +#: apps/courses/templates/courses/cms/course_detail.html:268 msgctxt "course_detail__title" msgid "What you will learn" msgstr "Lo que aprenderá" -#: apps/courses/templates/courses/cms/course_detail.html:240 +#: apps/courses/templates/courses/cms/course_detail.html:269 msgid "At the end of this course, you will be able to:" msgstr "Al final de este curso, podrá:" -#: apps/courses/templates/courses/cms/course_detail.html:249 +#: apps/courses/templates/courses/cms/course_detail.html:278 msgctxt "course_detail__title" msgid "Description" msgstr "Descripción" -#: apps/courses/templates/courses/cms/course_detail.html:260 +#: apps/courses/templates/courses/cms/course_detail.html:289 msgctxt "course_detail__title" msgid "Format" msgstr "Formato" -#: apps/courses/templates/courses/cms/course_detail.html:262 +#: apps/courses/templates/courses/cms/course_detail.html:291 msgid "How is the course structured?" msgstr "¿Cómo está estructurado el curso?" -#: apps/courses/templates/courses/cms/course_detail.html:271 +#: apps/courses/templates/courses/cms/course_detail.html:300 msgctxt "course_detail__title" msgid "Prerequisites" msgstr "Prerrequisitos" -#: apps/courses/templates/courses/cms/course_detail.html:274 +#: apps/courses/templates/courses/cms/course_detail.html:303 msgid "What are the prerequisites to follow this course?" msgstr "¿Cuáles son los perrequisitos para seguir este curso?" -#: apps/courses/templates/courses/cms/course_detail.html:284 +#: apps/courses/templates/courses/cms/course_detail.html:313 msgctxt "course_detail__title" msgid "Assessment and certification" msgstr "Evaluación y certificación" -#: apps/courses/templates/courses/cms/course_detail.html:287 +#: apps/courses/templates/courses/cms/course_detail.html:316 msgid "How is progress evaluated and/or certified?" msgstr "¿Cómo se evalúa y/o certifica el progreso?" -#: apps/courses/templates/courses/cms/course_detail.html:299 +#: apps/courses/templates/courses/cms/course_detail.html:328 msgctxt "course_detail__title" msgid "Course plan" msgstr "Plan del curso" -#: apps/courses/templates/courses/cms/course_detail.html:302 +#: apps/courses/templates/courses/cms/course_detail.html:331 msgid "Enter here the detailed course plan." msgstr "Ingrese aquí el plan detallado del curso." -#: apps/courses/templates/courses/cms/course_detail.html:317 +#: apps/courses/templates/courses/cms/course_detail.html:349 +msgctxt "course_detail__title" +msgid "Other course runs" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:351 msgctxt "course_detail__title" msgid "Course runs" msgstr "Sesión de curso" -#: apps/courses/templates/courses/cms/course_detail.html:323 -msgid "No open course runs" -msgstr "Ninguna sesión de curso abierta" +#: apps/courses/templates/courses/cms/course_detail.html:361 +msgid "No course runs" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:363 +msgid "No other course runs" +msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:332 +#: apps/courses/templates/courses/cms/course_detail.html:387 msgctxt "Course runs to be scheduled (plural)" msgid "To be scheduled" msgstr "Por ser programado" -#: apps/courses/templates/courses/cms/course_detail.html:343 +#: apps/courses/templates/courses/cms/course_detail.html:400 msgctxt "Upcoming course runs (plural)" msgid "Upcoming" msgstr "Próximo" -#: apps/courses/templates/courses/cms/course_detail.html:354 +#: apps/courses/templates/courses/cms/course_detail.html:413 msgctxt "Ongoing course runs (plural)" msgid "Ongoing" msgstr "En progreso" -#: apps/courses/templates/courses/cms/course_detail.html:365 +#: apps/courses/templates/courses/cms/course_detail.html:426 msgctxt "Archived course runs (plural)" msgid "Archived" msgstr "Archivado" -#: apps/courses/templates/courses/cms/course_detail.html:389 +#: apps/courses/templates/courses/cms/course_detail.html:451 msgid "\n" " This course is part of a program\n" " " @@ -1361,41 +1428,51 @@ msgstr[1] "\n" " Este curso es parte de programas\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:415 +#: apps/courses/templates/courses/cms/course_detail.html:477 msgctxt "course_detail__title" msgid "Course team" msgstr "Equipo del curso" -#: apps/courses/templates/courses/cms/course_detail.html:420 +#: apps/courses/templates/courses/cms/course_detail.html:482 #: apps/courses/templates/courses/cms/fragment_course_relations.html:13 msgid "Who are the teachers in the course team?" msgstr "¿Quiénes son los profesores del equipo del curso?" -#: apps/courses/templates/courses/cms/course_detail.html:434 +#: apps/courses/templates/courses/cms/course_detail.html:496 msgctxt "course_detail__title" msgid "Organizations" msgstr "Organizaciones" -#: apps/courses/templates/courses/cms/course_detail.html:439 +#: apps/courses/templates/courses/cms/course_detail.html:501 #: apps/courses/templates/courses/cms/fragment_course_relations.html:32 msgid "What are the organizations publishing this course?" msgstr "¿Cuáles son las organizaciones que publican este curso?" -#: apps/courses/templates/courses/cms/course_detail.html:460 +#: apps/courses/templates/courses/cms/course_detail.html:522 msgctxt "course_detail__title" msgid "License" msgstr "Licencia" -#: apps/courses/templates/courses/cms/course_detail.html:467 +#: apps/courses/templates/courses/cms/course_detail.html:529 #: apps/courses/templates/courses/cms/fragment_course_relations.html:50 msgid "What is the license for the course content?" msgstr "¿Cuál es la licencia para el contenido del curso?" -#: apps/courses/templates/courses/cms/course_detail.html:478 +#: apps/courses/templates/courses/cms/course_detail.html:540 #: apps/courses/templates/courses/cms/fragment_course_relations.html:59 msgid "What is the license for the content created by course participants?" msgstr "¿Cuál es la licencia para el contenido creado por los participantes del curso?" +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:63 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:64 +msgid "Course code" +msgstr "" + +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:83 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:84 +msgid "Course date" +msgstr "" + #: apps/courses/templates/courses/cms/fragment_course_relations.html:8 msgid "Course team" msgstr "Equipo del curso" @@ -1458,28 +1535,26 @@ msgstr "\n" " Si lo que necesita es una página %(model)s, necesita crearlo a través del asistente y seleccione \"Nueva página %(model)s\".\n" " " -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:16 -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:39 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:8 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:9 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:17 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:40 msgid "Main organization" msgstr "Organización principal" -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:29 -msgid "main organization logo" -msgstr "logo principal de la organización" - -#: apps/courses/templates/courses/cms/organization_detail.html:50 +#: apps/courses/templates/courses/cms/organization_detail.html:54 msgid "organization banner" msgstr "banner de la organización" -#: apps/courses/templates/courses/cms/organization_detail.html:71 +#: apps/courses/templates/courses/cms/organization_detail.html:75 msgid "organization logo" msgstr "logo de la organización" -#: apps/courses/templates/courses/cms/organization_detail.html:111 +#: apps/courses/templates/courses/cms/organization_detail.html:125 msgid "Related courses pagination" msgstr "Paginación de cursos relacionados" -#: apps/courses/templates/courses/cms/organization_detail.html:114 +#: apps/courses/templates/courses/cms/organization_detail.html:128 #, python-format msgid "\n" " See all courses related to %(organization_title)s\n" @@ -1536,7 +1611,7 @@ msgstr "No hay programas asociados" #. Translators: delay indicates when the course will start as a duration. #. In english the string will be "The course will start in 3 days" -#: apps/courses/templatetags/extra_tags.py:262 +#: apps/courses/templatetags/extra_tags.py:278 msgid "The course will start {delay:s}" msgstr "El curso comenzará {delay:s}" diff --git a/src/richie/locale/fr_CA/LC_MESSAGES/django.mo b/src/richie/locale/fr_CA/LC_MESSAGES/django.mo index 0c39752455..6dd40505ca 100644 Binary files a/src/richie/locale/fr_CA/LC_MESSAGES/django.mo and b/src/richie/locale/fr_CA/LC_MESSAGES/django.mo differ diff --git a/src/richie/locale/fr_CA/LC_MESSAGES/django.po b/src/richie/locale/fr_CA/LC_MESSAGES/django.po index 81a6c04b47..37e86c5000 100644 --- a/src/richie/locale/fr_CA/LC_MESSAGES/django.po +++ b/src/richie/locale/fr_CA/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: richie\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-17 18:04+0000\n" -"PO-Revision-Date: 2022-02-18 09:49\n" +"POT-Creation-Date: 2022-04-01 15:01+0000\n" +"PO-Revision-Date: 2022-04-04 07:53\n" "Last-Translator: \n" "Language-Team: French, Canada\n" "Language: fr_CA\n" @@ -99,29 +99,28 @@ msgstr "Votre navigateur ne supporte pas ce format de vidéo." msgid "You are here:" msgstr "Vous êtes ici:" -#: apps/core/templates/richie/base.html:74 +#: apps/core/templates/richie/base.html:78 msgid "Skip to main content" msgstr "Passer au contenu principal" -#: apps/core/templates/richie/base.html:86 +#: apps/core/templates/richie/base.html:90 msgid "Go to homepage" msgstr "Aller à la page d'accueil" -#: apps/core/templates/richie/base.html:111 -#: apps/courses/templates/courses/cms/course_detail.html:172 +#: apps/core/templates/richie/base.html:115 msgid "Contact us" msgstr "Contactez-nous" -#: apps/core/templates/richie/base.html:143 +#: apps/core/templates/richie/base.html:147 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:32 msgid "Learn more" msgstr "En savoir plus" -#: apps/core/templates/richie/base.html:157 +#: apps/core/templates/richie/base.html:161 msgid "Life-changing learning!" msgstr "Un apprentissage renversant!" -#: apps/core/templates/richie/base.html:171 +#: apps/core/templates/richie/base.html:175 msgid "Powered by" msgstr "Propulsé par" @@ -178,23 +177,31 @@ msgstr "Actualités Richie : %(title)s" msgid "Richie news: %(title)s %(url)s" msgstr "Actualités Richie : %(title)s %(url)s" -#: apps/core/templates/social-networks/blogpost-badges.html:10 -#: apps/core/templates/social-networks/course-badges.html:10 +#: apps/core/templates/social-networks/blogpost-badges.html:11 +#: apps/core/templates/social-networks/blogpost-badges.html:12 +#: apps/core/templates/social-networks/course-badges.html:11 +#: apps/core/templates/social-networks/course-badges.html:12 msgid "Share on Facebook" msgstr "Partager sur Facebook" -#: apps/core/templates/social-networks/blogpost-badges.html:20 -#: apps/core/templates/social-networks/course-badges.html:20 +#: apps/core/templates/social-networks/blogpost-badges.html:21 +#: apps/core/templates/social-networks/blogpost-badges.html:22 +#: apps/core/templates/social-networks/course-badges.html:21 +#: apps/core/templates/social-networks/course-badges.html:22 msgid "Share on Twitter" msgstr "Partager sur Twitter" -#: apps/core/templates/social-networks/blogpost-badges.html:30 -#: apps/core/templates/social-networks/course-badges.html:30 +#: apps/core/templates/social-networks/blogpost-badges.html:31 +#: apps/core/templates/social-networks/blogpost-badges.html:32 +#: apps/core/templates/social-networks/course-badges.html:31 +#: apps/core/templates/social-networks/course-badges.html:32 msgid "Share on Linkedin" msgstr "Partager sur Linkedin" -#: apps/core/templates/social-networks/blogpost-badges.html:40 -#: apps/core/templates/social-networks/course-badges.html:40 +#: apps/core/templates/social-networks/blogpost-badges.html:41 +#: apps/core/templates/social-networks/blogpost-badges.html:42 +#: apps/core/templates/social-networks/course-badges.html:41 +#: apps/core/templates/social-networks/course-badges.html:42 msgid "Share by Email" msgstr "Partager par courriel" @@ -207,22 +214,20 @@ msgstr "Suivre un cours en ligne avec Richie" msgid "I just enrolled to the course \"%(title)s\" on Richie: %(url)s" msgstr "Je viens de m'inscrire au cours \"%(title)s\" sur Richie: %(url)s" +#: apps/core/templates/social-networks/footer-badges.html:7 #: apps/core/templates/social-networks/footer-badges.html:8 msgid "Facebook" msgstr "Facebook" -#: apps/core/templates/social-networks/footer-badges.html:16 +#: apps/core/templates/social-networks/footer-badges.html:17 +#: apps/core/templates/social-networks/footer-badges.html:18 msgid "Twitter page" msgstr "Page Twitter" -#: apps/core/templates/social-networks/footer-badges.html:19 -msgid "Twitter" -msgstr "Twitter" - #: apps/core/templates/social-networks/footer-badges.html:27 -#: apps/core/templates/social-networks/footer-badges.html:30 -msgid "Linkedin" -msgstr "Linkedin" +#: apps/core/templates/social-networks/footer-badges.html:28 +msgid "Linkedin page" +msgstr "" #: apps/core/views/error.py:7 msgid "Bad request" @@ -269,6 +274,8 @@ msgid "See filer folder" msgstr "Voir le dossier du classeur" #: apps/courses/cms_plugins.py:27 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:55 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:56 msgid "Organization" msgstr "Institution" @@ -277,6 +284,7 @@ msgid "Organization by Category" msgstr "Institution par catégorie" #: apps/courses/cms_plugins.py:87 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:29 msgid "Category" msgstr "Catégorie" @@ -534,13 +542,13 @@ msgid "blog posts" msgstr "messages de blog" #: apps/courses/models/blog.py:91 apps/courses/models/category.py:154 -#: apps/courses/models/course.py:981 apps/courses/models/organization.py:199 +#: apps/courses/models/course.py:983 apps/courses/models/organization.py:199 #: apps/courses/models/organization.py:233 msgid "variant" msgstr "variante" #: apps/courses/models/blog.py:94 apps/courses/models/category.py:157 -#: apps/courses/models/course.py:984 apps/courses/models/organization.py:202 +#: apps/courses/models/course.py:986 apps/courses/models/organization.py:202 #: apps/courses/models/organization.py:236 msgid "Optional glimpse variant for a custom look." msgstr "Variante de vue optionnelle pour une apparence personnalisé." @@ -733,55 +741,59 @@ msgstr "Traduction de la session de cours" msgid "Course run translations" msgstr "Traductions de la session de cours" -#: apps/courses/models/course.py:991 +#: apps/courses/models/course.py:932 +msgid "Empty title" +msgstr "Titre vide" + +#: apps/courses/models/course.py:993 msgid "course plugin" msgstr "plugin de cours" -#: apps/courses/models/course.py:992 +#: apps/courses/models/course.py:994 msgid "course plugins" msgstr "plugins de cours" -#: apps/courses/models/course.py:1009 plugins/large_banner/models.py:38 +#: apps/courses/models/course.py:1011 plugins/large_banner/models.py:38 msgid "logo" msgstr "logo" -#: apps/courses/models/course.py:1011 +#: apps/courses/models/course.py:1013 msgid "url" msgstr "url" -#: apps/courses/models/course.py:1014 apps/courses/models/course.py:1038 +#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1040 msgid "name" msgstr "nom" -#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1039 +#: apps/courses/models/course.py:1018 apps/courses/models/course.py:1041 msgid "content" msgstr "contenu" -#: apps/courses/models/course.py:1021 +#: apps/courses/models/course.py:1023 msgid "licence" msgstr "license" -#: apps/courses/models/course.py:1022 +#: apps/courses/models/course.py:1024 msgid "licences" msgstr "licences" -#: apps/courses/models/course.py:1044 +#: apps/courses/models/course.py:1046 msgid "Licence translation" msgstr "Traduction de la licence" -#: apps/courses/models/course.py:1045 +#: apps/courses/models/course.py:1047 msgid "licence translations" msgstr "traductions de la licence" -#: apps/courses/models/course.py:1059 +#: apps/courses/models/course.py:1061 msgid "description" msgstr "description" -#: apps/courses/models/course.py:1063 +#: apps/courses/models/course.py:1065 msgid "licence plugin" msgstr "plugin de licence" -#: apps/courses/models/course.py:1064 +#: apps/courses/models/course.py:1066 msgid "licence plugins" msgstr "plugins de licence" @@ -893,213 +905,241 @@ msgstr "rôles de la page" msgid "{:s} | {:s}" msgstr "{:s} | {:s}" -#: apps/courses/settings/__init__.py:35 +#: apps/courses/settings/__init__.py:77 msgid "Course page" msgstr "Page de cours" -#: apps/courses/settings/__init__.py:36 +#: apps/courses/settings/__init__.py:78 msgid "Organization list" msgstr "Liste des institutions" -#: apps/courses/settings/__init__.py:37 +#: apps/courses/settings/__init__.py:79 msgid "Organization page" msgstr "Page d'institution" -#: apps/courses/settings/__init__.py:38 +#: apps/courses/settings/__init__.py:80 msgid "Category list" msgstr "Liste des catégories" -#: apps/courses/settings/__init__.py:39 +#: apps/courses/settings/__init__.py:81 msgid "Category page" msgstr "Page de catégorie" -#: apps/courses/settings/__init__.py:40 +#: apps/courses/settings/__init__.py:82 msgid "Blog post list" msgstr "Liste des articles" -#: apps/courses/settings/__init__.py:41 +#: apps/courses/settings/__init__.py:83 msgid "Blog post page" msgstr "Page d'article" -#: apps/courses/settings/__init__.py:42 +#: apps/courses/settings/__init__.py:84 msgid "Person page" msgstr "Page de personne" -#: apps/courses/settings/__init__.py:43 +#: apps/courses/settings/__init__.py:85 msgid "Person list" msgstr "Liste des personnes" -#: apps/courses/settings/__init__.py:44 +#: apps/courses/settings/__init__.py:86 msgid "Program page" msgstr "Page de parcours" -#: apps/courses/settings/__init__.py:45 +#: apps/courses/settings/__init__.py:87 msgid "Program list" msgstr "Liste des parcours" -#: apps/courses/settings/__init__.py:46 +#: apps/courses/settings/__init__.py:88 msgid "Search" msgstr "Recherche" -#: apps/courses/settings/__init__.py:47 +#: apps/courses/settings/__init__.py:89 msgid "List of child pages" msgstr "Liste des pages enfants" -#: apps/courses/settings/__init__.py:48 +#: apps/courses/settings/__init__.py:90 msgid "Homepage" msgstr "Page d'accueil" -#: apps/courses/settings/__init__.py:49 +#: apps/courses/settings/__init__.py:91 msgid "Single column" msgstr "Colonne unique" -#: apps/courses/settings/__init__.py:56 +#: apps/courses/settings/__init__.py:92 +msgid "Three columns: (33% | 33% | 33%)" +msgstr "Trois colonnes: (33% | 33% | 33%)" + +#: apps/courses/settings/__init__.py:93 +msgid "Two columns: (50% | 50%)" +msgstr "Deux colonnes: (50% | 50%)" + +#: apps/courses/settings/__init__.py:94 +msgid "Two columns: (25% | 75%)" +msgstr "Deux colonnes: (25% | 75%)" + +#: apps/courses/settings/__init__.py:95 +msgid "Two columns: (75% | 25%)" +msgstr "Deux colonnes: (75% | 25%)" + +#: apps/courses/settings/__init__.py:102 msgid "Footer" msgstr "Pied de page" -#: apps/courses/settings/__init__.py:61 +#: apps/courses/settings/__init__.py:107 msgid "Static headline" msgstr "Titre statique" -#: apps/courses/settings/__init__.py:68 apps/courses/settings/__init__.py:90 -#: apps/courses/settings/__init__.py:317 +#: apps/courses/settings/__init__.py:114 apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:138 apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:155 apps/courses/settings/__init__.py:162 +#: apps/courses/settings/__init__.py:371 msgid "Main content" msgstr "Contenu principal" -#: apps/courses/settings/__init__.py:120 apps/courses/settings/__init__.py:278 -#: apps/courses/settings/__init__.py:298 +#: apps/courses/settings/__init__.py:141 apps/courses/settings/__init__.py:151 +#: apps/courses/settings/__init__.py:158 apps/courses/settings/__init__.py:165 +msgid "Secondary content" +msgstr "Deuxième contenu" + +#: apps/courses/settings/__init__.py:144 +msgid "Third content" +msgstr "Troisième contenu" + +#: apps/courses/settings/__init__.py:169 apps/courses/settings/__init__.py:332 +#: apps/courses/settings/__init__.py:352 #: apps/courses/templates/courses/cms/blogpost_detail.html:108 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:10 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:41 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:76 -#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:9 -#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:8 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:10 +#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:9 #: apps/courses/templates/courses/cms/program_detail.html:40 msgid "Cover" msgstr "Couverture" -#: apps/courses/settings/__init__.py:125 +#: apps/courses/settings/__init__.py:174 msgid "Catch phrase" msgstr "Slogan" -#: apps/courses/settings/__init__.py:130 +#: apps/courses/settings/__init__.py:179 msgid "Teaser" msgstr "Accroche" -#: apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:184 msgid "About the course" msgstr "À propos du cours" -#: apps/courses/settings/__init__.py:140 +#: apps/courses/settings/__init__.py:189 msgid "What you will learn" msgstr "Ce que vous apprendrez" -#: apps/courses/settings/__init__.py:144 +#: apps/courses/settings/__init__.py:193 msgid "Format" msgstr "Format" -#: apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:197 msgid "Prerequisites" msgstr "Prérequis" -#: apps/courses/settings/__init__.py:152 +#: apps/courses/settings/__init__.py:201 msgid "Team" msgstr "Équipe" -#: apps/courses/settings/__init__.py:156 +#: apps/courses/settings/__init__.py:205 msgid "Plan" msgstr "Plan" -#: apps/courses/settings/__init__.py:161 +#: apps/courses/settings/__init__.py:210 msgid "Complementary information" msgstr "Informations complémentaires" -#: apps/courses/settings/__init__.py:173 -#: apps/courses/templates/courses/cms/course_detail.html:464 +#: apps/courses/settings/__init__.py:222 +#: apps/courses/templates/courses/cms/course_detail.html:526 #: apps/courses/templates/courses/cms/fragment_course_relations.html:47 msgid "License for the course content" msgstr "Licence pour le contenu du cours" -#: apps/courses/settings/__init__.py:178 -#: apps/courses/templates/courses/cms/course_detail.html:475 +#: apps/courses/settings/__init__.py:227 +#: apps/courses/templates/courses/cms/course_detail.html:537 #: apps/courses/templates/courses/cms/fragment_course_relations.html:56 msgid "License for the content created by course participants" msgstr "Licence pour le contenu créé par les participants du cours" -#: apps/courses/settings/__init__.py:183 apps/courses/settings/__init__.py:211 -#: apps/courses/settings/__init__.py:242 apps/courses/settings/__init__.py:274 +#: apps/courses/settings/__init__.py:232 apps/courses/settings/__init__.py:260 +#: apps/courses/settings/__init__.py:296 apps/courses/settings/__init__.py:328 msgid "Categories" msgstr "Catégories" -#: apps/courses/settings/__init__.py:187 apps/courses/settings/__init__.py:231 +#: apps/courses/settings/__init__.py:236 apps/courses/settings/__init__.py:285 msgid "Icon" msgstr "Icône" -#: apps/courses/settings/__init__.py:192 apps/courses/settings/__init__.py:264 +#: apps/courses/settings/__init__.py:241 apps/courses/settings/__init__.py:318 #: apps/courses/templates/courses/cms/fragment_course_relations.html:27 #: apps/courses/templates/courses/cms/person_detail.html:112 #: apps/search/defaults.py:115 msgid "Organizations" msgstr "Institutions" -#: apps/courses/settings/__init__.py:196 +#: apps/courses/settings/__init__.py:245 msgid "Assessment and Certification" msgstr "Évaluation et Attestation" -#: apps/courses/settings/__init__.py:201 apps/courses/settings/__init__.py:221 +#: apps/courses/settings/__init__.py:250 apps/courses/settings/__init__.py:275 #: apps/courses/templates/courses/cms/category_detail.html:35 msgid "Banner" msgstr "Bannière" -#: apps/courses/settings/__init__.py:206 apps/courses/settings/__init__.py:226 +#: apps/courses/settings/__init__.py:255 apps/courses/settings/__init__.py:280 #: apps/courses/templates/courses/cms/category_detail.html:53 -#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:40 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:41 msgid "Logo" msgstr "Logo" -#: apps/courses/settings/__init__.py:215 apps/courses/settings/__init__.py:236 -#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:35 +#: apps/courses/settings/__init__.py:264 apps/courses/settings/__init__.py:290 msgid "Description" msgstr "Description" -#: apps/courses/settings/__init__.py:246 +#: apps/courses/settings/__init__.py:269 apps/courses/settings/__init__.py:337 +#: apps/courses/settings/__init__.py:357 +#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:46 +msgid "Excerpt" +msgstr "Extrait" + +#: apps/courses/settings/__init__.py:300 msgid "Portrait" msgstr "Portrait" -#: apps/courses/settings/__init__.py:251 +#: apps/courses/settings/__init__.py:305 msgid "Bio" msgstr "Bio" -#: apps/courses/settings/__init__.py:256 +#: apps/courses/settings/__init__.py:310 msgid "Main Content" msgstr "Contenu principal" -#: apps/courses/settings/__init__.py:269 +#: apps/courses/settings/__init__.py:323 msgid "Author" msgstr "Auteur" -#: apps/courses/settings/__init__.py:283 apps/courses/settings/__init__.py:303 -msgid "Excerpt" -msgstr "Extrait" - -#: apps/courses/settings/__init__.py:288 apps/courses/settings/__init__.py:308 +#: apps/courses/settings/__init__.py:342 apps/courses/settings/__init__.py:362 msgid "Body" msgstr "Corps" -#: apps/courses/settings/__init__.py:292 +#: apps/courses/settings/__init__.py:346 msgid "Headline" msgstr "Titre" -#: apps/courses/settings/__init__.py:313 +#: apps/courses/settings/__init__.py:367 #: apps/courses/templates/courses/cms/person_detail.html:129 msgid "Courses" msgstr "Cours" -#: apps/courses/settings/__init__.py:439 +#: apps/courses/settings/__init__.py:493 msgid "Button caesura" msgstr "Bouton caesura" -#: apps/courses/settings/__init__.py:441 +#: apps/courses/settings/__init__.py:495 msgid "Full width" msgstr "Pleine largeur" @@ -1120,6 +1160,7 @@ msgid "blog post cover image" msgstr "image de couverture de billet de blog" #: apps/courses/templates/courses/cms/blogpost_detail.html:138 +#: apps/courses/templates/courses/cms/organization_detail.html:102 #: apps/courses/templates/courses/cms/program_detail.html:60 msgid "No excerpt content" msgstr "Aucun extrait de contenu" @@ -1150,7 +1191,7 @@ msgid "Sub categories" msgstr "Sous-catégories" #: apps/courses/templates/courses/cms/category_detail.html:118 -#: apps/courses/templates/courses/cms/organization_detail.html:106 +#: apps/courses/templates/courses/cms/organization_detail.html:120 #: apps/courses/templates/courses/cms/program_detail.html:78 msgid "Related courses" msgstr "Cours offerts" @@ -1190,12 +1231,12 @@ msgid "Related blogposts pagination" msgstr "Pagination des billets de blog liés" #: apps/courses/templates/courses/cms/category_detail.html:188 -#: apps/courses/templates/courses/cms/organization_detail.html:132 +#: apps/courses/templates/courses/cms/organization_detail.html:146 msgid "Related persons" msgstr "Personnes liées" #: apps/courses/templates/courses/cms/category_detail.html:193 -#: apps/courses/templates/courses/cms/organization_detail.html:139 +#: apps/courses/templates/courses/cms/organization_detail.html:153 msgid "Related persons pagination" msgstr "Pagination des personnes liées" @@ -1203,33 +1244,38 @@ msgstr "Pagination des personnes liées" msgid "No categories" msgstr "Pas de catégories" -#: apps/courses/templates/courses/cms/course_detail.html:58 -#: apps/courses/templates/courses/cms/organization_detail.html:87 -#: apps/courses/templates/courses/cms/person_detail.html:47 -msgid "No associated categories" -msgstr "Aucune catégorie associée" +#: apps/courses/templates/courses/cms/course_detail.html:6 +#, python-format +msgid "%(course_title)s - Course" +msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:72 +#: apps/courses/templates/courses/cms/course_detail.html:59 msgid "Ref. " msgstr "Réf. " -#: apps/courses/templates/courses/cms/course_detail.html:88 +#: apps/courses/templates/courses/cms/course_detail.html:73 +#: apps/courses/templates/courses/cms/organization_detail.html:91 +#: apps/courses/templates/courses/cms/person_detail.html:47 +msgid "No associated categories" +msgstr "Aucune catégorie associée" + +#: apps/courses/templates/courses/cms/course_detail.html:94 msgid "Duration:" msgstr "Durée :" -#: apps/courses/templates/courses/cms/course_detail.html:97 +#: apps/courses/templates/courses/cms/course_detail.html:103 msgid "Effort:" msgstr "Effort :" -#: apps/courses/templates/courses/cms/course_detail.html:106 +#: apps/courses/templates/courses/cms/course_detail.html:112 msgid "Pace:" msgstr "Rythme:" -#: apps/courses/templates/courses/cms/course_detail.html:116 +#: apps/courses/templates/courses/cms/course_detail.html:122 msgid "Enter here a introduction of your course." msgstr "Entrez une introduction pour votre cours." -#: apps/courses/templates/courses/cms/course_detail.html:124 +#: apps/courses/templates/courses/cms/course_detail.html:130 #, python-format msgid "\n" " %(count)s already enrolled!\n" @@ -1238,16 +1284,28 @@ msgstr "\n" " %(count)s déjà inscrits!\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:136 +#: apps/courses/templates/courses/cms/course_detail.html:142 msgid "Add a teaser video or add a cover image below and it will be used as teaser image as well." msgstr "Ajouter une vidéo de teasing ou une image de couverture ci-dessous, celle-ci sera également utilisée comme image de teasing." -#: apps/courses/templates/courses/cms/course_detail.html:148 -#: apps/courses/templates/courses/cms/course_detail.html:226 +#: apps/courses/templates/courses/cms/course_detail.html:154 +#: apps/courses/templates/courses/cms/course_detail.html:255 msgid "course cover image" msgstr "image de couverture du cours" -#: apps/courses/templates/courses/cms/course_detail.html:198 +#: apps/courses/templates/courses/cms/course_detail.html:182 +msgid "No open course runs" +msgstr "Aucun cours ouvert" + +#: apps/courses/templates/courses/cms/course_detail.html:192 +msgid "course runs are currently open for this course" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:196 +msgid "Choose now" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:227 #, python-format msgid "\n" " Archived on %(creation_date)s\n" @@ -1256,98 +1314,107 @@ msgstr "\n" " Archivé le %(creation_date)s\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:202 +#: apps/courses/templates/courses/cms/course_detail.html:231 msgid "Go to current version" msgstr "Accédez à la version actuelle" -#: apps/courses/templates/courses/cms/course_detail.html:213 +#: apps/courses/templates/courses/cms/course_detail.html:242 msgid "Glimpse cover" msgstr "Image de l'aperçu" -#: apps/courses/templates/courses/cms/course_detail.html:215 +#: apps/courses/templates/courses/cms/course_detail.html:244 msgid "Add an image for course cover on its glimpse." msgstr "Ajouter une image pour la couverture du cours sur son aperçu." -#: apps/courses/templates/courses/cms/course_detail.html:239 +#: apps/courses/templates/courses/cms/course_detail.html:268 msgctxt "course_detail__title" msgid "What you will learn" msgstr "Ce que vous apprendrez" -#: apps/courses/templates/courses/cms/course_detail.html:240 +#: apps/courses/templates/courses/cms/course_detail.html:269 msgid "At the end of this course, you will be able to:" msgstr "À la fin de ce cours, vous pourrez :" -#: apps/courses/templates/courses/cms/course_detail.html:249 +#: apps/courses/templates/courses/cms/course_detail.html:278 msgctxt "course_detail__title" msgid "Description" msgstr "Description" -#: apps/courses/templates/courses/cms/course_detail.html:260 +#: apps/courses/templates/courses/cms/course_detail.html:289 msgctxt "course_detail__title" msgid "Format" msgstr "Format" -#: apps/courses/templates/courses/cms/course_detail.html:262 +#: apps/courses/templates/courses/cms/course_detail.html:291 msgid "How is the course structured?" msgstr "Quelle est la structure du cours ?" -#: apps/courses/templates/courses/cms/course_detail.html:271 +#: apps/courses/templates/courses/cms/course_detail.html:300 msgctxt "course_detail__title" msgid "Prerequisites" msgstr "Prérequis" -#: apps/courses/templates/courses/cms/course_detail.html:274 +#: apps/courses/templates/courses/cms/course_detail.html:303 msgid "What are the prerequisites to follow this course?" msgstr "Quels sont les prérequis pour suivre ce cours ?" -#: apps/courses/templates/courses/cms/course_detail.html:284 +#: apps/courses/templates/courses/cms/course_detail.html:313 msgctxt "course_detail__title" msgid "Assessment and certification" msgstr "Évaluation et attestation" -#: apps/courses/templates/courses/cms/course_detail.html:287 +#: apps/courses/templates/courses/cms/course_detail.html:316 msgid "How is progress evaluated and/or certified?" msgstr "Comment les étudiants sont ils évalués ou attestés ?" -#: apps/courses/templates/courses/cms/course_detail.html:299 +#: apps/courses/templates/courses/cms/course_detail.html:328 msgctxt "course_detail__title" msgid "Course plan" msgstr "Plan de cours" -#: apps/courses/templates/courses/cms/course_detail.html:302 +#: apps/courses/templates/courses/cms/course_detail.html:331 msgid "Enter here the detailed course plan." msgstr "Détaillez ici le plan du cours." -#: apps/courses/templates/courses/cms/course_detail.html:317 +#: apps/courses/templates/courses/cms/course_detail.html:349 +msgctxt "course_detail__title" +msgid "Other course runs" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:351 msgctxt "course_detail__title" msgid "Course runs" msgstr "Sessions de cours" -#: apps/courses/templates/courses/cms/course_detail.html:323 -msgid "No open course runs" -msgstr "Aucun cours ouvert" +#: apps/courses/templates/courses/cms/course_detail.html:361 +msgid "No course runs" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:363 +msgid "No other course runs" +msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:332 +#: apps/courses/templates/courses/cms/course_detail.html:387 msgctxt "Course runs to be scheduled (plural)" msgid "To be scheduled" msgstr "À planifier" -#: apps/courses/templates/courses/cms/course_detail.html:343 +#: apps/courses/templates/courses/cms/course_detail.html:400 msgctxt "Upcoming course runs (plural)" msgid "Upcoming" msgstr "À venir" -#: apps/courses/templates/courses/cms/course_detail.html:354 +#: apps/courses/templates/courses/cms/course_detail.html:413 msgctxt "Ongoing course runs (plural)" msgid "Ongoing" msgstr "En cours" -#: apps/courses/templates/courses/cms/course_detail.html:365 +#: apps/courses/templates/courses/cms/course_detail.html:426 msgctxt "Archived course runs (plural)" msgid "Archived" msgstr "Archivées" -#: apps/courses/templates/courses/cms/course_detail.html:389 +#: apps/courses/templates/courses/cms/course_detail.html:451 msgid "\n" " This course is part of a program\n" " " @@ -1361,41 +1428,51 @@ msgstr[1] "\n" " Ce cours fait partie de ces séries\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:415 +#: apps/courses/templates/courses/cms/course_detail.html:477 msgctxt "course_detail__title" msgid "Course team" msgstr "Équipe du cours" -#: apps/courses/templates/courses/cms/course_detail.html:420 +#: apps/courses/templates/courses/cms/course_detail.html:482 #: apps/courses/templates/courses/cms/fragment_course_relations.html:13 msgid "Who are the teachers in the course team?" msgstr "Qui sont les enseignants de l’équipe pédagogique ?" -#: apps/courses/templates/courses/cms/course_detail.html:434 +#: apps/courses/templates/courses/cms/course_detail.html:496 msgctxt "course_detail__title" msgid "Organizations" msgstr "Institutions" -#: apps/courses/templates/courses/cms/course_detail.html:439 +#: apps/courses/templates/courses/cms/course_detail.html:501 #: apps/courses/templates/courses/cms/fragment_course_relations.html:32 msgid "What are the organizations publishing this course?" msgstr "Quelles sont les institutions publiant ce cours?" -#: apps/courses/templates/courses/cms/course_detail.html:460 +#: apps/courses/templates/courses/cms/course_detail.html:522 msgctxt "course_detail__title" msgid "License" msgstr "Licence" -#: apps/courses/templates/courses/cms/course_detail.html:467 +#: apps/courses/templates/courses/cms/course_detail.html:529 #: apps/courses/templates/courses/cms/fragment_course_relations.html:50 msgid "What is the license for the course content?" msgstr "Quelle est la licence pour le contenu du cours ?" -#: apps/courses/templates/courses/cms/course_detail.html:478 +#: apps/courses/templates/courses/cms/course_detail.html:540 #: apps/courses/templates/courses/cms/fragment_course_relations.html:59 msgid "What is the license for the content created by course participants?" msgstr "Quelle est la licence pour le contenu créé par les participants du cours ?" +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:63 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:64 +msgid "Course code" +msgstr "" + +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:83 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:84 +msgid "Course date" +msgstr "" + #: apps/courses/templates/courses/cms/fragment_course_relations.html:8 msgid "Course team" msgstr "Équipe pédagogique" @@ -1458,28 +1535,26 @@ msgstr "\n" " Si ce dont vous avez besoin est une page %(model)s , vous devez la créer via l'assistant et choisir \"Nouvelle page %(model)s \".\n" " " -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:16 -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:39 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:8 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:9 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:17 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:40 msgid "Main organization" msgstr "Institution principale" -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:29 -msgid "main organization logo" -msgstr "logo de l'organisation principale" - -#: apps/courses/templates/courses/cms/organization_detail.html:50 +#: apps/courses/templates/courses/cms/organization_detail.html:54 msgid "organization banner" msgstr "bannière d'institution" -#: apps/courses/templates/courses/cms/organization_detail.html:71 +#: apps/courses/templates/courses/cms/organization_detail.html:75 msgid "organization logo" msgstr "logo de l'institution" -#: apps/courses/templates/courses/cms/organization_detail.html:111 +#: apps/courses/templates/courses/cms/organization_detail.html:125 msgid "Related courses pagination" msgstr "Pagination des cours liés" -#: apps/courses/templates/courses/cms/organization_detail.html:114 +#: apps/courses/templates/courses/cms/organization_detail.html:128 #, python-format msgid "\n" " See all courses related to %(organization_title)s\n" @@ -1536,7 +1611,7 @@ msgstr "Aucun parcours associé" #. Translators: delay indicates when the course will start as a duration. #. In english the string will be "The course will start in 3 days" -#: apps/courses/templatetags/extra_tags.py:262 +#: apps/courses/templatetags/extra_tags.py:278 msgid "The course will start {delay:s}" msgstr "Le cours commencera {delay:s}" diff --git a/src/richie/locale/fr_FR/LC_MESSAGES/django.mo b/src/richie/locale/fr_FR/LC_MESSAGES/django.mo index bebf9070df..98138eefbc 100644 Binary files a/src/richie/locale/fr_FR/LC_MESSAGES/django.mo and b/src/richie/locale/fr_FR/LC_MESSAGES/django.mo differ diff --git a/src/richie/locale/fr_FR/LC_MESSAGES/django.po b/src/richie/locale/fr_FR/LC_MESSAGES/django.po index 2161fbaa8f..6ec51da21b 100644 --- a/src/richie/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/richie/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: richie\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-17 18:04+0000\n" -"PO-Revision-Date: 2022-02-18 09:49\n" +"POT-Creation-Date: 2022-04-01 15:01+0000\n" +"PO-Revision-Date: 2022-04-04 07:53\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -99,29 +99,28 @@ msgstr "Votre navigateur ne supporte pas ce format de vidéo." msgid "You are here:" msgstr "Vous êtes ici:" -#: apps/core/templates/richie/base.html:74 +#: apps/core/templates/richie/base.html:78 msgid "Skip to main content" msgstr "Passer au contenu principal" -#: apps/core/templates/richie/base.html:86 +#: apps/core/templates/richie/base.html:90 msgid "Go to homepage" msgstr "Retour à la page d'accueil" -#: apps/core/templates/richie/base.html:111 -#: apps/courses/templates/courses/cms/course_detail.html:172 +#: apps/core/templates/richie/base.html:115 msgid "Contact us" msgstr "Nous contacter" -#: apps/core/templates/richie/base.html:143 +#: apps/core/templates/richie/base.html:147 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:32 msgid "Learn more" msgstr "En savoir plus" -#: apps/core/templates/richie/base.html:157 +#: apps/core/templates/richie/base.html:161 msgid "Life-changing learning!" msgstr "Apprendre pour changer de vie!" -#: apps/core/templates/richie/base.html:171 +#: apps/core/templates/richie/base.html:175 msgid "Powered by" msgstr "Propulsé par" @@ -178,23 +177,31 @@ msgstr "Actualités Richie: %(title)s" msgid "Richie news: %(title)s %(url)s" msgstr "Actualités Richie: %(title)s %(url)s" -#: apps/core/templates/social-networks/blogpost-badges.html:10 -#: apps/core/templates/social-networks/course-badges.html:10 +#: apps/core/templates/social-networks/blogpost-badges.html:11 +#: apps/core/templates/social-networks/blogpost-badges.html:12 +#: apps/core/templates/social-networks/course-badges.html:11 +#: apps/core/templates/social-networks/course-badges.html:12 msgid "Share on Facebook" msgstr "Partager sur Facebook" -#: apps/core/templates/social-networks/blogpost-badges.html:20 -#: apps/core/templates/social-networks/course-badges.html:20 +#: apps/core/templates/social-networks/blogpost-badges.html:21 +#: apps/core/templates/social-networks/blogpost-badges.html:22 +#: apps/core/templates/social-networks/course-badges.html:21 +#: apps/core/templates/social-networks/course-badges.html:22 msgid "Share on Twitter" msgstr "Partager sur Twitter" -#: apps/core/templates/social-networks/blogpost-badges.html:30 -#: apps/core/templates/social-networks/course-badges.html:30 +#: apps/core/templates/social-networks/blogpost-badges.html:31 +#: apps/core/templates/social-networks/blogpost-badges.html:32 +#: apps/core/templates/social-networks/course-badges.html:31 +#: apps/core/templates/social-networks/course-badges.html:32 msgid "Share on Linkedin" msgstr "Partager sur Linkedin" -#: apps/core/templates/social-networks/blogpost-badges.html:40 -#: apps/core/templates/social-networks/course-badges.html:40 +#: apps/core/templates/social-networks/blogpost-badges.html:41 +#: apps/core/templates/social-networks/blogpost-badges.html:42 +#: apps/core/templates/social-networks/course-badges.html:41 +#: apps/core/templates/social-networks/course-badges.html:42 msgid "Share by Email" msgstr "Partager par Email" @@ -207,22 +214,20 @@ msgstr "Suivre un cours en ligne avec Richie" msgid "I just enrolled to the course \"%(title)s\" on Richie: %(url)s" msgstr "Je viens de m'inscrire au cours \"%(title)s\" sur Richie: %(url)s" +#: apps/core/templates/social-networks/footer-badges.html:7 #: apps/core/templates/social-networks/footer-badges.html:8 msgid "Facebook" msgstr "Facebook" -#: apps/core/templates/social-networks/footer-badges.html:16 +#: apps/core/templates/social-networks/footer-badges.html:17 +#: apps/core/templates/social-networks/footer-badges.html:18 msgid "Twitter page" msgstr "Page Twitter" -#: apps/core/templates/social-networks/footer-badges.html:19 -msgid "Twitter" -msgstr "Twitter" - #: apps/core/templates/social-networks/footer-badges.html:27 -#: apps/core/templates/social-networks/footer-badges.html:30 -msgid "Linkedin" -msgstr "Linkedin" +#: apps/core/templates/social-networks/footer-badges.html:28 +msgid "Linkedin page" +msgstr "Page LinkedIn" #: apps/core/views/error.py:7 msgid "Bad request" @@ -269,6 +274,8 @@ msgid "See filer folder" msgstr "Voir le dossier du classeur" #: apps/courses/cms_plugins.py:27 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:55 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:56 msgid "Organization" msgstr "Établissement" @@ -277,6 +284,7 @@ msgid "Organization by Category" msgstr "Établissement par catégorie" #: apps/courses/cms_plugins.py:87 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:29 msgid "Category" msgstr "Catégorie" @@ -534,13 +542,13 @@ msgid "blog posts" msgstr "articles de blog" #: apps/courses/models/blog.py:91 apps/courses/models/category.py:154 -#: apps/courses/models/course.py:981 apps/courses/models/organization.py:199 +#: apps/courses/models/course.py:983 apps/courses/models/organization.py:199 #: apps/courses/models/organization.py:233 msgid "variant" msgstr "variante" #: apps/courses/models/blog.py:94 apps/courses/models/category.py:157 -#: apps/courses/models/course.py:984 apps/courses/models/organization.py:202 +#: apps/courses/models/course.py:986 apps/courses/models/organization.py:202 #: apps/courses/models/organization.py:236 msgid "Optional glimpse variant for a custom look." msgstr "Variante d'aperçu optionnelle pour un affichage personnalisé." @@ -733,55 +741,59 @@ msgstr "Traduction de session de cours" msgid "Course run translations" msgstr "Traductions de sessions de cours" -#: apps/courses/models/course.py:991 +#: apps/courses/models/course.py:932 +msgid "Empty title" +msgstr "Titre manquant" + +#: apps/courses/models/course.py:993 msgid "course plugin" msgstr "plugin de cours" -#: apps/courses/models/course.py:992 +#: apps/courses/models/course.py:994 msgid "course plugins" msgstr "plugins de cours" -#: apps/courses/models/course.py:1009 plugins/large_banner/models.py:38 +#: apps/courses/models/course.py:1011 plugins/large_banner/models.py:38 msgid "logo" msgstr "logo" -#: apps/courses/models/course.py:1011 +#: apps/courses/models/course.py:1013 msgid "url" msgstr "url" -#: apps/courses/models/course.py:1014 apps/courses/models/course.py:1038 +#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1040 msgid "name" msgstr "nom" -#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1039 +#: apps/courses/models/course.py:1018 apps/courses/models/course.py:1041 msgid "content" msgstr "contenu" -#: apps/courses/models/course.py:1021 +#: apps/courses/models/course.py:1023 msgid "licence" msgstr "license" -#: apps/courses/models/course.py:1022 +#: apps/courses/models/course.py:1024 msgid "licences" msgstr "licences" -#: apps/courses/models/course.py:1044 +#: apps/courses/models/course.py:1046 msgid "Licence translation" msgstr "Traduction des Licences" -#: apps/courses/models/course.py:1045 +#: apps/courses/models/course.py:1047 msgid "licence translations" msgstr "traductions de licences" -#: apps/courses/models/course.py:1059 +#: apps/courses/models/course.py:1061 msgid "description" msgstr "description" -#: apps/courses/models/course.py:1063 +#: apps/courses/models/course.py:1065 msgid "licence plugin" msgstr "plugin de licence" -#: apps/courses/models/course.py:1064 +#: apps/courses/models/course.py:1066 msgid "licence plugins" msgstr "plugins de licences" @@ -893,213 +905,241 @@ msgstr "rôles de page" msgid "{:s} | {:s}" msgstr "{:s} | {:s}" -#: apps/courses/settings/__init__.py:35 +#: apps/courses/settings/__init__.py:77 msgid "Course page" msgstr "Page de cours" -#: apps/courses/settings/__init__.py:36 +#: apps/courses/settings/__init__.py:78 msgid "Organization list" msgstr "Liste des établissements" -#: apps/courses/settings/__init__.py:37 +#: apps/courses/settings/__init__.py:79 msgid "Organization page" msgstr "Page d'établissement" -#: apps/courses/settings/__init__.py:38 +#: apps/courses/settings/__init__.py:80 msgid "Category list" msgstr "Liste des Catégories" -#: apps/courses/settings/__init__.py:39 +#: apps/courses/settings/__init__.py:81 msgid "Category page" msgstr "Page de catégorie" -#: apps/courses/settings/__init__.py:40 +#: apps/courses/settings/__init__.py:82 msgid "Blog post list" msgstr "Liste de billet de blog" -#: apps/courses/settings/__init__.py:41 +#: apps/courses/settings/__init__.py:83 msgid "Blog post page" msgstr "Page de billet de blog" -#: apps/courses/settings/__init__.py:42 +#: apps/courses/settings/__init__.py:84 msgid "Person page" msgstr "Page de personne" -#: apps/courses/settings/__init__.py:43 +#: apps/courses/settings/__init__.py:85 msgid "Person list" msgstr "Liste des personnes" -#: apps/courses/settings/__init__.py:44 +#: apps/courses/settings/__init__.py:86 msgid "Program page" msgstr "Page de parcours" -#: apps/courses/settings/__init__.py:45 +#: apps/courses/settings/__init__.py:87 msgid "Program list" msgstr "Liste des parcours" -#: apps/courses/settings/__init__.py:46 +#: apps/courses/settings/__init__.py:88 msgid "Search" msgstr "Recherche" -#: apps/courses/settings/__init__.py:47 +#: apps/courses/settings/__init__.py:89 msgid "List of child pages" msgstr "Liste des pages enfants" -#: apps/courses/settings/__init__.py:48 +#: apps/courses/settings/__init__.py:90 msgid "Homepage" msgstr "Page d'accueil" -#: apps/courses/settings/__init__.py:49 +#: apps/courses/settings/__init__.py:91 msgid "Single column" msgstr "Colonne unique" -#: apps/courses/settings/__init__.py:56 +#: apps/courses/settings/__init__.py:92 +msgid "Three columns: (33% | 33% | 33%)" +msgstr "Trois colonnes: (33% | 33% | 33%)" + +#: apps/courses/settings/__init__.py:93 +msgid "Two columns: (50% | 50%)" +msgstr "Deux colonnes: (50% | 50%)" + +#: apps/courses/settings/__init__.py:94 +msgid "Two columns: (25% | 75%)" +msgstr "Deux colonnes: (25% | 75%)" + +#: apps/courses/settings/__init__.py:95 +msgid "Two columns: (75% | 25%)" +msgstr "Deux colonnes: (75% | 25%)" + +#: apps/courses/settings/__init__.py:102 msgid "Footer" msgstr "Pied de page" -#: apps/courses/settings/__init__.py:61 +#: apps/courses/settings/__init__.py:107 msgid "Static headline" msgstr "Entête statique" -#: apps/courses/settings/__init__.py:68 apps/courses/settings/__init__.py:90 -#: apps/courses/settings/__init__.py:317 +#: apps/courses/settings/__init__.py:114 apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:138 apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:155 apps/courses/settings/__init__.py:162 +#: apps/courses/settings/__init__.py:371 msgid "Main content" msgstr "Contenu principal" -#: apps/courses/settings/__init__.py:120 apps/courses/settings/__init__.py:278 -#: apps/courses/settings/__init__.py:298 +#: apps/courses/settings/__init__.py:141 apps/courses/settings/__init__.py:151 +#: apps/courses/settings/__init__.py:158 apps/courses/settings/__init__.py:165 +msgid "Secondary content" +msgstr "Deuxième contenu" + +#: apps/courses/settings/__init__.py:144 +msgid "Third content" +msgstr "Troisième contenu" + +#: apps/courses/settings/__init__.py:169 apps/courses/settings/__init__.py:332 +#: apps/courses/settings/__init__.py:352 #: apps/courses/templates/courses/cms/blogpost_detail.html:108 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:10 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:41 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:76 -#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:9 -#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:8 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:10 +#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:9 #: apps/courses/templates/courses/cms/program_detail.html:40 msgid "Cover" msgstr "Couverture" -#: apps/courses/settings/__init__.py:125 +#: apps/courses/settings/__init__.py:174 msgid "Catch phrase" msgstr "Slogan" -#: apps/courses/settings/__init__.py:130 +#: apps/courses/settings/__init__.py:179 msgid "Teaser" msgstr "Accroche" -#: apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:184 msgid "About the course" msgstr "À propos du cours" -#: apps/courses/settings/__init__.py:140 +#: apps/courses/settings/__init__.py:189 msgid "What you will learn" msgstr "Ce que vous allez apprendre" -#: apps/courses/settings/__init__.py:144 +#: apps/courses/settings/__init__.py:193 msgid "Format" msgstr "Format" -#: apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:197 msgid "Prerequisites" msgstr "Prérequis" -#: apps/courses/settings/__init__.py:152 +#: apps/courses/settings/__init__.py:201 msgid "Team" msgstr "Équipe" -#: apps/courses/settings/__init__.py:156 +#: apps/courses/settings/__init__.py:205 msgid "Plan" msgstr "Plan" -#: apps/courses/settings/__init__.py:161 +#: apps/courses/settings/__init__.py:210 msgid "Complementary information" msgstr "Informations complémentaires" -#: apps/courses/settings/__init__.py:173 -#: apps/courses/templates/courses/cms/course_detail.html:464 +#: apps/courses/settings/__init__.py:222 +#: apps/courses/templates/courses/cms/course_detail.html:526 #: apps/courses/templates/courses/cms/fragment_course_relations.html:47 msgid "License for the course content" msgstr "Licence pour le contenu du cours" -#: apps/courses/settings/__init__.py:178 -#: apps/courses/templates/courses/cms/course_detail.html:475 +#: apps/courses/settings/__init__.py:227 +#: apps/courses/templates/courses/cms/course_detail.html:537 #: apps/courses/templates/courses/cms/fragment_course_relations.html:56 msgid "License for the content created by course participants" msgstr "Licence pour le contenu créé par les participants du cours" -#: apps/courses/settings/__init__.py:183 apps/courses/settings/__init__.py:211 -#: apps/courses/settings/__init__.py:242 apps/courses/settings/__init__.py:274 +#: apps/courses/settings/__init__.py:232 apps/courses/settings/__init__.py:260 +#: apps/courses/settings/__init__.py:296 apps/courses/settings/__init__.py:328 msgid "Categories" msgstr "Catégories" -#: apps/courses/settings/__init__.py:187 apps/courses/settings/__init__.py:231 +#: apps/courses/settings/__init__.py:236 apps/courses/settings/__init__.py:285 msgid "Icon" msgstr "Icône" -#: apps/courses/settings/__init__.py:192 apps/courses/settings/__init__.py:264 +#: apps/courses/settings/__init__.py:241 apps/courses/settings/__init__.py:318 #: apps/courses/templates/courses/cms/fragment_course_relations.html:27 #: apps/courses/templates/courses/cms/person_detail.html:112 #: apps/search/defaults.py:115 msgid "Organizations" msgstr "Établissements" -#: apps/courses/settings/__init__.py:196 +#: apps/courses/settings/__init__.py:245 msgid "Assessment and Certification" msgstr "Évaluation et certification" -#: apps/courses/settings/__init__.py:201 apps/courses/settings/__init__.py:221 +#: apps/courses/settings/__init__.py:250 apps/courses/settings/__init__.py:275 #: apps/courses/templates/courses/cms/category_detail.html:35 msgid "Banner" msgstr "Bannière" -#: apps/courses/settings/__init__.py:206 apps/courses/settings/__init__.py:226 +#: apps/courses/settings/__init__.py:255 apps/courses/settings/__init__.py:280 #: apps/courses/templates/courses/cms/category_detail.html:53 -#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:40 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:41 msgid "Logo" msgstr "Logo" -#: apps/courses/settings/__init__.py:215 apps/courses/settings/__init__.py:236 -#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:35 +#: apps/courses/settings/__init__.py:264 apps/courses/settings/__init__.py:290 msgid "Description" msgstr "Description" -#: apps/courses/settings/__init__.py:246 +#: apps/courses/settings/__init__.py:269 apps/courses/settings/__init__.py:337 +#: apps/courses/settings/__init__.py:357 +#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:46 +msgid "Excerpt" +msgstr "Extrait" + +#: apps/courses/settings/__init__.py:300 msgid "Portrait" msgstr "Portrait" -#: apps/courses/settings/__init__.py:251 +#: apps/courses/settings/__init__.py:305 msgid "Bio" msgstr "Bio" -#: apps/courses/settings/__init__.py:256 +#: apps/courses/settings/__init__.py:310 msgid "Main Content" msgstr "Contenu principal" -#: apps/courses/settings/__init__.py:269 +#: apps/courses/settings/__init__.py:323 msgid "Author" msgstr "Auteur" -#: apps/courses/settings/__init__.py:283 apps/courses/settings/__init__.py:303 -msgid "Excerpt" -msgstr "Extrait" - -#: apps/courses/settings/__init__.py:288 apps/courses/settings/__init__.py:308 +#: apps/courses/settings/__init__.py:342 apps/courses/settings/__init__.py:362 msgid "Body" msgstr "Corps" -#: apps/courses/settings/__init__.py:292 +#: apps/courses/settings/__init__.py:346 msgid "Headline" msgstr "Entête" -#: apps/courses/settings/__init__.py:313 +#: apps/courses/settings/__init__.py:367 #: apps/courses/templates/courses/cms/person_detail.html:129 msgid "Courses" msgstr "Cours" -#: apps/courses/settings/__init__.py:439 +#: apps/courses/settings/__init__.py:493 msgid "Button caesura" msgstr "Bouton caesura" -#: apps/courses/settings/__init__.py:441 +#: apps/courses/settings/__init__.py:495 msgid "Full width" msgstr "Pleine largeur" @@ -1120,6 +1160,7 @@ msgid "blog post cover image" msgstr "image de couverture de billet de blog" #: apps/courses/templates/courses/cms/blogpost_detail.html:138 +#: apps/courses/templates/courses/cms/organization_detail.html:102 #: apps/courses/templates/courses/cms/program_detail.html:60 msgid "No excerpt content" msgstr "Pas d'extrait" @@ -1150,7 +1191,7 @@ msgid "Sub categories" msgstr "Sous-catégories" #: apps/courses/templates/courses/cms/category_detail.html:118 -#: apps/courses/templates/courses/cms/organization_detail.html:106 +#: apps/courses/templates/courses/cms/organization_detail.html:120 #: apps/courses/templates/courses/cms/program_detail.html:78 msgid "Related courses" msgstr "Cours associés" @@ -1190,12 +1231,12 @@ msgid "Related blogposts pagination" msgstr "Pagination des articles de blog liés" #: apps/courses/templates/courses/cms/category_detail.html:188 -#: apps/courses/templates/courses/cms/organization_detail.html:132 +#: apps/courses/templates/courses/cms/organization_detail.html:146 msgid "Related persons" msgstr "Personnes liées" #: apps/courses/templates/courses/cms/category_detail.html:193 -#: apps/courses/templates/courses/cms/organization_detail.html:139 +#: apps/courses/templates/courses/cms/organization_detail.html:153 msgid "Related persons pagination" msgstr "Pagination des personnes liées" @@ -1203,33 +1244,38 @@ msgstr "Pagination des personnes liées" msgid "No categories" msgstr "Pas de catégories" -#: apps/courses/templates/courses/cms/course_detail.html:58 -#: apps/courses/templates/courses/cms/organization_detail.html:87 -#: apps/courses/templates/courses/cms/person_detail.html:47 -msgid "No associated categories" -msgstr "Aucune catégorie associée" +#: apps/courses/templates/courses/cms/course_detail.html:6 +#, python-format +msgid "%(course_title)s - Course" +msgstr "%(course_title)s - Cours" -#: apps/courses/templates/courses/cms/course_detail.html:72 +#: apps/courses/templates/courses/cms/course_detail.html:59 msgid "Ref. " msgstr "Réf. " -#: apps/courses/templates/courses/cms/course_detail.html:88 +#: apps/courses/templates/courses/cms/course_detail.html:73 +#: apps/courses/templates/courses/cms/organization_detail.html:91 +#: apps/courses/templates/courses/cms/person_detail.html:47 +msgid "No associated categories" +msgstr "Aucune catégorie associée" + +#: apps/courses/templates/courses/cms/course_detail.html:94 msgid "Duration:" msgstr "Durée :" -#: apps/courses/templates/courses/cms/course_detail.html:97 +#: apps/courses/templates/courses/cms/course_detail.html:103 msgid "Effort:" msgstr "Effort :" -#: apps/courses/templates/courses/cms/course_detail.html:106 +#: apps/courses/templates/courses/cms/course_detail.html:112 msgid "Pace:" msgstr "Rythme:" -#: apps/courses/templates/courses/cms/course_detail.html:116 +#: apps/courses/templates/courses/cms/course_detail.html:122 msgid "Enter here a introduction of your course." msgstr "Saisissez ici une courte description du cours." -#: apps/courses/templates/courses/cms/course_detail.html:124 +#: apps/courses/templates/courses/cms/course_detail.html:130 #, python-format msgid "\n" " %(count)s already enrolled!\n" @@ -1238,16 +1284,28 @@ msgstr "\n" " %(count)s déjà inscrits !\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:136 +#: apps/courses/templates/courses/cms/course_detail.html:142 msgid "Add a teaser video or add a cover image below and it will be used as teaser image as well." msgstr "Ajouter une vidéo de teasing ou une image de couverture ci-dessous, celle-ci sera également utilisée comme image de teasing." -#: apps/courses/templates/courses/cms/course_detail.html:148 -#: apps/courses/templates/courses/cms/course_detail.html:226 +#: apps/courses/templates/courses/cms/course_detail.html:154 +#: apps/courses/templates/courses/cms/course_detail.html:255 msgid "course cover image" msgstr "image de couverture du cours" -#: apps/courses/templates/courses/cms/course_detail.html:198 +#: apps/courses/templates/courses/cms/course_detail.html:182 +msgid "No open course runs" +msgstr "Aucune session ouverte" + +#: apps/courses/templates/courses/cms/course_detail.html:192 +msgid "course runs are currently open for this course" +msgstr "sessions sont actuellement ouvertes pour ce cours" + +#: apps/courses/templates/courses/cms/course_detail.html:196 +msgid "Choose now" +msgstr "Choisir maintenant" + +#: apps/courses/templates/courses/cms/course_detail.html:227 #, python-format msgid "\n" " Archived on %(creation_date)s\n" @@ -1256,98 +1314,107 @@ msgstr "\n" " Archivé le %(creation_date)s\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:202 +#: apps/courses/templates/courses/cms/course_detail.html:231 msgid "Go to current version" msgstr "Accédez à la version actuelle" -#: apps/courses/templates/courses/cms/course_detail.html:213 +#: apps/courses/templates/courses/cms/course_detail.html:242 msgid "Glimpse cover" msgstr "Image d'aperçu" -#: apps/courses/templates/courses/cms/course_detail.html:215 +#: apps/courses/templates/courses/cms/course_detail.html:244 msgid "Add an image for course cover on its glimpse." msgstr "Ajouter une image pour la couverture du cours sur son aperçu." -#: apps/courses/templates/courses/cms/course_detail.html:239 +#: apps/courses/templates/courses/cms/course_detail.html:268 msgctxt "course_detail__title" msgid "What you will learn" msgstr "Ce que vous allez apprendre" -#: apps/courses/templates/courses/cms/course_detail.html:240 +#: apps/courses/templates/courses/cms/course_detail.html:269 msgid "At the end of this course, you will be able to:" msgstr "À la fin de ce cours, vous serez capable de :" -#: apps/courses/templates/courses/cms/course_detail.html:249 +#: apps/courses/templates/courses/cms/course_detail.html:278 msgctxt "course_detail__title" msgid "Description" msgstr "Description" -#: apps/courses/templates/courses/cms/course_detail.html:260 +#: apps/courses/templates/courses/cms/course_detail.html:289 msgctxt "course_detail__title" msgid "Format" msgstr "Format" -#: apps/courses/templates/courses/cms/course_detail.html:262 +#: apps/courses/templates/courses/cms/course_detail.html:291 msgid "How is the course structured?" msgstr "Quelle est la structure du cours ?" -#: apps/courses/templates/courses/cms/course_detail.html:271 +#: apps/courses/templates/courses/cms/course_detail.html:300 msgctxt "course_detail__title" msgid "Prerequisites" msgstr "Prérequis" -#: apps/courses/templates/courses/cms/course_detail.html:274 +#: apps/courses/templates/courses/cms/course_detail.html:303 msgid "What are the prerequisites to follow this course?" msgstr "Quels sont les prérequis pour suivre ce cours ?" -#: apps/courses/templates/courses/cms/course_detail.html:284 +#: apps/courses/templates/courses/cms/course_detail.html:313 msgctxt "course_detail__title" msgid "Assessment and certification" msgstr "Evaluation et Certification" -#: apps/courses/templates/courses/cms/course_detail.html:287 +#: apps/courses/templates/courses/cms/course_detail.html:316 msgid "How is progress evaluated and/or certified?" msgstr "Comment les étudiants sont ils évalués et/ou certifiés ?" -#: apps/courses/templates/courses/cms/course_detail.html:299 +#: apps/courses/templates/courses/cms/course_detail.html:328 msgctxt "course_detail__title" msgid "Course plan" msgstr "Plan de cours" -#: apps/courses/templates/courses/cms/course_detail.html:302 +#: apps/courses/templates/courses/cms/course_detail.html:331 msgid "Enter here the detailed course plan." msgstr "Détaillez ici le plan du cours." -#: apps/courses/templates/courses/cms/course_detail.html:317 +#: apps/courses/templates/courses/cms/course_detail.html:349 +msgctxt "course_detail__title" +msgid "Other course runs" +msgstr "Autres sessions" + +#: apps/courses/templates/courses/cms/course_detail.html:351 msgctxt "course_detail__title" msgid "Course runs" msgstr "Sessions de cours" -#: apps/courses/templates/courses/cms/course_detail.html:323 -msgid "No open course runs" -msgstr "Aucune session ouverte" +#: apps/courses/templates/courses/cms/course_detail.html:361 +msgid "No course runs" +msgstr "Aucune session" -#: apps/courses/templates/courses/cms/course_detail.html:332 +#: apps/courses/templates/courses/cms/course_detail.html:363 +msgid "No other course runs" +msgstr "Aucune autre session" + +#: apps/courses/templates/courses/cms/course_detail.html:387 msgctxt "Course runs to be scheduled (plural)" msgid "To be scheduled" msgstr "A programmer" -#: apps/courses/templates/courses/cms/course_detail.html:343 +#: apps/courses/templates/courses/cms/course_detail.html:400 msgctxt "Upcoming course runs (plural)" msgid "Upcoming" msgstr "A venir" -#: apps/courses/templates/courses/cms/course_detail.html:354 +#: apps/courses/templates/courses/cms/course_detail.html:413 msgctxt "Ongoing course runs (plural)" msgid "Ongoing" msgstr "En cours" -#: apps/courses/templates/courses/cms/course_detail.html:365 +#: apps/courses/templates/courses/cms/course_detail.html:426 msgctxt "Archived course runs (plural)" msgid "Archived" msgstr "Archivées" -#: apps/courses/templates/courses/cms/course_detail.html:389 +#: apps/courses/templates/courses/cms/course_detail.html:451 msgid "\n" " This course is part of a program\n" " " @@ -1361,41 +1428,51 @@ msgstr[1] "\n" " Ce cours fait partie de parcours\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:415 +#: apps/courses/templates/courses/cms/course_detail.html:477 msgctxt "course_detail__title" msgid "Course team" msgstr "Équipe pédagogique" -#: apps/courses/templates/courses/cms/course_detail.html:420 +#: apps/courses/templates/courses/cms/course_detail.html:482 #: apps/courses/templates/courses/cms/fragment_course_relations.html:13 msgid "Who are the teachers in the course team?" msgstr "Qui sont les enseignants de l’équipe pédagogique ?" -#: apps/courses/templates/courses/cms/course_detail.html:434 +#: apps/courses/templates/courses/cms/course_detail.html:496 msgctxt "course_detail__title" msgid "Organizations" msgstr "Établissements" -#: apps/courses/templates/courses/cms/course_detail.html:439 +#: apps/courses/templates/courses/cms/course_detail.html:501 #: apps/courses/templates/courses/cms/fragment_course_relations.html:32 msgid "What are the organizations publishing this course?" msgstr "Qui sont les établissements publiant ce cours ?" -#: apps/courses/templates/courses/cms/course_detail.html:460 +#: apps/courses/templates/courses/cms/course_detail.html:522 msgctxt "course_detail__title" msgid "License" msgstr "Licence" -#: apps/courses/templates/courses/cms/course_detail.html:467 +#: apps/courses/templates/courses/cms/course_detail.html:529 #: apps/courses/templates/courses/cms/fragment_course_relations.html:50 msgid "What is the license for the course content?" msgstr "Quelle est la licence pour le contenu du cours ?" -#: apps/courses/templates/courses/cms/course_detail.html:478 +#: apps/courses/templates/courses/cms/course_detail.html:540 #: apps/courses/templates/courses/cms/fragment_course_relations.html:59 msgid "What is the license for the content created by course participants?" msgstr "Quelle est la licence pour le contenu créé par les participants du cours ?" +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:63 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:64 +msgid "Course code" +msgstr "Code du cours" + +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:83 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:84 +msgid "Course date" +msgstr "Date du cours" + #: apps/courses/templates/courses/cms/fragment_course_relations.html:8 msgid "Course team" msgstr "Équipe pédagogique" @@ -1458,28 +1535,26 @@ msgstr "\n" " Si ce dont vous avez besoin est une page %(model)s , vous devez la créer via l'assistant et choisir \"Nouvelle page %(model)s \".\n" " " -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:16 -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:39 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:8 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:9 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:17 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:40 msgid "Main organization" msgstr "Etablissement principal" -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:29 -msgid "main organization logo" -msgstr "logo d'établissement principal" - -#: apps/courses/templates/courses/cms/organization_detail.html:50 +#: apps/courses/templates/courses/cms/organization_detail.html:54 msgid "organization banner" msgstr "bannière d'établissement" -#: apps/courses/templates/courses/cms/organization_detail.html:71 +#: apps/courses/templates/courses/cms/organization_detail.html:75 msgid "organization logo" msgstr "logo d'établissement" -#: apps/courses/templates/courses/cms/organization_detail.html:111 +#: apps/courses/templates/courses/cms/organization_detail.html:125 msgid "Related courses pagination" msgstr "Pagination des cours liés" -#: apps/courses/templates/courses/cms/organization_detail.html:114 +#: apps/courses/templates/courses/cms/organization_detail.html:128 #, python-format msgid "\n" " See all courses related to %(organization_title)s\n" @@ -1536,7 +1611,7 @@ msgstr "Aucun parcours associé" #. Translators: delay indicates when the course will start as a duration. #. In english the string will be "The course will start in 3 days" -#: apps/courses/templatetags/extra_tags.py:262 +#: apps/courses/templatetags/extra_tags.py:278 msgid "The course will start {delay:s}" msgstr "Le cours commencera {delay:s}" diff --git a/src/richie/locale/pt_PT/LC_MESSAGES/django.mo b/src/richie/locale/pt_PT/LC_MESSAGES/django.mo index 06ed270d78..ac2a8381a4 100644 Binary files a/src/richie/locale/pt_PT/LC_MESSAGES/django.mo and b/src/richie/locale/pt_PT/LC_MESSAGES/django.mo differ diff --git a/src/richie/locale/pt_PT/LC_MESSAGES/django.po b/src/richie/locale/pt_PT/LC_MESSAGES/django.po index 7e75d28182..d8ee4f8425 100644 --- a/src/richie/locale/pt_PT/LC_MESSAGES/django.po +++ b/src/richie/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: richie\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-17 18:04+0000\n" -"PO-Revision-Date: 2022-02-18 09:49\n" +"POT-Creation-Date: 2022-04-01 15:01+0000\n" +"PO-Revision-Date: 2022-04-04 07:53\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -99,29 +99,28 @@ msgstr "O seu navegador não suporta este formato de vídeo." msgid "You are here:" msgstr "Você está aqui:" -#: apps/core/templates/richie/base.html:74 +#: apps/core/templates/richie/base.html:78 msgid "Skip to main content" msgstr "Saltar para o conteúdo" -#: apps/core/templates/richie/base.html:86 +#: apps/core/templates/richie/base.html:90 msgid "Go to homepage" msgstr "Ir para a página inicial" -#: apps/core/templates/richie/base.html:111 -#: apps/courses/templates/courses/cms/course_detail.html:172 +#: apps/core/templates/richie/base.html:115 msgid "Contact us" msgstr "Contacte-nos" -#: apps/core/templates/richie/base.html:143 +#: apps/core/templates/richie/base.html:147 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:32 msgid "Learn more" msgstr "Saiba mais" -#: apps/core/templates/richie/base.html:157 +#: apps/core/templates/richie/base.html:161 msgid "Life-changing learning!" msgstr "Aprendizagem que muda a sua vida!" -#: apps/core/templates/richie/base.html:171 +#: apps/core/templates/richie/base.html:175 msgid "Powered by" msgstr "Desenvolvido por" @@ -178,23 +177,31 @@ msgstr "Notícias do Richie: %(title)s" msgid "Richie news: %(title)s %(url)s" msgstr "Notícias de Richie: %(title)s %(url)s" -#: apps/core/templates/social-networks/blogpost-badges.html:10 -#: apps/core/templates/social-networks/course-badges.html:10 +#: apps/core/templates/social-networks/blogpost-badges.html:11 +#: apps/core/templates/social-networks/blogpost-badges.html:12 +#: apps/core/templates/social-networks/course-badges.html:11 +#: apps/core/templates/social-networks/course-badges.html:12 msgid "Share on Facebook" msgstr "Partilhar no Facebook" -#: apps/core/templates/social-networks/blogpost-badges.html:20 -#: apps/core/templates/social-networks/course-badges.html:20 +#: apps/core/templates/social-networks/blogpost-badges.html:21 +#: apps/core/templates/social-networks/blogpost-badges.html:22 +#: apps/core/templates/social-networks/course-badges.html:21 +#: apps/core/templates/social-networks/course-badges.html:22 msgid "Share on Twitter" msgstr "Partilhar no Twitter" -#: apps/core/templates/social-networks/blogpost-badges.html:30 -#: apps/core/templates/social-networks/course-badges.html:30 +#: apps/core/templates/social-networks/blogpost-badges.html:31 +#: apps/core/templates/social-networks/blogpost-badges.html:32 +#: apps/core/templates/social-networks/course-badges.html:31 +#: apps/core/templates/social-networks/course-badges.html:32 msgid "Share on Linkedin" msgstr "Partilhar no Linkedin" -#: apps/core/templates/social-networks/blogpost-badges.html:40 -#: apps/core/templates/social-networks/course-badges.html:40 +#: apps/core/templates/social-networks/blogpost-badges.html:41 +#: apps/core/templates/social-networks/blogpost-badges.html:42 +#: apps/core/templates/social-networks/course-badges.html:41 +#: apps/core/templates/social-networks/course-badges.html:42 msgid "Share by Email" msgstr "Partilhar por e-mail" @@ -207,22 +214,20 @@ msgstr "Siga um curso online com o Richie" msgid "I just enrolled to the course \"%(title)s\" on Richie: %(url)s" msgstr "Eu acabei de me inscrever no curso \"%(title)s\" no Richie: %(url)s" +#: apps/core/templates/social-networks/footer-badges.html:7 #: apps/core/templates/social-networks/footer-badges.html:8 msgid "Facebook" msgstr "Facebook" -#: apps/core/templates/social-networks/footer-badges.html:16 +#: apps/core/templates/social-networks/footer-badges.html:17 +#: apps/core/templates/social-networks/footer-badges.html:18 msgid "Twitter page" msgstr "Página do Twitter" -#: apps/core/templates/social-networks/footer-badges.html:19 -msgid "Twitter" -msgstr "Twitter" - #: apps/core/templates/social-networks/footer-badges.html:27 -#: apps/core/templates/social-networks/footer-badges.html:30 -msgid "Linkedin" -msgstr "Linkedin" +#: apps/core/templates/social-networks/footer-badges.html:28 +msgid "Linkedin page" +msgstr "Página do Linkedin" #: apps/core/views/error.py:7 msgid "Bad request" @@ -269,6 +274,8 @@ msgid "See filer folder" msgstr "Ver pasta do arquivador" #: apps/courses/cms_plugins.py:27 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:55 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:56 msgid "Organization" msgstr "Organização" @@ -277,6 +284,7 @@ msgid "Organization by Category" msgstr "Organização por Categoria" #: apps/courses/cms_plugins.py:87 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:29 msgid "Category" msgstr "Categoria" @@ -534,13 +542,13 @@ msgid "blog posts" msgstr "publicações" #: apps/courses/models/blog.py:91 apps/courses/models/category.py:154 -#: apps/courses/models/course.py:981 apps/courses/models/organization.py:199 +#: apps/courses/models/course.py:983 apps/courses/models/organization.py:199 #: apps/courses/models/organization.py:233 msgid "variant" msgstr "variante" #: apps/courses/models/blog.py:94 apps/courses/models/category.py:157 -#: apps/courses/models/course.py:984 apps/courses/models/organization.py:202 +#: apps/courses/models/course.py:986 apps/courses/models/organization.py:202 #: apps/courses/models/organization.py:236 msgid "Optional glimpse variant for a custom look." msgstr "Variante de visualização personalizada." @@ -733,55 +741,59 @@ msgstr "Tradução da edição do curso" msgid "Course run translations" msgstr "Traduções da edição do curso" -#: apps/courses/models/course.py:991 +#: apps/courses/models/course.py:932 +msgid "Empty title" +msgstr "Título em branco" + +#: apps/courses/models/course.py:993 msgid "course plugin" msgstr "plugin do curso" -#: apps/courses/models/course.py:992 +#: apps/courses/models/course.py:994 msgid "course plugins" msgstr "plugins do curso" -#: apps/courses/models/course.py:1009 plugins/large_banner/models.py:38 +#: apps/courses/models/course.py:1011 plugins/large_banner/models.py:38 msgid "logo" msgstr "logotipo" -#: apps/courses/models/course.py:1011 +#: apps/courses/models/course.py:1013 msgid "url" msgstr "url" -#: apps/courses/models/course.py:1014 apps/courses/models/course.py:1038 +#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1040 msgid "name" msgstr "nome" -#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1039 +#: apps/courses/models/course.py:1018 apps/courses/models/course.py:1041 msgid "content" msgstr "conteúdo" -#: apps/courses/models/course.py:1021 +#: apps/courses/models/course.py:1023 msgid "licence" msgstr "licença" -#: apps/courses/models/course.py:1022 +#: apps/courses/models/course.py:1024 msgid "licences" msgstr "licenças" -#: apps/courses/models/course.py:1044 +#: apps/courses/models/course.py:1046 msgid "Licence translation" msgstr "Tradução da licença" -#: apps/courses/models/course.py:1045 +#: apps/courses/models/course.py:1047 msgid "licence translations" msgstr "traduções da licença" -#: apps/courses/models/course.py:1059 +#: apps/courses/models/course.py:1061 msgid "description" msgstr "descrição" -#: apps/courses/models/course.py:1063 +#: apps/courses/models/course.py:1065 msgid "licence plugin" msgstr "plugin da licença" -#: apps/courses/models/course.py:1064 +#: apps/courses/models/course.py:1066 msgid "licence plugins" msgstr "plugins de licença" @@ -893,213 +905,241 @@ msgstr "papéis de página" msgid "{:s} | {:s}" msgstr "{:s} | {:s}" -#: apps/courses/settings/__init__.py:35 +#: apps/courses/settings/__init__.py:77 msgid "Course page" msgstr "Página do curso" -#: apps/courses/settings/__init__.py:36 +#: apps/courses/settings/__init__.py:78 msgid "Organization list" msgstr "Lista de organizações" -#: apps/courses/settings/__init__.py:37 +#: apps/courses/settings/__init__.py:79 msgid "Organization page" msgstr "Página da organização" -#: apps/courses/settings/__init__.py:38 +#: apps/courses/settings/__init__.py:80 msgid "Category list" msgstr "Lista de categorias" -#: apps/courses/settings/__init__.py:39 +#: apps/courses/settings/__init__.py:81 msgid "Category page" msgstr "Página de categorias" -#: apps/courses/settings/__init__.py:40 +#: apps/courses/settings/__init__.py:82 msgid "Blog post list" msgstr "Lista de publicações" -#: apps/courses/settings/__init__.py:41 +#: apps/courses/settings/__init__.py:83 msgid "Blog post page" msgstr "Página de publicação" -#: apps/courses/settings/__init__.py:42 +#: apps/courses/settings/__init__.py:84 msgid "Person page" msgstr "Página da pessoa" -#: apps/courses/settings/__init__.py:43 +#: apps/courses/settings/__init__.py:85 msgid "Person list" msgstr "Lista de pessoas" -#: apps/courses/settings/__init__.py:44 +#: apps/courses/settings/__init__.py:86 msgid "Program page" msgstr "Página de programa" -#: apps/courses/settings/__init__.py:45 +#: apps/courses/settings/__init__.py:87 msgid "Program list" msgstr "Lista de programas" -#: apps/courses/settings/__init__.py:46 +#: apps/courses/settings/__init__.py:88 msgid "Search" msgstr "Pesquisa" -#: apps/courses/settings/__init__.py:47 +#: apps/courses/settings/__init__.py:89 msgid "List of child pages" msgstr "Lista de páginas filhas" -#: apps/courses/settings/__init__.py:48 +#: apps/courses/settings/__init__.py:90 msgid "Homepage" msgstr "Página inicial" -#: apps/courses/settings/__init__.py:49 +#: apps/courses/settings/__init__.py:91 msgid "Single column" msgstr "Coluna única" -#: apps/courses/settings/__init__.py:56 +#: apps/courses/settings/__init__.py:92 +msgid "Three columns: (33% | 33% | 33%)" +msgstr "Três colunas: (33% | 33% | 33%)" + +#: apps/courses/settings/__init__.py:93 +msgid "Two columns: (50% | 50%)" +msgstr "Duas colunas: (50% | 50%)" + +#: apps/courses/settings/__init__.py:94 +msgid "Two columns: (25% | 75%)" +msgstr "Duas colunas: (25% | 75%)" + +#: apps/courses/settings/__init__.py:95 +msgid "Two columns: (75% | 25%)" +msgstr "Duas colunas: (75% | 25%)" + +#: apps/courses/settings/__init__.py:102 msgid "Footer" msgstr "Rodapé" -#: apps/courses/settings/__init__.py:61 +#: apps/courses/settings/__init__.py:107 msgid "Static headline" msgstr "Cabeçalho estático" -#: apps/courses/settings/__init__.py:68 apps/courses/settings/__init__.py:90 -#: apps/courses/settings/__init__.py:317 +#: apps/courses/settings/__init__.py:114 apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:138 apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:155 apps/courses/settings/__init__.py:162 +#: apps/courses/settings/__init__.py:371 msgid "Main content" msgstr "Conteúdo principal" -#: apps/courses/settings/__init__.py:120 apps/courses/settings/__init__.py:278 -#: apps/courses/settings/__init__.py:298 +#: apps/courses/settings/__init__.py:141 apps/courses/settings/__init__.py:151 +#: apps/courses/settings/__init__.py:158 apps/courses/settings/__init__.py:165 +msgid "Secondary content" +msgstr "Conteúdo secundário" + +#: apps/courses/settings/__init__.py:144 +msgid "Third content" +msgstr "Conteúdo terciário" + +#: apps/courses/settings/__init__.py:169 apps/courses/settings/__init__.py:332 +#: apps/courses/settings/__init__.py:352 #: apps/courses/templates/courses/cms/blogpost_detail.html:108 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:10 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:41 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:76 -#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:9 -#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:8 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:10 +#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:9 #: apps/courses/templates/courses/cms/program_detail.html:40 msgid "Cover" msgstr "Capa" -#: apps/courses/settings/__init__.py:125 +#: apps/courses/settings/__init__.py:174 msgid "Catch phrase" msgstr "Frase-chave" -#: apps/courses/settings/__init__.py:130 +#: apps/courses/settings/__init__.py:179 msgid "Teaser" msgstr "Teaser" -#: apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:184 msgid "About the course" msgstr "Sobre o curso" -#: apps/courses/settings/__init__.py:140 +#: apps/courses/settings/__init__.py:189 msgid "What you will learn" msgstr "O que vai aprender" -#: apps/courses/settings/__init__.py:144 +#: apps/courses/settings/__init__.py:193 msgid "Format" msgstr "Formato" -#: apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:197 msgid "Prerequisites" msgstr "Pré-requisitos" -#: apps/courses/settings/__init__.py:152 +#: apps/courses/settings/__init__.py:201 msgid "Team" msgstr "Equipa" -#: apps/courses/settings/__init__.py:156 +#: apps/courses/settings/__init__.py:205 msgid "Plan" msgstr "Plano" -#: apps/courses/settings/__init__.py:161 +#: apps/courses/settings/__init__.py:210 msgid "Complementary information" msgstr "Informação complementar" -#: apps/courses/settings/__init__.py:173 -#: apps/courses/templates/courses/cms/course_detail.html:464 +#: apps/courses/settings/__init__.py:222 +#: apps/courses/templates/courses/cms/course_detail.html:526 #: apps/courses/templates/courses/cms/fragment_course_relations.html:47 msgid "License for the course content" msgstr "Licença para o conteúdo do curso" -#: apps/courses/settings/__init__.py:178 -#: apps/courses/templates/courses/cms/course_detail.html:475 +#: apps/courses/settings/__init__.py:227 +#: apps/courses/templates/courses/cms/course_detail.html:537 #: apps/courses/templates/courses/cms/fragment_course_relations.html:56 msgid "License for the content created by course participants" msgstr "Licença para o conteúdo criado pelos participantes do curso" -#: apps/courses/settings/__init__.py:183 apps/courses/settings/__init__.py:211 -#: apps/courses/settings/__init__.py:242 apps/courses/settings/__init__.py:274 +#: apps/courses/settings/__init__.py:232 apps/courses/settings/__init__.py:260 +#: apps/courses/settings/__init__.py:296 apps/courses/settings/__init__.py:328 msgid "Categories" msgstr "Categorias" -#: apps/courses/settings/__init__.py:187 apps/courses/settings/__init__.py:231 +#: apps/courses/settings/__init__.py:236 apps/courses/settings/__init__.py:285 msgid "Icon" msgstr "Ícone" -#: apps/courses/settings/__init__.py:192 apps/courses/settings/__init__.py:264 +#: apps/courses/settings/__init__.py:241 apps/courses/settings/__init__.py:318 #: apps/courses/templates/courses/cms/fragment_course_relations.html:27 #: apps/courses/templates/courses/cms/person_detail.html:112 #: apps/search/defaults.py:115 msgid "Organizations" msgstr "Organizações" -#: apps/courses/settings/__init__.py:196 +#: apps/courses/settings/__init__.py:245 msgid "Assessment and Certification" msgstr "Avaliação e Certificação" -#: apps/courses/settings/__init__.py:201 apps/courses/settings/__init__.py:221 +#: apps/courses/settings/__init__.py:250 apps/courses/settings/__init__.py:275 #: apps/courses/templates/courses/cms/category_detail.html:35 msgid "Banner" msgstr "Banner" -#: apps/courses/settings/__init__.py:206 apps/courses/settings/__init__.py:226 +#: apps/courses/settings/__init__.py:255 apps/courses/settings/__init__.py:280 #: apps/courses/templates/courses/cms/category_detail.html:53 -#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:40 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:41 msgid "Logo" msgstr "Logo" -#: apps/courses/settings/__init__.py:215 apps/courses/settings/__init__.py:236 -#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:35 +#: apps/courses/settings/__init__.py:264 apps/courses/settings/__init__.py:290 msgid "Description" msgstr "Descrição" -#: apps/courses/settings/__init__.py:246 +#: apps/courses/settings/__init__.py:269 apps/courses/settings/__init__.py:337 +#: apps/courses/settings/__init__.py:357 +#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:46 +msgid "Excerpt" +msgstr "Excerto" + +#: apps/courses/settings/__init__.py:300 msgid "Portrait" msgstr "Retrato" -#: apps/courses/settings/__init__.py:251 +#: apps/courses/settings/__init__.py:305 msgid "Bio" msgstr "Bio" -#: apps/courses/settings/__init__.py:256 +#: apps/courses/settings/__init__.py:310 msgid "Main Content" msgstr "Conteúdo Principal" -#: apps/courses/settings/__init__.py:269 +#: apps/courses/settings/__init__.py:323 msgid "Author" msgstr "Autor" -#: apps/courses/settings/__init__.py:283 apps/courses/settings/__init__.py:303 -msgid "Excerpt" -msgstr "Excerto" - -#: apps/courses/settings/__init__.py:288 apps/courses/settings/__init__.py:308 +#: apps/courses/settings/__init__.py:342 apps/courses/settings/__init__.py:362 msgid "Body" msgstr "Conteúdo" -#: apps/courses/settings/__init__.py:292 +#: apps/courses/settings/__init__.py:346 msgid "Headline" msgstr "Título" -#: apps/courses/settings/__init__.py:313 +#: apps/courses/settings/__init__.py:367 #: apps/courses/templates/courses/cms/person_detail.html:129 msgid "Courses" msgstr "Cursos" -#: apps/courses/settings/__init__.py:439 +#: apps/courses/settings/__init__.py:493 msgid "Button caesura" msgstr "Botão de quebra de secção" -#: apps/courses/settings/__init__.py:441 +#: apps/courses/settings/__init__.py:495 msgid "Full width" msgstr "Largura total" @@ -1120,6 +1160,7 @@ msgid "blog post cover image" msgstr "imagem de capa da publicação" #: apps/courses/templates/courses/cms/blogpost_detail.html:138 +#: apps/courses/templates/courses/cms/organization_detail.html:102 #: apps/courses/templates/courses/cms/program_detail.html:60 msgid "No excerpt content" msgstr "Sem conteúdo no excerto" @@ -1150,7 +1191,7 @@ msgid "Sub categories" msgstr "Subcategorias" #: apps/courses/templates/courses/cms/category_detail.html:118 -#: apps/courses/templates/courses/cms/organization_detail.html:106 +#: apps/courses/templates/courses/cms/organization_detail.html:120 #: apps/courses/templates/courses/cms/program_detail.html:78 msgid "Related courses" msgstr "Cursos relacionados" @@ -1190,12 +1231,12 @@ msgid "Related blogposts pagination" msgstr "Página de posts de blog relacionados" #: apps/courses/templates/courses/cms/category_detail.html:188 -#: apps/courses/templates/courses/cms/organization_detail.html:132 +#: apps/courses/templates/courses/cms/organization_detail.html:146 msgid "Related persons" msgstr "Pessoas relacionadas" #: apps/courses/templates/courses/cms/category_detail.html:193 -#: apps/courses/templates/courses/cms/organization_detail.html:139 +#: apps/courses/templates/courses/cms/organization_detail.html:153 msgid "Related persons pagination" msgstr "Paginação de pessoas relacionadas" @@ -1203,33 +1244,38 @@ msgstr "Paginação de pessoas relacionadas" msgid "No categories" msgstr "Sem categorias" -#: apps/courses/templates/courses/cms/course_detail.html:58 -#: apps/courses/templates/courses/cms/organization_detail.html:87 -#: apps/courses/templates/courses/cms/person_detail.html:47 -msgid "No associated categories" -msgstr "Nenhuma categoria associada" +#: apps/courses/templates/courses/cms/course_detail.html:6 +#, python-format +msgid "%(course_title)s - Course" +msgstr "%(course_title)s - Curso" -#: apps/courses/templates/courses/cms/course_detail.html:72 +#: apps/courses/templates/courses/cms/course_detail.html:59 msgid "Ref. " msgstr "Cód. " -#: apps/courses/templates/courses/cms/course_detail.html:88 +#: apps/courses/templates/courses/cms/course_detail.html:73 +#: apps/courses/templates/courses/cms/organization_detail.html:91 +#: apps/courses/templates/courses/cms/person_detail.html:47 +msgid "No associated categories" +msgstr "Nenhuma categoria associada" + +#: apps/courses/templates/courses/cms/course_detail.html:94 msgid "Duration:" msgstr "Duração:" -#: apps/courses/templates/courses/cms/course_detail.html:97 +#: apps/courses/templates/courses/cms/course_detail.html:103 msgid "Effort:" msgstr "Esforço:" -#: apps/courses/templates/courses/cms/course_detail.html:106 +#: apps/courses/templates/courses/cms/course_detail.html:112 msgid "Pace:" msgstr "Ritmo:" -#: apps/courses/templates/courses/cms/course_detail.html:116 +#: apps/courses/templates/courses/cms/course_detail.html:122 msgid "Enter here a introduction of your course." msgstr "Escreva um texto introdutório para o curso." -#: apps/courses/templates/courses/cms/course_detail.html:124 +#: apps/courses/templates/courses/cms/course_detail.html:130 #, python-format msgid "\n" " %(count)s already enrolled!\n" @@ -1238,16 +1284,28 @@ msgstr "\n" " %(count)s já inscritos!\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:136 +#: apps/courses/templates/courses/cms/course_detail.html:142 msgid "Add a teaser video or add a cover image below and it will be used as teaser image as well." msgstr "Adicione um vídeo ou uma imagem de capa abaixo e será utilizada como imagem de teaser." -#: apps/courses/templates/courses/cms/course_detail.html:148 -#: apps/courses/templates/courses/cms/course_detail.html:226 +#: apps/courses/templates/courses/cms/course_detail.html:154 +#: apps/courses/templates/courses/cms/course_detail.html:255 msgid "course cover image" msgstr "imagem de capa do curso" -#: apps/courses/templates/courses/cms/course_detail.html:198 +#: apps/courses/templates/courses/cms/course_detail.html:182 +msgid "No open course runs" +msgstr "Sem edições disponíveis" + +#: apps/courses/templates/courses/cms/course_detail.html:192 +msgid "course runs are currently open for this course" +msgstr "estão disponíveis edições deste curso" + +#: apps/courses/templates/courses/cms/course_detail.html:196 +msgid "Choose now" +msgstr "Selecionar agora" + +#: apps/courses/templates/courses/cms/course_detail.html:227 #, python-format msgid "\n" " Archived on %(creation_date)s\n" @@ -1256,98 +1314,107 @@ msgstr "\n" " Arquivado em %(creation_date)s\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:202 +#: apps/courses/templates/courses/cms/course_detail.html:231 msgid "Go to current version" msgstr "Ir para a versão atual" -#: apps/courses/templates/courses/cms/course_detail.html:213 +#: apps/courses/templates/courses/cms/course_detail.html:242 msgid "Glimpse cover" msgstr "Capa da perspectiva" -#: apps/courses/templates/courses/cms/course_detail.html:215 +#: apps/courses/templates/courses/cms/course_detail.html:244 msgid "Add an image for course cover on its glimpse." msgstr "Adicione uma imagem para a capa do curso na perspectiva." -#: apps/courses/templates/courses/cms/course_detail.html:239 +#: apps/courses/templates/courses/cms/course_detail.html:268 msgctxt "course_detail__title" msgid "What you will learn" msgstr "O que vai aprender" -#: apps/courses/templates/courses/cms/course_detail.html:240 +#: apps/courses/templates/courses/cms/course_detail.html:269 msgid "At the end of this course, you will be able to:" msgstr "No final deste curso, será capaz de:" -#: apps/courses/templates/courses/cms/course_detail.html:249 +#: apps/courses/templates/courses/cms/course_detail.html:278 msgctxt "course_detail__title" msgid "Description" msgstr "Descrição" -#: apps/courses/templates/courses/cms/course_detail.html:260 +#: apps/courses/templates/courses/cms/course_detail.html:289 msgctxt "course_detail__title" msgid "Format" msgstr "Formato" -#: apps/courses/templates/courses/cms/course_detail.html:262 +#: apps/courses/templates/courses/cms/course_detail.html:291 msgid "How is the course structured?" msgstr "Como está estruturado o curso?" -#: apps/courses/templates/courses/cms/course_detail.html:271 +#: apps/courses/templates/courses/cms/course_detail.html:300 msgctxt "course_detail__title" msgid "Prerequisites" msgstr "Pré-requisitos" -#: apps/courses/templates/courses/cms/course_detail.html:274 +#: apps/courses/templates/courses/cms/course_detail.html:303 msgid "What are the prerequisites to follow this course?" msgstr "Quais são os pré-requisitos para este curso?" -#: apps/courses/templates/courses/cms/course_detail.html:284 +#: apps/courses/templates/courses/cms/course_detail.html:313 msgctxt "course_detail__title" msgid "Assessment and certification" msgstr "Avaliação e certificação" -#: apps/courses/templates/courses/cms/course_detail.html:287 +#: apps/courses/templates/courses/cms/course_detail.html:316 msgid "How is progress evaluated and/or certified?" msgstr "Como é avaliado o progresso e/ou certificado?" -#: apps/courses/templates/courses/cms/course_detail.html:299 +#: apps/courses/templates/courses/cms/course_detail.html:328 msgctxt "course_detail__title" msgid "Course plan" msgstr "Plano de curso" -#: apps/courses/templates/courses/cms/course_detail.html:302 +#: apps/courses/templates/courses/cms/course_detail.html:331 msgid "Enter here the detailed course plan." msgstr "Descreva aqui o plano detalhado do curso." -#: apps/courses/templates/courses/cms/course_detail.html:317 +#: apps/courses/templates/courses/cms/course_detail.html:349 +msgctxt "course_detail__title" +msgid "Other course runs" +msgstr "Outras edições do curso" + +#: apps/courses/templates/courses/cms/course_detail.html:351 msgctxt "course_detail__title" msgid "Course runs" msgstr "Edições do curso" -#: apps/courses/templates/courses/cms/course_detail.html:323 -msgid "No open course runs" +#: apps/courses/templates/courses/cms/course_detail.html:361 +msgid "No course runs" msgstr "Sem edições disponíveis" -#: apps/courses/templates/courses/cms/course_detail.html:332 +#: apps/courses/templates/courses/cms/course_detail.html:363 +msgid "No other course runs" +msgstr "Sem outras edições disponíveis" + +#: apps/courses/templates/courses/cms/course_detail.html:387 msgctxt "Course runs to be scheduled (plural)" msgid "To be scheduled" msgstr "A agendar" -#: apps/courses/templates/courses/cms/course_detail.html:343 +#: apps/courses/templates/courses/cms/course_detail.html:400 msgctxt "Upcoming course runs (plural)" msgid "Upcoming" msgstr "Brevemente" -#: apps/courses/templates/courses/cms/course_detail.html:354 +#: apps/courses/templates/courses/cms/course_detail.html:413 msgctxt "Ongoing course runs (plural)" msgid "Ongoing" msgstr "A decorrer" -#: apps/courses/templates/courses/cms/course_detail.html:365 +#: apps/courses/templates/courses/cms/course_detail.html:426 msgctxt "Archived course runs (plural)" msgid "Archived" msgstr "Arquivado" -#: apps/courses/templates/courses/cms/course_detail.html:389 +#: apps/courses/templates/courses/cms/course_detail.html:451 msgid "\n" " This course is part of a program\n" " " @@ -1361,41 +1428,51 @@ msgstr[1] "\n" " Este curso é parte dos programas\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:415 +#: apps/courses/templates/courses/cms/course_detail.html:477 msgctxt "course_detail__title" msgid "Course team" msgstr "Equipa do curso" -#: apps/courses/templates/courses/cms/course_detail.html:420 +#: apps/courses/templates/courses/cms/course_detail.html:482 #: apps/courses/templates/courses/cms/fragment_course_relations.html:13 msgid "Who are the teachers in the course team?" msgstr "Quem são os professores da equipa do curso?" -#: apps/courses/templates/courses/cms/course_detail.html:434 +#: apps/courses/templates/courses/cms/course_detail.html:496 msgctxt "course_detail__title" msgid "Organizations" msgstr "Organizações" -#: apps/courses/templates/courses/cms/course_detail.html:439 +#: apps/courses/templates/courses/cms/course_detail.html:501 #: apps/courses/templates/courses/cms/fragment_course_relations.html:32 msgid "What are the organizations publishing this course?" msgstr "Quem são as organizações responsáveis por este curso?" -#: apps/courses/templates/courses/cms/course_detail.html:460 +#: apps/courses/templates/courses/cms/course_detail.html:522 msgctxt "course_detail__title" msgid "License" msgstr "Licença" -#: apps/courses/templates/courses/cms/course_detail.html:467 +#: apps/courses/templates/courses/cms/course_detail.html:529 #: apps/courses/templates/courses/cms/fragment_course_relations.html:50 msgid "What is the license for the course content?" msgstr "Qual é a licença para o conteúdo do curso?" -#: apps/courses/templates/courses/cms/course_detail.html:478 +#: apps/courses/templates/courses/cms/course_detail.html:540 #: apps/courses/templates/courses/cms/fragment_course_relations.html:59 msgid "What is the license for the content created by course participants?" msgstr "Qual é a licença para o conteúdo criado pelos participantes do curso?" +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:63 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:64 +msgid "Course code" +msgstr "Código do curso" + +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:83 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:84 +msgid "Course date" +msgstr "Data do curso" + #: apps/courses/templates/courses/cms/fragment_course_relations.html:8 msgid "Course team" msgstr "Equipa do curso" @@ -1458,28 +1535,26 @@ msgstr "\n" " Se o que precisa é de uma página de %(model)s deve criá-la através do assistente, escolhendo \"Nova página %(model)s.\n" " " -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:16 -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:39 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:8 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:9 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:17 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:40 msgid "Main organization" msgstr "Organização principal" -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:29 -msgid "main organization logo" -msgstr "logotipo principal da organização" - -#: apps/courses/templates/courses/cms/organization_detail.html:50 +#: apps/courses/templates/courses/cms/organization_detail.html:54 msgid "organization banner" msgstr "banner da organização" -#: apps/courses/templates/courses/cms/organization_detail.html:71 +#: apps/courses/templates/courses/cms/organization_detail.html:75 msgid "organization logo" msgstr "logotipo da organização" -#: apps/courses/templates/courses/cms/organization_detail.html:111 +#: apps/courses/templates/courses/cms/organization_detail.html:125 msgid "Related courses pagination" msgstr "Paginação de cursos relacionados" -#: apps/courses/templates/courses/cms/organization_detail.html:114 +#: apps/courses/templates/courses/cms/organization_detail.html:128 #, python-format msgid "\n" " See all courses related to %(organization_title)s\n" @@ -1536,9 +1611,9 @@ msgstr "Sem programas associados" #. Translators: delay indicates when the course will start as a duration. #. In english the string will be "The course will start in 3 days" -#: apps/courses/templatetags/extra_tags.py:262 +#: apps/courses/templatetags/extra_tags.py:278 msgid "The course will start {delay:s}" -msgstr "O curso iniciará em {delay:s}" +msgstr "O curso iniciará {delay:s}" #: apps/demo/management/commands/create_demo_site.py:384 #, python-brace-format diff --git a/src/richie/locale/ru_RU/LC_MESSAGES/django.mo b/src/richie/locale/ru_RU/LC_MESSAGES/django.mo index 5efbc923f2..93976d30b9 100644 Binary files a/src/richie/locale/ru_RU/LC_MESSAGES/django.mo and b/src/richie/locale/ru_RU/LC_MESSAGES/django.mo differ diff --git a/src/richie/locale/ru_RU/LC_MESSAGES/django.po b/src/richie/locale/ru_RU/LC_MESSAGES/django.po index e1e8bc8932..6ccebfe501 100644 --- a/src/richie/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/richie/locale/ru_RU/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: richie\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-17 18:04+0000\n" -"PO-Revision-Date: 2022-02-18 09:49\n" +"POT-Creation-Date: 2022-04-01 15:01+0000\n" +"PO-Revision-Date: 2022-04-04 07:53\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -101,29 +101,28 @@ msgstr "Ваш браузер не поддерживает этот форма msgid "You are here:" msgstr "Вы находитесь здесь:" -#: apps/core/templates/richie/base.html:74 +#: apps/core/templates/richie/base.html:78 msgid "Skip to main content" msgstr "Перейти к основному содержимому" -#: apps/core/templates/richie/base.html:86 +#: apps/core/templates/richie/base.html:90 msgid "Go to homepage" msgstr "Вернуться на главную страницу" -#: apps/core/templates/richie/base.html:111 -#: apps/courses/templates/courses/cms/course_detail.html:172 +#: apps/core/templates/richie/base.html:115 msgid "Contact us" msgstr "Свяжитесь с нами" -#: apps/core/templates/richie/base.html:143 +#: apps/core/templates/richie/base.html:147 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:32 msgid "Learn more" msgstr "Узнать больше" -#: apps/core/templates/richie/base.html:157 +#: apps/core/templates/richie/base.html:161 msgid "Life-changing learning!" msgstr "Обучение, меняющее жизнь!" -#: apps/core/templates/richie/base.html:171 +#: apps/core/templates/richie/base.html:175 msgid "Powered by" msgstr "Работает на" @@ -180,23 +179,31 @@ msgstr "Новости Richie: %(title)s" msgid "Richie news: %(title)s %(url)s" msgstr "Новости Richie: %(title)s %(url)s" -#: apps/core/templates/social-networks/blogpost-badges.html:10 -#: apps/core/templates/social-networks/course-badges.html:10 +#: apps/core/templates/social-networks/blogpost-badges.html:11 +#: apps/core/templates/social-networks/blogpost-badges.html:12 +#: apps/core/templates/social-networks/course-badges.html:11 +#: apps/core/templates/social-networks/course-badges.html:12 msgid "Share on Facebook" msgstr "Поделитесь на Facebook" -#: apps/core/templates/social-networks/blogpost-badges.html:20 -#: apps/core/templates/social-networks/course-badges.html:20 +#: apps/core/templates/social-networks/blogpost-badges.html:21 +#: apps/core/templates/social-networks/blogpost-badges.html:22 +#: apps/core/templates/social-networks/course-badges.html:21 +#: apps/core/templates/social-networks/course-badges.html:22 msgid "Share on Twitter" msgstr "Поделиться через Twitter" -#: apps/core/templates/social-networks/blogpost-badges.html:30 -#: apps/core/templates/social-networks/course-badges.html:30 +#: apps/core/templates/social-networks/blogpost-badges.html:31 +#: apps/core/templates/social-networks/blogpost-badges.html:32 +#: apps/core/templates/social-networks/course-badges.html:31 +#: apps/core/templates/social-networks/course-badges.html:32 msgid "Share on Linkedin" msgstr "Поделиться на LinkedIn" -#: apps/core/templates/social-networks/blogpost-badges.html:40 -#: apps/core/templates/social-networks/course-badges.html:40 +#: apps/core/templates/social-networks/blogpost-badges.html:41 +#: apps/core/templates/social-networks/blogpost-badges.html:42 +#: apps/core/templates/social-networks/course-badges.html:41 +#: apps/core/templates/social-networks/course-badges.html:42 msgid "Share by Email" msgstr "Поделиться по электронной почте" @@ -209,22 +216,20 @@ msgstr "Пройдите курс обучения онлайн вместе с msgid "I just enrolled to the course \"%(title)s\" on Richie: %(url)s" msgstr "Я записался на курс \"%(title)s\" на Richie\": %(url)s" +#: apps/core/templates/social-networks/footer-badges.html:7 #: apps/core/templates/social-networks/footer-badges.html:8 msgid "Facebook" msgstr "Facebook" -#: apps/core/templates/social-networks/footer-badges.html:16 +#: apps/core/templates/social-networks/footer-badges.html:17 +#: apps/core/templates/social-networks/footer-badges.html:18 msgid "Twitter page" msgstr "Страничка Twitter" -#: apps/core/templates/social-networks/footer-badges.html:19 -msgid "Twitter" -msgstr "Twitter" - #: apps/core/templates/social-networks/footer-badges.html:27 -#: apps/core/templates/social-networks/footer-badges.html:30 -msgid "Linkedin" -msgstr "Linkedin" +#: apps/core/templates/social-networks/footer-badges.html:28 +msgid "Linkedin page" +msgstr "" #: apps/core/views/error.py:7 msgid "Bad request" @@ -271,6 +276,8 @@ msgid "See filer folder" msgstr "Смотреть папку filer" #: apps/courses/cms_plugins.py:27 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:55 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:56 msgid "Organization" msgstr "Организация" @@ -279,6 +286,7 @@ msgid "Organization by Category" msgstr "Организация по категориям" #: apps/courses/cms_plugins.py:87 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:29 msgid "Category" msgstr "Категория" @@ -536,13 +544,13 @@ msgid "blog posts" msgstr "записи в блоге" #: apps/courses/models/blog.py:91 apps/courses/models/category.py:154 -#: apps/courses/models/course.py:981 apps/courses/models/organization.py:199 +#: apps/courses/models/course.py:983 apps/courses/models/organization.py:199 #: apps/courses/models/organization.py:233 msgid "variant" msgstr "вариант" #: apps/courses/models/blog.py:94 apps/courses/models/category.py:157 -#: apps/courses/models/course.py:984 apps/courses/models/organization.py:202 +#: apps/courses/models/course.py:986 apps/courses/models/organization.py:202 #: apps/courses/models/organization.py:236 msgid "Optional glimpse variant for a custom look." msgstr "Дополнительный вариант с проблеском для придания индивидуального вида." @@ -735,55 +743,59 @@ msgstr "Перевод запуска курса" msgid "Course run translations" msgstr "Переводы запуска курса" -#: apps/courses/models/course.py:991 +#: apps/courses/models/course.py:932 +msgid "Empty title" +msgstr "Пустой заголовок" + +#: apps/courses/models/course.py:993 msgid "course plugin" msgstr "плагин курса" -#: apps/courses/models/course.py:992 +#: apps/courses/models/course.py:994 msgid "course plugins" msgstr "плагины курса" -#: apps/courses/models/course.py:1009 plugins/large_banner/models.py:38 +#: apps/courses/models/course.py:1011 plugins/large_banner/models.py:38 msgid "logo" msgstr "лого" -#: apps/courses/models/course.py:1011 +#: apps/courses/models/course.py:1013 msgid "url" msgstr "url" -#: apps/courses/models/course.py:1014 apps/courses/models/course.py:1038 +#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1040 msgid "name" msgstr "имя" -#: apps/courses/models/course.py:1016 apps/courses/models/course.py:1039 +#: apps/courses/models/course.py:1018 apps/courses/models/course.py:1041 msgid "content" msgstr "контент" -#: apps/courses/models/course.py:1021 +#: apps/courses/models/course.py:1023 msgid "licence" msgstr "лицензия" -#: apps/courses/models/course.py:1022 +#: apps/courses/models/course.py:1024 msgid "licences" msgstr "лицензии" -#: apps/courses/models/course.py:1044 +#: apps/courses/models/course.py:1046 msgid "Licence translation" msgstr "Перевод лицензии" -#: apps/courses/models/course.py:1045 +#: apps/courses/models/course.py:1047 msgid "licence translations" msgstr "переводы лицензий" -#: apps/courses/models/course.py:1059 +#: apps/courses/models/course.py:1061 msgid "description" msgstr "описание" -#: apps/courses/models/course.py:1063 +#: apps/courses/models/course.py:1065 msgid "licence plugin" msgstr "плагин лицензии" -#: apps/courses/models/course.py:1064 +#: apps/courses/models/course.py:1066 msgid "licence plugins" msgstr "плагины лицензии" @@ -895,213 +907,241 @@ msgstr "роли страницы" msgid "{:s} | {:s}" msgstr "{:s} | {:s}" -#: apps/courses/settings/__init__.py:35 +#: apps/courses/settings/__init__.py:77 msgid "Course page" msgstr "Страница курса" -#: apps/courses/settings/__init__.py:36 +#: apps/courses/settings/__init__.py:78 msgid "Organization list" msgstr "Список организаций" -#: apps/courses/settings/__init__.py:37 +#: apps/courses/settings/__init__.py:79 msgid "Organization page" msgstr "Страница организации" -#: apps/courses/settings/__init__.py:38 +#: apps/courses/settings/__init__.py:80 msgid "Category list" msgstr "Список категорий" -#: apps/courses/settings/__init__.py:39 +#: apps/courses/settings/__init__.py:81 msgid "Category page" msgstr "Страница категории" -#: apps/courses/settings/__init__.py:40 +#: apps/courses/settings/__init__.py:82 msgid "Blog post list" msgstr "Список записей блога" -#: apps/courses/settings/__init__.py:41 +#: apps/courses/settings/__init__.py:83 msgid "Blog post page" msgstr "Страница записи блога" -#: apps/courses/settings/__init__.py:42 +#: apps/courses/settings/__init__.py:84 msgid "Person page" msgstr "Страница человека" -#: apps/courses/settings/__init__.py:43 +#: apps/courses/settings/__init__.py:85 msgid "Person list" msgstr "Список людей" -#: apps/courses/settings/__init__.py:44 +#: apps/courses/settings/__init__.py:86 msgid "Program page" msgstr "Страница программы" -#: apps/courses/settings/__init__.py:45 +#: apps/courses/settings/__init__.py:87 msgid "Program list" msgstr "Список программ" -#: apps/courses/settings/__init__.py:46 +#: apps/courses/settings/__init__.py:88 msgid "Search" msgstr "Поиск" -#: apps/courses/settings/__init__.py:47 +#: apps/courses/settings/__init__.py:89 msgid "List of child pages" msgstr "Список дочерних страниц" -#: apps/courses/settings/__init__.py:48 +#: apps/courses/settings/__init__.py:90 msgid "Homepage" msgstr "Домашняя страница" -#: apps/courses/settings/__init__.py:49 +#: apps/courses/settings/__init__.py:91 msgid "Single column" msgstr "Одна колонка" -#: apps/courses/settings/__init__.py:56 +#: apps/courses/settings/__init__.py:92 +msgid "Three columns: (33% | 33% | 33%)" +msgstr "Три колонки: (33% | 33% | 33%)" + +#: apps/courses/settings/__init__.py:93 +msgid "Two columns: (50% | 50%)" +msgstr "Две колонки: (50% | 50%)" + +#: apps/courses/settings/__init__.py:94 +msgid "Two columns: (25% | 75%)" +msgstr "Две колонки: (25% | 75%)" + +#: apps/courses/settings/__init__.py:95 +msgid "Two columns: (75% | 25%)" +msgstr "Две колонки: (75% | 25%)" + +#: apps/courses/settings/__init__.py:102 msgid "Footer" msgstr "Подвал" -#: apps/courses/settings/__init__.py:61 +#: apps/courses/settings/__init__.py:107 msgid "Static headline" msgstr "Статический заголовок" -#: apps/courses/settings/__init__.py:68 apps/courses/settings/__init__.py:90 -#: apps/courses/settings/__init__.py:317 +#: apps/courses/settings/__init__.py:114 apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:138 apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:155 apps/courses/settings/__init__.py:162 +#: apps/courses/settings/__init__.py:371 msgid "Main content" msgstr "Основной контент" -#: apps/courses/settings/__init__.py:120 apps/courses/settings/__init__.py:278 -#: apps/courses/settings/__init__.py:298 +#: apps/courses/settings/__init__.py:141 apps/courses/settings/__init__.py:151 +#: apps/courses/settings/__init__.py:158 apps/courses/settings/__init__.py:165 +msgid "Secondary content" +msgstr "Дополнительное содержимое" + +#: apps/courses/settings/__init__.py:144 +msgid "Third content" +msgstr "Третье содержимое" + +#: apps/courses/settings/__init__.py:169 apps/courses/settings/__init__.py:332 +#: apps/courses/settings/__init__.py:352 #: apps/courses/templates/courses/cms/blogpost_detail.html:108 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:10 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:41 #: apps/courses/templates/courses/cms/fragment_blogpost_glimpse.html:76 -#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:9 -#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:8 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:10 +#: apps/courses/templates/courses/cms/fragment_program_glimpse.html:9 #: apps/courses/templates/courses/cms/program_detail.html:40 msgid "Cover" msgstr "Обложка" -#: apps/courses/settings/__init__.py:125 +#: apps/courses/settings/__init__.py:174 msgid "Catch phrase" msgstr "Меткая фраза" -#: apps/courses/settings/__init__.py:130 +#: apps/courses/settings/__init__.py:179 msgid "Teaser" msgstr "Тизер" -#: apps/courses/settings/__init__.py:135 +#: apps/courses/settings/__init__.py:184 msgid "About the course" msgstr "О курсе" -#: apps/courses/settings/__init__.py:140 +#: apps/courses/settings/__init__.py:189 msgid "What you will learn" msgstr "Чему вы научитесь" -#: apps/courses/settings/__init__.py:144 +#: apps/courses/settings/__init__.py:193 msgid "Format" msgstr "Формат" -#: apps/courses/settings/__init__.py:148 +#: apps/courses/settings/__init__.py:197 msgid "Prerequisites" msgstr "Предварительные условия" -#: apps/courses/settings/__init__.py:152 +#: apps/courses/settings/__init__.py:201 msgid "Team" msgstr "Команда" -#: apps/courses/settings/__init__.py:156 +#: apps/courses/settings/__init__.py:205 msgid "Plan" msgstr "План" -#: apps/courses/settings/__init__.py:161 +#: apps/courses/settings/__init__.py:210 msgid "Complementary information" msgstr "Дополнительная информация" -#: apps/courses/settings/__init__.py:173 -#: apps/courses/templates/courses/cms/course_detail.html:464 +#: apps/courses/settings/__init__.py:222 +#: apps/courses/templates/courses/cms/course_detail.html:526 #: apps/courses/templates/courses/cms/fragment_course_relations.html:47 msgid "License for the course content" msgstr "Лицензия на содержимое курса" -#: apps/courses/settings/__init__.py:178 -#: apps/courses/templates/courses/cms/course_detail.html:475 +#: apps/courses/settings/__init__.py:227 +#: apps/courses/templates/courses/cms/course_detail.html:537 #: apps/courses/templates/courses/cms/fragment_course_relations.html:56 msgid "License for the content created by course participants" msgstr "Лицензия на контент, созданный участниками курса" -#: apps/courses/settings/__init__.py:183 apps/courses/settings/__init__.py:211 -#: apps/courses/settings/__init__.py:242 apps/courses/settings/__init__.py:274 +#: apps/courses/settings/__init__.py:232 apps/courses/settings/__init__.py:260 +#: apps/courses/settings/__init__.py:296 apps/courses/settings/__init__.py:328 msgid "Categories" msgstr "Категории" -#: apps/courses/settings/__init__.py:187 apps/courses/settings/__init__.py:231 +#: apps/courses/settings/__init__.py:236 apps/courses/settings/__init__.py:285 msgid "Icon" msgstr "Иконка" -#: apps/courses/settings/__init__.py:192 apps/courses/settings/__init__.py:264 +#: apps/courses/settings/__init__.py:241 apps/courses/settings/__init__.py:318 #: apps/courses/templates/courses/cms/fragment_course_relations.html:27 #: apps/courses/templates/courses/cms/person_detail.html:112 #: apps/search/defaults.py:115 msgid "Organizations" msgstr "Организации" -#: apps/courses/settings/__init__.py:196 +#: apps/courses/settings/__init__.py:245 msgid "Assessment and Certification" msgstr "Оценка и сертификация" -#: apps/courses/settings/__init__.py:201 apps/courses/settings/__init__.py:221 +#: apps/courses/settings/__init__.py:250 apps/courses/settings/__init__.py:275 #: apps/courses/templates/courses/cms/category_detail.html:35 msgid "Banner" msgstr "Баннер" -#: apps/courses/settings/__init__.py:206 apps/courses/settings/__init__.py:226 +#: apps/courses/settings/__init__.py:255 apps/courses/settings/__init__.py:280 #: apps/courses/templates/courses/cms/category_detail.html:53 -#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:40 +#: apps/courses/templates/courses/cms/fragment_category_glimpse.html:41 msgid "Logo" msgstr "Лого" -#: apps/courses/settings/__init__.py:215 apps/courses/settings/__init__.py:236 -#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:35 +#: apps/courses/settings/__init__.py:264 apps/courses/settings/__init__.py:290 msgid "Description" msgstr "Описание" -#: apps/courses/settings/__init__.py:246 +#: apps/courses/settings/__init__.py:269 apps/courses/settings/__init__.py:337 +#: apps/courses/settings/__init__.py:357 +#: apps/courses/templates/courses/cms/fragment_organization_glimpse.html:46 +msgid "Excerpt" +msgstr "Выдержка" + +#: apps/courses/settings/__init__.py:300 msgid "Portrait" msgstr "Портрет" -#: apps/courses/settings/__init__.py:251 +#: apps/courses/settings/__init__.py:305 msgid "Bio" msgstr "О себе" -#: apps/courses/settings/__init__.py:256 +#: apps/courses/settings/__init__.py:310 msgid "Main Content" msgstr "Основной Контент" -#: apps/courses/settings/__init__.py:269 +#: apps/courses/settings/__init__.py:323 msgid "Author" msgstr "Автор" -#: apps/courses/settings/__init__.py:283 apps/courses/settings/__init__.py:303 -msgid "Excerpt" -msgstr "Выдержка" - -#: apps/courses/settings/__init__.py:288 apps/courses/settings/__init__.py:308 +#: apps/courses/settings/__init__.py:342 apps/courses/settings/__init__.py:362 msgid "Body" msgstr "Тело" -#: apps/courses/settings/__init__.py:292 +#: apps/courses/settings/__init__.py:346 msgid "Headline" msgstr "Заголовок" -#: apps/courses/settings/__init__.py:313 +#: apps/courses/settings/__init__.py:367 #: apps/courses/templates/courses/cms/person_detail.html:129 msgid "Courses" msgstr "Курсы" -#: apps/courses/settings/__init__.py:439 +#: apps/courses/settings/__init__.py:493 msgid "Button caesura" msgstr "Кнопка цезура" -#: apps/courses/settings/__init__.py:441 +#: apps/courses/settings/__init__.py:495 msgid "Full width" msgstr "Во всю ширину" @@ -1122,6 +1162,7 @@ msgid "blog post cover image" msgstr "обложка записи в блоге" #: apps/courses/templates/courses/cms/blogpost_detail.html:138 +#: apps/courses/templates/courses/cms/organization_detail.html:102 #: apps/courses/templates/courses/cms/program_detail.html:60 msgid "No excerpt content" msgstr "Контент без выдержки" @@ -1152,7 +1193,7 @@ msgid "Sub categories" msgstr "Подкатегории" #: apps/courses/templates/courses/cms/category_detail.html:118 -#: apps/courses/templates/courses/cms/organization_detail.html:106 +#: apps/courses/templates/courses/cms/organization_detail.html:120 #: apps/courses/templates/courses/cms/program_detail.html:78 msgid "Related courses" msgstr "Связанные курсы" @@ -1160,7 +1201,7 @@ msgstr "Связанные курсы" #: apps/courses/templates/courses/cms/category_detail.html:123 #: apps/courses/templates/courses/cms/person_detail.html:134 msgid "Courses pagination" -msgstr "" +msgstr "Пагинация курсов" #: apps/courses/templates/courses/cms/category_detail.html:127 #, python-format @@ -1181,7 +1222,7 @@ msgstr "Связанные организации" #: apps/courses/templates/courses/cms/category_detail.html:155 msgid "Related organizations pagination" -msgstr "" +msgstr "Пагинация связанных курсов" #: apps/courses/templates/courses/cms/category_detail.html:169 msgid "Related blogposts" @@ -1189,49 +1230,54 @@ msgstr "Похожие блоги" #: apps/courses/templates/courses/cms/category_detail.html:174 msgid "Related blogposts pagination" -msgstr "" +msgstr "Пагинация связанных блогов" #: apps/courses/templates/courses/cms/category_detail.html:188 -#: apps/courses/templates/courses/cms/organization_detail.html:132 +#: apps/courses/templates/courses/cms/organization_detail.html:146 msgid "Related persons" msgstr "Связанные люди" #: apps/courses/templates/courses/cms/category_detail.html:193 -#: apps/courses/templates/courses/cms/organization_detail.html:139 +#: apps/courses/templates/courses/cms/organization_detail.html:153 msgid "Related persons pagination" -msgstr "" +msgstr "Пагинация связанных персон" #: apps/courses/templates/courses/cms/category_list.html:26 msgid "No categories" msgstr "Нет категорий" -#: apps/courses/templates/courses/cms/course_detail.html:58 -#: apps/courses/templates/courses/cms/organization_detail.html:87 -#: apps/courses/templates/courses/cms/person_detail.html:47 -msgid "No associated categories" -msgstr "Нет связанных категорий" +#: apps/courses/templates/courses/cms/course_detail.html:6 +#, python-format +msgid "%(course_title)s - Course" +msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:72 +#: apps/courses/templates/courses/cms/course_detail.html:59 msgid "Ref. " msgstr "Ссылка. " -#: apps/courses/templates/courses/cms/course_detail.html:88 +#: apps/courses/templates/courses/cms/course_detail.html:73 +#: apps/courses/templates/courses/cms/organization_detail.html:91 +#: apps/courses/templates/courses/cms/person_detail.html:47 +msgid "No associated categories" +msgstr "Нет связанных категорий" + +#: apps/courses/templates/courses/cms/course_detail.html:94 msgid "Duration:" msgstr "Длительность:" -#: apps/courses/templates/courses/cms/course_detail.html:97 +#: apps/courses/templates/courses/cms/course_detail.html:103 msgid "Effort:" msgstr "Усилие:" -#: apps/courses/templates/courses/cms/course_detail.html:106 +#: apps/courses/templates/courses/cms/course_detail.html:112 msgid "Pace:" msgstr "Темп:" -#: apps/courses/templates/courses/cms/course_detail.html:116 +#: apps/courses/templates/courses/cms/course_detail.html:122 msgid "Enter here a introduction of your course." msgstr "Введите введение к вашему курсу." -#: apps/courses/templates/courses/cms/course_detail.html:124 +#: apps/courses/templates/courses/cms/course_detail.html:130 #, python-format msgid "\n" " %(count)s already enrolled!\n" @@ -1240,16 +1286,28 @@ msgstr "\n" " %(count)s уже зачислены!\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:136 +#: apps/courses/templates/courses/cms/course_detail.html:142 msgid "Add a teaser video or add a cover image below and it will be used as teaser image as well." msgstr "Добавьте видео тизер или добавьте обложку ниже и оно также будет использоваться в качестве тизерного изображения." -#: apps/courses/templates/courses/cms/course_detail.html:148 -#: apps/courses/templates/courses/cms/course_detail.html:226 +#: apps/courses/templates/courses/cms/course_detail.html:154 +#: apps/courses/templates/courses/cms/course_detail.html:255 msgid "course cover image" msgstr "обложка курса" -#: apps/courses/templates/courses/cms/course_detail.html:198 +#: apps/courses/templates/courses/cms/course_detail.html:182 +msgid "No open course runs" +msgstr "Нет запущенных курсов" + +#: apps/courses/templates/courses/cms/course_detail.html:192 +msgid "course runs are currently open for this course" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:196 +msgid "Choose now" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:227 #, python-format msgid "\n" " Archived on %(creation_date)s\n" @@ -1258,98 +1316,107 @@ msgstr "\n" " Архивировано %(creation_date)s\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:202 +#: apps/courses/templates/courses/cms/course_detail.html:231 msgid "Go to current version" msgstr "Перейти к текущей версии" -#: apps/courses/templates/courses/cms/course_detail.html:213 +#: apps/courses/templates/courses/cms/course_detail.html:242 msgid "Glimpse cover" msgstr "Glimpse обложка" -#: apps/courses/templates/courses/cms/course_detail.html:215 +#: apps/courses/templates/courses/cms/course_detail.html:244 msgid "Add an image for course cover on its glimpse." msgstr "Добавить изображение для обложки курса на его glimpse." -#: apps/courses/templates/courses/cms/course_detail.html:239 +#: apps/courses/templates/courses/cms/course_detail.html:268 msgctxt "course_detail__title" msgid "What you will learn" msgstr "Чему вы научитесь" -#: apps/courses/templates/courses/cms/course_detail.html:240 +#: apps/courses/templates/courses/cms/course_detail.html:269 msgid "At the end of this course, you will be able to:" msgstr "По окончании этого курса вы сможете:" -#: apps/courses/templates/courses/cms/course_detail.html:249 +#: apps/courses/templates/courses/cms/course_detail.html:278 msgctxt "course_detail__title" msgid "Description" msgstr "Описание" -#: apps/courses/templates/courses/cms/course_detail.html:260 +#: apps/courses/templates/courses/cms/course_detail.html:289 msgctxt "course_detail__title" msgid "Format" msgstr "Формат" -#: apps/courses/templates/courses/cms/course_detail.html:262 +#: apps/courses/templates/courses/cms/course_detail.html:291 msgid "How is the course structured?" msgstr "Как структурирован курс?" -#: apps/courses/templates/courses/cms/course_detail.html:271 +#: apps/courses/templates/courses/cms/course_detail.html:300 msgctxt "course_detail__title" msgid "Prerequisites" msgstr "Предварительные условия" -#: apps/courses/templates/courses/cms/course_detail.html:274 +#: apps/courses/templates/courses/cms/course_detail.html:303 msgid "What are the prerequisites to follow this course?" msgstr "Каковы предварительные условия для прохождения этого курса?" -#: apps/courses/templates/courses/cms/course_detail.html:284 +#: apps/courses/templates/courses/cms/course_detail.html:313 msgctxt "course_detail__title" msgid "Assessment and certification" msgstr "Оценка и сертификация" -#: apps/courses/templates/courses/cms/course_detail.html:287 +#: apps/courses/templates/courses/cms/course_detail.html:316 msgid "How is progress evaluated and/or certified?" msgstr "Как оценивается и/или сертифицируется прогресс?" -#: apps/courses/templates/courses/cms/course_detail.html:299 +#: apps/courses/templates/courses/cms/course_detail.html:328 msgctxt "course_detail__title" msgid "Course plan" msgstr "План курса" -#: apps/courses/templates/courses/cms/course_detail.html:302 +#: apps/courses/templates/courses/cms/course_detail.html:331 msgid "Enter here the detailed course plan." msgstr "Введите подробный план курса." -#: apps/courses/templates/courses/cms/course_detail.html:317 +#: apps/courses/templates/courses/cms/course_detail.html:349 +msgctxt "course_detail__title" +msgid "Other course runs" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:351 msgctxt "course_detail__title" msgid "Course runs" msgstr "Запуски курса" -#: apps/courses/templates/courses/cms/course_detail.html:323 -msgid "No open course runs" -msgstr "Нет запущенных курсов" +#: apps/courses/templates/courses/cms/course_detail.html:361 +msgid "No course runs" +msgstr "" -#: apps/courses/templates/courses/cms/course_detail.html:332 +#: apps/courses/templates/courses/cms/course_detail.html:363 +msgid "No other course runs" +msgstr "" + +#: apps/courses/templates/courses/cms/course_detail.html:387 msgctxt "Course runs to be scheduled (plural)" msgid "To be scheduled" msgstr "Будет запланировано" -#: apps/courses/templates/courses/cms/course_detail.html:343 +#: apps/courses/templates/courses/cms/course_detail.html:400 msgctxt "Upcoming course runs (plural)" msgid "Upcoming" msgstr "Предстоящие" -#: apps/courses/templates/courses/cms/course_detail.html:354 +#: apps/courses/templates/courses/cms/course_detail.html:413 msgctxt "Ongoing course runs (plural)" msgid "Ongoing" msgstr "Текущий" -#: apps/courses/templates/courses/cms/course_detail.html:365 +#: apps/courses/templates/courses/cms/course_detail.html:426 msgctxt "Archived course runs (plural)" msgid "Archived" msgstr "В архиве" -#: apps/courses/templates/courses/cms/course_detail.html:389 +#: apps/courses/templates/courses/cms/course_detail.html:451 msgid "\n" " This course is part of a program\n" " " @@ -1369,41 +1436,51 @@ msgstr[3] "\n" " Этот курс является частью программ\n" " " -#: apps/courses/templates/courses/cms/course_detail.html:415 +#: apps/courses/templates/courses/cms/course_detail.html:477 msgctxt "course_detail__title" msgid "Course team" msgstr "Команда курса" -#: apps/courses/templates/courses/cms/course_detail.html:420 +#: apps/courses/templates/courses/cms/course_detail.html:482 #: apps/courses/templates/courses/cms/fragment_course_relations.html:13 msgid "Who are the teachers in the course team?" msgstr "Кто является преподавателями в команде курсов?" -#: apps/courses/templates/courses/cms/course_detail.html:434 +#: apps/courses/templates/courses/cms/course_detail.html:496 msgctxt "course_detail__title" msgid "Organizations" msgstr "Организации" -#: apps/courses/templates/courses/cms/course_detail.html:439 +#: apps/courses/templates/courses/cms/course_detail.html:501 #: apps/courses/templates/courses/cms/fragment_course_relations.html:32 msgid "What are the organizations publishing this course?" msgstr "Какие организации публикуют этот курс?" -#: apps/courses/templates/courses/cms/course_detail.html:460 +#: apps/courses/templates/courses/cms/course_detail.html:522 msgctxt "course_detail__title" msgid "License" msgstr "Лицензия" -#: apps/courses/templates/courses/cms/course_detail.html:467 +#: apps/courses/templates/courses/cms/course_detail.html:529 #: apps/courses/templates/courses/cms/fragment_course_relations.html:50 msgid "What is the license for the course content?" msgstr "Какова лицензия на содержимое курса?" -#: apps/courses/templates/courses/cms/course_detail.html:478 +#: apps/courses/templates/courses/cms/course_detail.html:540 #: apps/courses/templates/courses/cms/fragment_course_relations.html:59 msgid "What is the license for the content created by course participants?" msgstr "Какова лицензия на контент, созданный участниками курса?" +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:63 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:64 +msgid "Course code" +msgstr "" + +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:83 +#: apps/courses/templates/courses/cms/fragment_course_glimpse.html:84 +msgid "Course date" +msgstr "" + #: apps/courses/templates/courses/cms/fragment_course_relations.html:8 msgid "Course team" msgstr "Команда курса" @@ -1466,28 +1543,26 @@ msgstr "\n" " Если вам нужна страница %(model)s, вы должны создать его через мастер и выбрать \"Новая %(model)s страница\".\n" " " -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:16 -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:39 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:8 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:9 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:17 +#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:40 msgid "Main organization" msgstr "Основная организация" -#: apps/courses/templates/courses/cms/fragment_organization_main_logo.html:29 -msgid "main organization logo" -msgstr "лого основной организации" - -#: apps/courses/templates/courses/cms/organization_detail.html:50 +#: apps/courses/templates/courses/cms/organization_detail.html:54 msgid "organization banner" msgstr "баннер организации" -#: apps/courses/templates/courses/cms/organization_detail.html:71 +#: apps/courses/templates/courses/cms/organization_detail.html:75 msgid "organization logo" msgstr "лого организации" -#: apps/courses/templates/courses/cms/organization_detail.html:111 +#: apps/courses/templates/courses/cms/organization_detail.html:125 msgid "Related courses pagination" -msgstr "" +msgstr "Пагинация связанных курсов" -#: apps/courses/templates/courses/cms/organization_detail.html:114 +#: apps/courses/templates/courses/cms/organization_detail.html:128 #, python-format msgid "\n" " See all courses related to %(organization_title)s\n" @@ -1528,7 +1603,7 @@ msgstr "Записи в блогах" #: apps/courses/templates/courses/cms/person_detail.html:160 msgid "Blogposts pagination" -msgstr "" +msgstr "Пагинация блогов" #: apps/courses/templates/courses/cms/person_list.html:26 msgid "No persons" @@ -1544,7 +1619,7 @@ msgstr "Нет связанных программ" #. Translators: delay indicates when the course will start as a duration. #. In english the string will be "The course will start in 3 days" -#: apps/courses/templatetags/extra_tags.py:262 +#: apps/courses/templatetags/extra_tags.py:278 msgid "The course will start {delay:s}" msgstr "Курс начнется {delay:s}" diff --git a/tests_e2e/package.json b/tests_e2e/package.json index 48fd4adfd9..99741b4dee 100644 --- a/tests_e2e/package.json +++ b/tests_e2e/package.json @@ -1,6 +1,6 @@ { "name": "richie-tests-e2e", - "version": "2.13.0", + "version": "2.14.0", "description": "End-to-end tests for the Richie project", "repository": "https://github.com/openfun/richie", "author": "Open FUN (France Université Numérique)", diff --git a/website/package.json b/website/package.json index 3484cb75f2..e996fbad7c 100644 --- a/website/package.json +++ b/website/package.json @@ -1,6 +1,6 @@ { "name": "richie-education-docs", - "version": "2.13.0", + "version": "2.14.0", "description": "Documentation website for the Richie project", "scripts": { "build": "docusaurus-build", diff --git a/website/versioned_docs/version-2.14.0/web-analytics.md b/website/versioned_docs/version-2.14.0/web-analytics.md new file mode 100644 index 0000000000..24e383978e --- /dev/null +++ b/website/versioned_docs/version-2.14.0/web-analytics.md @@ -0,0 +1,96 @@ +--- +id: version-2.14.0-web-analytics +title: Add web analytics to your site +sidebar_label: Web Analytics +original_id: web-analytics +--- + +Richie has native support to [Google Analytics](#google-analytics) and [Google Tag Manager](#google-tag-manager) Web Analytics solutions. +The purpose of this file is to explain how you can enable one of the supported Web Analytics providers +and how you can extend Richie with an alternative solution. + +## Google Analytics +Next, it is described how you can configure the **Google Analytics** on your Richie site. + +- Add the `WEB_ANALYTICS_ID` setting, with your Google Analytics tracking id code. + +The current Google Analytics implementation also includes custom dimensions. Those dimensions permit you to create further analyses on Google Analytics or even use them to create custom reports. +Custom dimensions with a value as example: +* Organizations codes - `UNIV_LISBON | UNIV_PORTO` +* Course code - `COURSE_XPTO` +* Course runs titles - `Summer edition | Winter edition` +* Course runs resource links - `http://example.edx:8073/courses/course-v1:edX+DemoX+Demo_Course/info` +* Page title - `Introduction to Programming` + +## Google Tag Manager +Next, it is described how you can configure the **Google Tag Manager** on your Richie site. + +- Add the `WEB_ANALYTICS_ID` setting, with your Google Tag Manager tracking id code. +- Add the `WEB_ANALYTICS_PROVIDER` setting with the `google_tag_manager` value. + +The current Google Tag Manager implementation also defines a custom dimensions like the [Google Analytics](#google-analytics). + +## Location of the web analytics javascript +Use the `WEB_ANALYTICS_LOCATION` settings to decide where do you want to put the Javascript code. Use `head` (**default** value), to put the Javascript on HTML header, or `footer`, to put the Javascript code to the bottom of the body. + +## Add a new Web Analytics solution + +In this section it's described how you can add support to a different Web Analytics solution. + +* override the `richie/web_analytics.html` template +* define the `WEB_ANALYTICS_ID` setting with your tracking identification +* define the `WEB_ANALYTICS_PROVIDER` setting with a value that represents your solution, eg. `my-custom-web-analytics-software` +* optionally change `WEB_ANALYTICS_LOCATION` setting with `head` (default) or `footer` value + +- Example of a `richie/web_analytics.html` file customization that prints to the browser console log the dimension keys and values: +```javascript + +``` + +Output: +``` +dimension: index '1' with key 'organizations_codes' with value 'COMPATIBLE-EVEN-KEELED-UTILIZATION-19 | FOCUSED-NEXT-GENERATION-FUNCTIONALITIES-22 | UNIVERSAL-MODULAR-LOCAL-AREA-NETWORK-23' +dimension: index '2' with key 'course_code' with value '00017' +dimension: index '3' with key 'course_runs_titles' with value 'Run 0' +dimension: index '4' with key 'course_runs_resource_links' with value '' +dimension: index '5' with key 'page_title' with value 'Business-focused zero-defect application' +``` + +But you can also contribute to Richie by creating a pull request to add support for a different web analytics solution. In this last case, you have to edit directly the `richie/web_analytics.html` template. + +Example of an override of the `richie/web_analytics.html` file: +```html +{% block web_analytics %} + {% if WEB_ANALYTICS_ID %} + {% if WEB_ANALYTICS_PROVIDER == "my_custom_web_analytics_software" %} + + {% endif %} + {% endif %} +{% endblock web_analytics %} +``` + +The web analytics dimensions are being added to the django context using the `WEB_ANALYTICS.DIMENSIONS` dictionary. Because each dimension value could have multiple values, then each dictionary value is a list. Web analytics dimensions dictionary keys: +* `organizations_codes` +* `course_code` +* `course_runs_titles` +* `course_runs_resource_links` +* `page_title` + +Example, if you only need the organization codes on your custom `richie/web_analytics.html` file: +```javascript + +``` + +The frontend code also sends **events** to the web analytics provider. +Richie sends events when the user is enrolled on a course run. +To support different providers, you need to create a similar file +of `src/frontend/js/utils/api/web-analytics/google_analytics.ts` and change the `src/frontend/js/utils/api/web-analytics/index.ts` file to include that newer provider. diff --git a/website/versions.json b/website/versions.json index 487f1691e7..53ffd61bc5 100644 --- a/website/versions.json +++ b/website/versions.json @@ -1,4 +1,5 @@ [ + "2.14.0", "2.13.0", "2.12.0", "2.11.0",