diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/requirements/dev.txt b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/requirements/dev.txt
index 76e276a9c6..916def5372 100644
--- a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/requirements/dev.txt
+++ b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/requirements/dev.txt
@@ -1,7 +1,7 @@
bandit==1.7.5
black==24.3.0
-Faker==13.2.0
-factory-boy==3.2.1
+Faker==35.2.0
+factory-boy==3.3.3
flake8==6.0.0
flake8-pyproject==1.2.3
isort==5.12.0
diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/.gitkeep b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/ar_SA/LC_MESSAGES/django.po b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/ar_SA/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..3f4c9a5ffa
--- /dev/null
+++ b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/ar_SA/LC_MESSAGES/django.po
@@ -0,0 +1,470 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: richie\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-31 17:41+0100\n"
+"PO-Revision-Date: 2024-11-20 14:09\n"
+"Last-Translator: \n"
+"Language-Team: Arabic, Saudi Arabia\n"
+"Language: ar_SA\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
+"X-Crowdin-Project: richie\n"
+"X-Crowdin-Project-ID: 308578\n"
+"X-Crowdin-Language: ar-SA\n"
+"X-Crowdin-File: backend.pot\n"
+"X-Crowdin-File-ID: 32\n"
+
+#: newsite/settings.py:250 newsite/settings.py:260
+msgid "Dashboard"
+msgstr ""
+
+#: newsite/settings.py:251
+msgid "{base_url:s}/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:261
+msgid "/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:264
+msgid "Teacher dashboard"
+msgstr ""
+
+#: newsite/settings.py:265
+msgid "/dashboard/teacher"
+msgstr ""
+
+#: newsite/settings.py:287
+msgid "Profile"
+msgstr ""
+
+#: newsite/settings.py:288
+msgid "{base_url:s}/u/(username)"
+msgstr ""
+
+#: newsite/settings.py:291
+msgid "Account"
+msgstr ""
+
+#: newsite/settings.py:292
+msgid "{base_url:s}/account/settings"
+msgstr ""
+
+#: newsite/settings.py:385
+msgid "Teaser"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "English"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "French"
+msgstr ""
+
+msgid "Define an effort"
+msgstr "تحديد المجهود"
+
+msgid "Pagination"
+msgstr "ترقيم الصفحات"
+
+#, python-format
+msgid "Currently reading last page %(page)s"
+msgstr "حاليا قراءة الصفحة الأخيرة %(page)s"
+
+#, python-format
+msgid "Currently reading page %(page)s"
+msgstr "قراءة الصفحة %(page)s حاليا"
+
+#, python-format
+msgid "Page %(page)s"
+msgstr "الصفحة %(page)s"
+
+#, python-format
+msgid "Previous page %(page)s"
+msgstr "الصفحة السابقة %(page)s"
+
+#, python-format
+msgid "Last page %(page)s"
+msgstr "آخر صفحة %(page)s"
+
+#, python-format
+msgid "Next page %(page)s"
+msgstr "الصفحة التالية %(page)s"
+
+msgid "Facebook"
+msgstr "فيسبوك"
+
+msgid "Twitter page"
+msgstr "صفحة تويتر"
+
+msgid "Bad request"
+msgstr "طلب غير صالح"
+
+msgid "Forbidden"
+msgstr "ممنوع"
+
+msgid "You do not have the required permissions to access this resource."
+msgstr "ليس لديك الصلاحيات المطلوبة للوصول إلى هذا المورد."
+
+msgid "Page not found"
+msgstr "لم يتم العثور على الصفحة!"
+
+msgid "The requested resource does not exist."
+msgstr "المورد المطلوب غير موجود."
+
+msgid "Program"
+msgstr "البرنامج"
+
+msgid "New page"
+msgstr "صفحة جديدة"
+
+msgid "New sub page"
+msgstr "صفحة فرعية جديدة"
+
+msgid "Page title"
+msgstr "عنوان الصفحة"
+
+msgid "Page slug"
+msgstr "مسبار الصفحة"
+
+msgid "This slug is already in use"
+msgstr "هذا السلسلة مستخدم مسبقاً"
+
+msgid "Code"
+msgstr "كود"
+
+msgid "New course page"
+msgstr "صفحة دورة جديدة"
+
+msgid "Create a new course page"
+msgstr "إنشاء صفحة دورة جديدة"
+
+msgid "Unique reference for the organization."
+msgstr "مرجع فريد للمنظمة."
+
+msgid "New organization page"
+msgstr "صفحة منظمة جديدة"
+
+msgid "Create a new organization page"
+msgstr "إنشاء صفحة منظمة جديدة"
+
+msgid "New category page"
+msgstr "صفحة فئة جديدة"
+
+msgid "Create a new category page"
+msgstr "إنشاء صفحة فئة جديدة"
+
+msgid "New blog post"
+msgstr "مشاركة مدونة جديدة"
+
+msgid "Create a new blog post"
+msgstr "إنشاء مشاركة مدونة جديدة"
+
+msgid "New person page"
+msgstr "صفحة شخص جديد"
+
+msgid "Create a new person page"
+msgstr "إنشاء صفحة شخص جديد"
+
+msgid "New program"
+msgstr "برنامج جديد"
+
+msgid "Create a new program"
+msgstr "إنشاء برنامج جديد"
+
+msgid "Admin"
+msgstr "المسؤل"
+
+msgid "Inherit"
+msgstr "وراثة"
+
+msgid "Default"
+msgstr "الافتراضي"
+
+msgid "Mini"
+msgstr "مصغر"
+
+msgid "Favorite"
+msgstr "مفضلة"
+
+msgid "Badge"
+msgstr "شارة"
+
+msgid "Tag"
+msgstr "وسم"
+
+msgid "Small"
+msgstr "صغير"
+
+msgid "Large"
+msgstr "كبير"
+
+msgid "Card"
+msgstr "بطاقة"
+
+msgid "Row"
+msgstr "صف"
+
+msgid "minute"
+msgstr "دقيقة"
+
+msgid "minutes"
+msgstr "دقائق"
+
+msgid "hour"
+msgstr "ساعة"
+
+msgid "hours"
+msgstr "ساعات"
+
+msgid "day"
+msgstr "يوم"
+
+msgid "days"
+msgstr "أيام"
+
+msgid "categories"
+msgstr "الفئات"
+
+msgid "enroll now"
+msgstr "التسجيل الآن"
+
+msgid "code"
+msgstr "كود"
+
+msgid "courses"
+msgstr "الدورات"
+
+msgid "Manual"
+msgstr "دليل"
+
+msgid "Synchronization to draft page"
+msgstr "المزامنة إلى مسودة الصفحة"
+
+msgid "Synchronization to public page"
+msgstr "المزامنة إلى الصفحة العامة"
+
+msgid "resource link"
+msgstr "رابط المورد"
+
+msgid "course start"
+msgstr "بدء الدورة التدريبية"
+
+msgid "course end"
+msgstr "نهاية الدورة التدريبية"
+
+msgid "enrollment start"
+msgstr "بدء التسجيل"
+
+msgid "enrollment end"
+msgstr "نهاية التسجيل"
+
+msgid "The list of languages in which the course content is available."
+msgstr "قائمة اللغات التي يتوفر بها محتوى الدورة."
+
+msgid "course run"
+msgstr "تشغيل الدورة التدريبية"
+
+msgid "course runs"
+msgstr "تشغيل الدورة التدريبية"
+
+msgid "title"
+msgstr "العنوان"
+
+msgid "Course run translation"
+msgstr "الدورة التدريبية تشغيل الترجمة"
+
+msgid "Course run translations"
+msgstr "تشغيل الترجمات"
+
+msgid "logo"
+msgstr "الشعار"
+
+msgid "url"
+msgstr "رابط"
+
+msgid "name"
+msgstr "اسم"
+
+msgid "content"
+msgstr "المحتوى"
+
+msgid "licence"
+msgstr "الترخيص"
+
+msgid "licences"
+msgstr "التراخيص"
+
+msgid "Licence translation"
+msgstr "ترجمة الترخيص"
+
+msgid "licence translations"
+msgstr "ترجمات الترخيص"
+
+msgid "description"
+msgstr "وصف"
+
+msgid "licence plugin"
+msgstr "ملحق الترخيص"
+
+msgid "licence plugins"
+msgstr "إضافات الترخيص"
+
+msgid "organization"
+msgstr "المنظمة"
+
+msgid "organizations"
+msgstr "المنظمات"
+
+msgid "person"
+msgstr "شخص"
+
+msgid "persons"
+msgstr "الأشخاص"
+
+msgid "Custom bio"
+msgstr "بيو مخصص"
+
+msgid "program"
+msgstr "البرنامج"
+
+msgid "programs"
+msgstr "البرامج"
+
+msgid "role"
+msgstr "دور"
+
+msgid ""
+"A role describes all the permissions that should be granted to the user "
+"group."
+msgstr "الدور يصف جميع الأذونات التي يجب منحها لمجموعة المستخدمين."
+
+msgid "page"
+msgstr "الصفحة"
+
+msgid "Page to which this role grants permissions."
+msgstr "الصفحة التي يمنح لها هذا الدور الأذونات."
+
+msgid "Search"
+msgstr "البحث"
+
+msgid "Cover"
+msgstr "غلاف"
+
+msgid "License for the content created by course participants"
+msgstr "رخصة للمحتوى الذي أنشأه المشاركون في الدورة"
+
+msgid "Categories"
+msgstr "الفئات"
+
+msgid "Icon"
+msgstr "أيقونة"
+
+msgid "Organizations"
+msgstr "المنظمات"
+
+msgid "Banner"
+msgstr "لافتة"
+
+msgid "Logo"
+msgstr "الشعار"
+
+msgid "Description"
+msgstr "وصف"
+
+msgid "Excerpt"
+msgstr "مقتطف"
+
+msgid "Bio"
+msgstr "بيو"
+
+msgid "Main Content"
+msgstr "المحتوى الرئيسي"
+
+msgid "Author"
+msgstr "المؤلف"
+
+msgid "Body"
+msgstr "الجسم"
+
+msgid "Headline"
+msgstr "عنوان رئيسي"
+
+msgid "Courses"
+msgstr "الدورات"
+
+msgid "Full width"
+msgstr "العرض الكامل"
+
+msgid "No categories yet."
+msgstr "لا توجد فئات حتى الآن."
+
+msgid "Not published yet"
+msgstr "لم تنشر بعد"
+
+msgid "No author yet"
+msgstr "لا يوجد مؤلف بعد"
+
+msgid "No excerpt content"
+msgstr "لا يوجد محتوى مقتطف"
+
+msgid "No body content"
+msgstr "لا يوجد محتوى للجسم"
+
+msgid "No associated blogposts"
+msgstr "لا توجد مدوّنات مرتبطة"
+
+msgid "Sub categories"
+msgstr "التصنيفات الفرعية"
+
+msgid "Related courses"
+msgstr "الدورات ذات الصلة"
+
+msgid "See all courses"
+msgstr "مشاهدة جميع الدورات"
+
+msgid "Related organizations"
+msgstr "المنظمات ذات الصلة"
+
+msgid "Related blogposts"
+msgstr "مدوّنة ذات صلة"
+
+msgid "Related persons"
+msgstr "الأشخاص ذوو الصلة"
+
+msgid "No categories"
+msgstr "لا توجد فئات حتى الآن"
+
+msgid "Ref. "
+msgstr "المرجع "
+
+msgid "No associated categories"
+msgstr "لا توجد فئات مرتبطة"
+
+msgid "Duration:"
+msgstr "المدة:"
+
+msgid "Effort:"
+msgstr "جهد:"
+
+msgid "Pace:"
+msgstr "السبيل:"
+
+msgctxt "course_detail__title"
+msgid "Description"
+msgstr "وصف"
+
+msgctxt "course_detail__title"
+msgid "Organizations"
+msgstr "المنظمات"
+
+msgid "Languages"
+msgstr "اللغات"
+
+msgid "body"
+msgstr "الجسم"
diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/es_ES/LC_MESSAGES/django.po b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/es_ES/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..0352a0aa42
--- /dev/null
+++ b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/es_ES/LC_MESSAGES/django.po
@@ -0,0 +1,1428 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: richie\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-31 17:41+0100\n"
+"PO-Revision-Date: 2024-11-20 14:09\n"
+"Last-Translator: \n"
+"Language-Team: Spanish\n"
+"Language: es_ES\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Crowdin-Project: richie\n"
+"X-Crowdin-Project-ID: 308578\n"
+"X-Crowdin-Language: es-ES\n"
+"X-Crowdin-File: backend.pot\n"
+"X-Crowdin-File-ID: 32\n"
+
+#: newsite/settings.py:250 newsite/settings.py:260
+msgid "Dashboard"
+msgstr ""
+
+#: newsite/settings.py:251
+msgid "{base_url:s}/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:261
+msgid "/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:264
+msgid "Teacher dashboard"
+msgstr ""
+
+#: newsite/settings.py:265
+msgid "/dashboard/teacher"
+msgstr ""
+
+#: newsite/settings.py:287
+msgid "Profile"
+msgstr ""
+
+#: newsite/settings.py:288
+msgid "{base_url:s}/u/(username)"
+msgstr ""
+
+#: newsite/settings.py:291
+#, fuzzy
+#| msgid "Accordion"
+msgid "Account"
+msgstr "Acordión"
+
+#: newsite/settings.py:292
+msgid "{base_url:s}/account/settings"
+msgstr ""
+
+#: newsite/settings.py:385
+msgid "Teaser"
+msgstr "Teaser"
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "English"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "French"
+msgstr ""
+
+msgid "Richie Plugins"
+msgstr "Plugins de Richie"
+
+msgid "Define a duration as a number of time units"
+msgstr "Definir una duración como un número de unidades de tiempo"
+
+#, python-format
+msgid "%(value)s is not a valid choice for a time unit."
+msgstr "%(value)s no es una opción válida para una unidad de tiempo."
+
+msgid "A composite duration should be a pair: number and time unit."
+msgstr "Una duración compuesta debe ser un par: número y unidad de tiempo."
+
+msgid "A composite duration should be a round number of time units."
+msgstr ""
+"Una duración compuesta debe ser un número redondeado de unidades de "
+"tiempo."
+
+msgid "A composite duration should be positive."
+msgstr "Una duración compuesta debe ser positiva."
+
+msgid "Define an effort"
+msgstr "Definir un esfuerzo"
+
+msgid "An effort should be a triplet: number, time unit and reference unit."
+msgstr ""
+"El esfuerzo debe ser una tripleta: número, unidad de tiempo y unidad de "
+"referencia."
+
+msgid "An effort should be a round number of time units."
+msgstr "Un esfuerzo debe ser un número redondo de unidades de tiempo."
+
+msgid "An effort should be positive."
+msgstr "Un esfuerzo debería ser positivo."
+
+msgid "The effort time unit should be shorter than the reference unit."
+msgstr ""
+"La unidad de tiempo de esfuerzo debe ser más corta que la unidad de "
+"referencia."
+
+msgid "{:s} and {:s}"
+msgstr "{:s} y {:s}"
+
+msgid " and "
+msgstr " y "
+
+#, python-format
+msgid "You can only select up to %(limit_value)d choices."
+msgstr "Sólo puede seleccionar hasta %(limit_value)d opciones."
+
+#, python-format
+msgid "Multi select field (up to %(max_choices)s choices)"
+msgstr "Campo de selección múltiple (hasta %(max_choices)s opciones)"
+
+#, python-format
+msgid "Value %(value)s is not a valid choice."
+msgid_plural "Values %(value)s are not valid choices."
+msgstr[0] "El valor %(value)s no es una opción válida."
+msgstr[1] "Los valores %(value)s no son opciones válidas."
+
+msgid ""
+"Storing {:d} choices could require storing a CharField of up to {:d} "
+"characters. Please reduce 'max_choices' or increase 'max_length'."
+msgstr ""
+"Almacenar {:d} opciones podría requerir almacenar un CharField de hasta {:"
+"d} caracteres. Por favor, reduzca 'max_choices' o incremente 'max_length'."
+
+msgid "Your browser doesn't support this video format."
+msgstr "Su navegador no admite este formato de vídeo."
+
+msgid "You are here:"
+msgstr "Usted está aquí:"
+
+msgid "Skip to main content"
+msgstr "Saltar al contenido principal"
+
+msgid "Go to homepage"
+msgstr "Ir a la página de inicio"
+
+msgid "Contact us"
+msgstr "Contáctenos"
+
+msgid "Life-changing learning!"
+msgstr "¡Aprendizaje que cambia la vida!"
+
+msgid "Learn more"
+msgstr "Saber más"
+
+msgid "Powered by"
+msgstr "Impulsado por"
+
+msgid "This page has no child objects"
+msgstr "Esta página no tiene objetos secundarios"
+
+msgid "Back to home"
+msgstr "Volver al inicio"
+
+msgid "Pagination"
+msgstr "Paginación"
+
+#, python-format
+msgid "Currently reading last page %(page)s"
+msgstr "Leyendo la última página %(page)s"
+
+#, python-format
+msgid "Currently reading page %(page)s"
+msgstr "Actualmente leyendo la página %(page)s"
+
+#, python-format
+msgid "Page %(page)s"
+msgstr "Página %(page)s"
+
+#, python-format
+msgid "Previous page %(page)s"
+msgstr "Página anterior %(page)s"
+
+#, python-format
+msgid "Last page %(page)s"
+msgstr "Última página %(page)s"
+
+#, python-format
+msgid "Next page %(page)s"
+msgstr "Página siguiente %(page)s"
+
+#, python-format
+msgid "Richie news: %(title)s"
+msgstr "Noticias de Richie: %(title)s"
+
+#, python-format
+msgid "Richie news: %(title)s %(url)s"
+msgstr "Noticias de Richie: %(title)s %(url)s"
+
+msgid "Share on Facebook"
+msgstr "Compartir en Facebook"
+
+msgid "Share on Twitter"
+msgstr "Compartir en Twitter"
+
+msgid "Share on Linkedin"
+msgstr "Compartir en Linkedin"
+
+msgid "Share by Email"
+msgstr "Compartir por Email"
+
+msgid "Follow a course online with Richie"
+msgstr "Sigua un curso en línea con Richie"
+
+#, python-format
+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"
+
+msgid "Facebook"
+msgstr "Facebook"
+
+msgid "Twitter page"
+msgstr "Página de Twitter"
+
+msgid "Bad request"
+msgstr "Solicitud errónea"
+
+msgid ""
+"Your query seems to be malformed. Please check your data and try again."
+msgstr ""
+"Su consulta parece ser incorrecta. Por favor, compruebe sus datos e "
+"inténtelo de nuevo."
+
+msgid "Forbidden"
+msgstr "Prohibido"
+
+msgid "You do not have the required permissions to access this resource."
+msgstr "No tiene los permisos necesarios para acceder a este contenido."
+
+msgid "Page not found"
+msgstr "No se pudo encontrar la página"
+
+msgid "The requested resource does not exist."
+msgstr "El recurso solicitado no existe."
+
+msgid "Server bad request"
+msgstr "Solicitud errónea del servidor"
+
+msgid "Something went wrong. Please try again later."
+msgstr "Algo ha fallado. Por favor, inténtelo de nuevo más tarde."
+
+msgid "Course could not be found."
+msgstr "No se pudo encontrar el curso."
+
+msgid "See user group"
+msgstr "Ver grupo de usuarios"
+
+msgid "See filer folder"
+msgstr "Ver carpeta de archivos"
+
+msgid "Organization"
+msgstr "Organizaciones"
+
+msgid "Organization by Category"
+msgstr "Organización por categoría"
+
+msgid "Category"
+msgstr "Categoría"
+
+msgid "Course"
+msgstr "Curso"
+
+msgid "Person"
+msgstr "Persona"
+
+msgid "Licence"
+msgstr "Licencia"
+
+msgid "Post"
+msgstr "Publicar"
+
+msgid "Program"
+msgstr "Programa"
+
+msgid "{!s} settings"
+msgstr "{!s} configuración"
+
+msgid "Snapshot this page..."
+msgstr "Captura instantánea de esta página..."
+
+msgid ""
+"This will place a copy of this page as its child and move all its "
+"courseruns as children of its new copy."
+msgstr ""
+"Esto colocará una copia de esta página como su hijo y moverá a todos sus "
+"sesiones de curso como hijos de su nueva copia."
+
+msgid "New page"
+msgstr "Nueva página"
+
+msgid "Create a new page next to the current page."
+msgstr "Crear una nueva página junto a la página actual."
+
+msgid "New sub page"
+msgstr "Nueva subpágina"
+
+msgid "Create a page below the current page."
+msgstr "Crear una página debajo de la página actual."
+
+msgid "Page title"
+msgstr "Título de página"
+
+msgid "Title of the page in current language"
+msgstr "Título de la página en el idioma actual"
+
+msgid "Page slug"
+msgstr "Slug de página"
+
+msgid "Slug of the page in current language"
+msgstr "Slug de la página en el idioma actual"
+
+msgid ""
+"This slug is too long. The length of the path built by prepending the "
+"slug of the parent page would be {:d} characters long and it should be "
+"less than 255"
+msgstr ""
+"Este slug es demasiado largo. La longitud de la ruta construida que "
+"antecede el slug de la página padre sería {:d} caracteres de largo y "
+"debería ser menor de 255"
+
+msgid "This slug is already in use"
+msgstr "Este slug ya ha sido utilizado"
+
+msgid ""
+"You must first create a parent page and set its `reverse_id` to `{:s}`."
+msgstr ""
+"Primero debe crear una página padre y establecer su `reverse_id` a `{:s}`."
+
+msgid "Code"
+msgstr "Código"
+
+msgid "Unique reference for the course."
+msgstr "Referencia única para el curso."
+
+msgid "New course page"
+msgstr "Nueva página de curso"
+
+msgid "Create a new course page"
+msgstr "Crear una nueva página de curso"
+
+msgid "Unique reference for the organization."
+msgstr "Referencia única para la organización."
+
+msgid "New organization page"
+msgstr "Nueva página de organización"
+
+msgid "Create a new organization page"
+msgstr "Crear una nueva página de organización"
+
+msgid "New category page"
+msgstr "Nueva página de categoría"
+
+msgid "Create a new category page"
+msgstr "Crear una nueva página de categoría"
+
+msgid "New blog post"
+msgstr "Nueva entrada de blog"
+
+msgid "Create a new blog post"
+msgstr "Crear una nueva entrada de blog"
+
+msgid "New person page"
+msgstr "Nueva página persona"
+
+msgid "Create a new person page"
+msgstr "Crear una nueva página persona"
+
+msgid "New program"
+msgstr "Nuevo programa"
+
+msgid "Create a new program"
+msgstr "Crear un nuevo programa"
+
+msgid "Admin"
+msgstr "Admin"
+
+msgid "Inherit"
+msgstr "Heredar"
+
+msgid "Default"
+msgstr "Por defecto"
+
+msgid "Mini"
+msgstr "Mini"
+
+msgid "Favorite"
+msgstr "Favorito"
+
+msgid "Badge"
+msgstr "Badge"
+
+msgid "Tag"
+msgstr "Etiqueta"
+
+msgid "Small"
+msgstr "Pequeño"
+
+msgid "Large"
+msgstr "Grande"
+
+msgid "Card"
+msgstr "Tarjeta"
+
+msgid "Row"
+msgstr "Fila"
+
+msgid "minute"
+msgstr "minuto"
+
+msgid "minutes"
+msgstr "minutos"
+
+msgid "hour"
+msgstr "hora"
+
+msgid "hours"
+msgstr "horas"
+
+msgid "day"
+msgstr "día"
+
+msgid "days"
+msgstr "dias"
+
+msgid "week"
+msgstr "semana"
+
+msgid "weeks"
+msgstr "semanas"
+
+msgid "month"
+msgstr "mes"
+
+msgid "months"
+msgstr "meses"
+
+msgid "Run {:d}"
+msgstr "Ejecutar {:d}"
+
+msgid "You can't snapshot a snapshot."
+msgstr "No puedes hacer una captura instantánea de una captura instantánea."
+
+msgid "You don't have sufficient permissions to snapshot this page."
+msgstr ""
+"No tiene permisos suficientes para hacer una captura instantánea en esta "
+"página."
+
+msgid "Archived on {now:%Y-%m-%d %H:%M:%S}"
+msgstr "Archivado el {ahora:%Y-%m-%d %H:%M:%S}"
+
+msgid "{title:s} ({version!s})"
+msgstr "{title:s} ({version!s})"
+
+msgid "blog post"
+msgstr "entrada de blog"
+
+msgid "blog posts"
+msgstr "entradas de blog"
+
+msgid "variant"
+msgstr "variante"
+
+msgid "Optional glimpse variant for a custom look."
+msgstr "Variante vista previa optional para un aspecto personalizado."
+
+msgid "blog post plugin"
+msgstr "plugin de entrada de blog"
+
+msgid "blog post plugins"
+msgstr "plugins de entrada de blog"
+
+msgid "category"
+msgstr "categoría"
+
+msgid "categories"
+msgstr "categorías"
+
+msgid "category plugin"
+msgstr "plugin de categoría"
+
+msgid "category plugins"
+msgstr "plugins de categoría"
+
+msgid "enroll now"
+msgstr "inscribirse ahora"
+
+msgid "study now"
+msgstr "estudiar ahora"
+
+msgid "starting on"
+msgstr "comenzando el"
+
+msgid "closing on"
+msgstr "cerrando en"
+
+msgid "enrollment closed"
+msgstr "fin de inscripción"
+
+msgid "on-going"
+msgstr "en curso"
+
+msgid "archived"
+msgstr "archivado"
+
+msgid "to be scheduled"
+msgstr "por ser programado"
+
+msgid "forever open"
+msgstr "siempre abierto"
+
+msgid "code"
+msgstr "código"
+
+msgid "The course time range."
+msgstr "El intervalo de tiempo del curso."
+
+msgid "Total amount of time to complete this course."
+msgstr "Cantidad total de tiempo para completar este curso."
+
+msgid "is listed"
+msgstr "está listado"
+
+msgid "Tick if you want the course to be visible on the search page."
+msgstr "Marque si desea que el curso sea visible en la página de búsqueda."
+
+msgid "is self paced"
+msgstr "es a su propio ritmo"
+
+msgid "Tick if the course pace is self paced."
+msgstr "Marque si el ritmo del curso es a ritmo propio."
+
+msgid "course"
+msgstr "curso"
+
+msgid "courses"
+msgstr "cursos"
+
+msgid "Self paced"
+msgstr "A ritmo propio"
+
+msgid "~{pace:d} {effort_unit!s}/{duration_unit!s}"
+msgstr "~{pace:d} {esfuerzo_unidad!s}/{duración_unidad!s}"
+
+msgid "~{pace_hours:d}h{pace_minutes:d}/{duration_unit!s}"
+msgstr "~{pace_hours:d}h{pace_minutes:d}/{duration_unit!s}"
+
+msgid "Manual"
+msgstr "Manual"
+
+msgid "Synchronization to draft page"
+msgstr "Sincronización a página de borrador"
+
+msgid "Synchronization to public page"
+msgstr "Sincronización a página pública"
+
+msgid ""
+"course_and_search - show on the course page and include in search results"
+msgstr ""
+"curse_and_search - mostrar en la página del curso e incluir en los "
+"resultados de búsqueda"
+
+msgid "course_only - show on the course page and hide from search results"
+msgstr ""
+"curso solo - mostrar en la página del curso y ocultar de los resultados "
+"de la búsqueda"
+
+msgid "hidden - hide on the course page and from search results"
+msgstr ""
+"oculto - ocultar en la página del curso y de los resultados de búsqueda"
+
+msgid "resource link"
+msgstr "enlace de recursos"
+
+msgid "course start"
+msgstr "inicio del curso"
+
+msgid "course end"
+msgstr "fin del curso"
+
+msgid "enrollment start"
+msgstr "inicio de inscripción"
+
+msgid "enrollment end"
+msgstr "fin de inscripción"
+
+msgid "The list of languages in which the course content is available."
+msgstr "Lista de idiomas en los que el contenido del curso está disponible."
+
+msgid "enrollment count"
+msgstr "número de inscripciones"
+
+msgid "The number of enrolled students"
+msgstr "El número de estudiantes inscritos"
+
+msgid "catalog visibility"
+msgstr "visibilidad del catálogo"
+
+msgid "course run"
+msgstr "sesión de curso"
+
+msgid "course runs"
+msgstr "sesión de curso"
+
+msgid "title"
+msgstr "título"
+
+msgid "Course run translation"
+msgstr "Traducción de la sesión de curso"
+
+msgid "Course run translations"
+msgstr "Traducciones de la sesión de curso"
+
+msgid "Empty title"
+msgstr "Sin título"
+
+msgid "course plugin"
+msgstr "plugin de curso"
+
+msgid "course plugins"
+msgstr "plugins de curso"
+
+msgid "logo"
+msgstr "logo"
+
+msgid "url"
+msgstr "url"
+
+msgid "name"
+msgstr "nombre"
+
+msgid "content"
+msgstr "contenido"
+
+msgid "licence"
+msgstr "licencia"
+
+msgid "licences"
+msgstr "licencias"
+
+msgid "Licence translation"
+msgstr "Traducción de la licencia"
+
+msgid "licence translations"
+msgstr "traducciones de licencias"
+
+msgid "description"
+msgstr "descripción"
+
+msgid "licence plugin"
+msgstr "plugin de licencia"
+
+msgid "licence plugins"
+msgstr "plugins de licencia"
+
+msgid "organization"
+msgstr "organización"
+
+msgid "organizations"
+msgstr "organizaciones"
+
+msgid "organization plugin"
+msgstr "plugin de la organización"
+
+msgid "organization plugins"
+msgstr "plugins de organización"
+
+msgid "organizations by category plugin"
+msgstr "organizaciones por plugin de categoría"
+
+msgid "organizations by category plugins"
+msgstr "organizaciones por plugins de categoría"
+
+msgid "person"
+msgstr "persona"
+
+msgid "persons"
+msgstr "personas"
+
+msgid "Custom bio"
+msgstr "Personalizar biografía"
+
+msgid ""
+"Optional: provide a custom bio (if you leave it empty, it will display "
+"the person's bio)."
+msgstr ""
+"Opcional: proporcionar una biografía personalizada (si la deja vacía, se "
+"mostrará la biografía de la persona)."
+
+msgid "person plugin"
+msgstr "plugin de persona"
+
+msgid "person plugins"
+msgstr "plugins de persona"
+
+msgid "program"
+msgstr "programa"
+
+msgid "programs"
+msgstr "programas"
+
+msgid "program plugin"
+msgstr "plugin del programa"
+
+msgid "program plugins"
+msgstr "plugins de programa"
+
+msgid "role"
+msgstr "rol"
+
+msgid ""
+"A role describes all the permissions that should be granted to the user "
+"group."
+msgstr ""
+"Un rol describe todos los permisos que deben concederse al grupo de "
+"usuarios."
+
+msgid "page"
+msgstr "página"
+
+msgid "Page to which this role grants permissions."
+msgstr "Página a la que este rol concede permisos."
+
+msgid "group"
+msgstr "grupo"
+
+msgid "User group that this role controls."
+msgstr "Grupo de usuarios que este rol controla."
+
+msgid "filer folder"
+msgstr "carpeta de archivos"
+
+msgid "Filer folder that this role controls."
+msgstr "Carpeta del archivador que este rol controla."
+
+msgid "page role"
+msgstr "rol de página"
+
+msgid "page roles"
+msgstr "roles de página"
+
+msgid "{:s} | {:s}"
+msgstr "{:s} | {:s}"
+
+msgid "Course page"
+msgstr "Página de curso"
+
+msgid "Organization list"
+msgstr "Lista de organizaciones"
+
+msgid "Organization page"
+msgstr "Página organización"
+
+msgid "Category list"
+msgstr "Lista de categorías"
+
+msgid "Category page"
+msgstr "Página de categoría"
+
+msgid "Blog post list"
+msgstr "Lista de entradas de blog"
+
+msgid "Blog post page"
+msgstr "Página de entrada de blog"
+
+msgid "Person page"
+msgstr "Página persona"
+
+msgid "Person list"
+msgstr "Lista de personas"
+
+msgid "Program page"
+msgstr "Página de programa"
+
+msgid "Program list"
+msgstr "Lista de programas"
+
+msgid "Search"
+msgstr "Buscar"
+
+msgid "List of child pages"
+msgstr "Lista de páginas hijas"
+
+msgid "Homepage"
+msgstr "Página principal"
+
+msgid "Single column"
+msgstr "Columna única"
+
+msgid "Three columns: (33% | 33% | 33%)"
+msgstr "Tres columnas: (33% | 33% | 33%)"
+
+msgid "Two columns: (50% | 50%)"
+msgstr "Dos columnas: (50% | 50%)"
+
+msgid "Two columns: (25% | 75%)"
+msgstr "Dos columnas: (25% | 75%)"
+
+msgid "Two columns: (75% | 25%)"
+msgstr "Dos columnas: (75% | 25%)"
+
+msgid "Footer"
+msgstr "Pie de página"
+
+msgid "Static headline"
+msgstr "Encabezado estático"
+
+msgid "Main content"
+msgstr "Contenido principal"
+
+msgid "Secondary content"
+msgstr "Contenido secundario"
+
+msgid "Third content"
+msgstr "Tercer contenido"
+
+msgid "Cover"
+msgstr "Portada"
+
+msgid "Catch phrase"
+msgstr "Eslogan"
+
+msgid "About the course"
+msgstr "Acerca del curso"
+
+msgid "What you will learn"
+msgstr "Lo que aprenderás"
+
+msgid "Format"
+msgstr "Formato"
+
+msgid "Prerequisites"
+msgstr "Prerrequisitos"
+
+msgid "Team"
+msgstr "Equipo"
+
+msgid "Plan"
+msgstr "Plan"
+
+msgid "Complementary information"
+msgstr "Información complementaria"
+
+msgid "License for the course content"
+msgstr "Licencia para el contenido del curso"
+
+msgid "License for the content created by course participants"
+msgstr "Licencia para el contenido creado por los participantes del curso"
+
+msgid "Categories"
+msgstr "Categorías"
+
+msgid "Icon"
+msgstr "Icono"
+
+msgid "Organizations"
+msgstr "Organizaciones"
+
+msgid "Assessment and Certification"
+msgstr "Evaluación y certificación"
+
+msgid "Banner"
+msgstr "Banner"
+
+msgid "Logo"
+msgstr "Logo"
+
+msgid "Description"
+msgstr "Descripción"
+
+msgid "Excerpt"
+msgstr "Extracto"
+
+msgid "Portrait"
+msgstr "Retrato"
+
+msgid "Bio"
+msgstr "Biografía"
+
+msgid "Main Content"
+msgstr "Contenido principal"
+
+msgid "Author"
+msgstr "Autor"
+
+msgid "Body"
+msgstr "Cuerpo"
+
+msgid "Headline"
+msgstr "Encabezado"
+
+msgid "Courses"
+msgstr "Cursos"
+
+msgid "Button caesura"
+msgstr "Botón cesura"
+
+msgid "Full width"
+msgstr "Anchura total"
+
+msgid "No categories yet."
+msgstr "No hay categorías aún."
+
+msgid "Not published yet"
+msgstr "Sin publicar"
+
+msgid "No author yet"
+msgstr "No hay autor aún"
+
+msgid "No excerpt content"
+msgstr "No hay extracto de contenido"
+
+msgid "No body content"
+msgstr "No hay contenido en el cuerpo"
+
+msgid "Related posts"
+msgstr "Entradas relacionadas"
+
+msgid "No associated blogposts"
+msgstr "No hay entradas de blogs asociadas"
+
+msgid "Sub categories"
+msgstr "Subcategorías"
+
+msgid "Related courses"
+msgstr "Cursos relacionados"
+
+msgid "Courses pagination"
+msgstr "Paginación de cursos"
+
+msgid "See all courses"
+msgstr "Ver todos los cursos"
+
+msgid "Related organizations"
+msgstr "Organizaciones relacionadas"
+
+msgid "Related organizations pagination"
+msgstr "Paginación de organizaciones relacionadas"
+
+msgid "Related blogposts"
+msgstr "Entradas de blog relacionadas"
+
+msgid "Related blogposts pagination"
+msgstr "Paginación de entradas de blog relacionadas"
+
+msgid "Related persons"
+msgstr "Personas relacionadas"
+
+msgid "Related persons pagination"
+msgstr "Paginación de personas relacionadas"
+
+msgid "No categories"
+msgstr "Sin categorías"
+
+msgid "Ref. "
+msgstr "Ref. "
+
+msgid "No associated categories"
+msgstr "No hay categorías asociadas"
+
+msgid "Duration:"
+msgstr "Duración:"
+
+msgid "Effort:"
+msgstr "Esfuerzo:"
+
+msgid "Pace:"
+msgstr "Ritmo:"
+
+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."
+
+msgid "course cover image"
+msgstr "imagen de portada del curso"
+
+#, python-format
+msgid ""
+"\n"
+" Archived on %(creation_date)s\n"
+" "
+msgstr ""
+"\n"
+" Archivado el %(creation_date)s\n"
+" "
+
+msgid "Go to current version"
+msgstr "Ir a la sesión actual"
+
+msgid "Glimpse cover"
+msgstr "Vistazo de la cobertura"
+
+msgid "Add an image for course cover on its glimpse."
+msgstr "Agrega una imagen para la portada del curso en la vista previa."
+
+msgctxt "course_detail__title"
+msgid "What you will learn"
+msgstr "Lo que aprenderás"
+
+msgid "At the end of this course, you will be able to:"
+msgstr "Al final de este curso, podrá:"
+
+msgctxt "course_detail__title"
+msgid "Description"
+msgstr "Descripción"
+
+msgctxt "course_detail__title"
+msgid "Format"
+msgstr "Formato"
+
+msgid "How is the course structured?"
+msgstr "¿Cómo está estructurado el curso?"
+
+msgctxt "course_detail__title"
+msgid "Prerequisites"
+msgstr "Prerrequisitos"
+
+msgid "What are the prerequisites to follow this course?"
+msgstr "¿Cuáles son los perrequisitos para seguir este curso?"
+
+msgctxt "course_detail__title"
+msgid "Assessment and certification"
+msgstr "Evaluación y certificación"
+
+msgid "How is progress evaluated and/or certified?"
+msgstr "¿Cómo se evalúa y/o certifica el progreso?"
+
+msgctxt "course_detail__title"
+msgid "Course plan"
+msgstr "Plan del curso"
+
+msgid "Enter here the detailed course plan."
+msgstr "Ingrese aquí el plan detallado del curso."
+
+msgctxt "course_detail__title"
+msgid "Course team"
+msgstr "Equipo del curso"
+
+msgid "Who are the teachers in the course team?"
+msgstr "¿Quiénes son los profesores del equipo del curso?"
+
+msgctxt "course_detail__title"
+msgid "Organizations"
+msgstr "Organizaciones"
+
+msgid "What are the organizations publishing this course?"
+msgstr "¿Cuáles son las organizaciones que publican este curso?"
+
+msgctxt "course_detail__title"
+msgid "License"
+msgstr "Licencia"
+
+msgid "What is the license for the course content?"
+msgstr "¿Cuál es la licencia para el contenido del curso?"
+
+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?"
+
+msgid "Course team"
+msgstr "Equipo del curso"
+
+msgid "License"
+msgstr "Licencia"
+
+#, python-format
+msgid ""
+"\n"
+" A %(model)s object is missing on this %(model)s page. Please "
+"select another page template.\n"
+"
\n"
+" If what you need is a %(model)s page, you need to create it via "
+"the wizard and choose \"New %(model)s page\".\n"
+" "
+msgstr ""
+"\n"
+" Falta un objeto %(model)s en esta página %(model)s. Por favor, "
+"seleccione otra plantilla de página.\n"
+"
\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"
+" "
+
+msgid "Main organization"
+msgstr "Organización principal"
+
+msgid "Related courses pagination"
+msgstr "Paginación de cursos relacionados"
+
+msgid "No organization yet"
+msgstr "Aún no hay organización"
+
+msgid "Enter your bio here..."
+msgstr "Introduzca su biografía aquí..."
+
+#, python-format
+msgid "%(title)s avatar"
+msgstr "%(title)s avatar"
+
+msgid "No associated organizations"
+msgstr "No hay organizaciones asociadas"
+
+msgid "Blogposts"
+msgstr "Artículos de blog"
+
+msgid "Blogposts pagination"
+msgstr "Paginación de entradas de blog"
+
+msgid "No persons"
+msgstr "No hay personas"
+
+msgid "program cover image"
+msgstr "imagen de portada del programa"
+
+msgid "No associated programs"
+msgstr "No hay programas asociados"
+
+#, python-brace-format
+msgid "Run {i:d}"
+msgstr "Ejecutar {i:d}"
+
+msgid "Regenerate search index..."
+msgstr "Regenerar índice de búsqueda..."
+
+msgid "New courses"
+msgstr "Nuevos cursos"
+
+msgid "First session"
+msgstr "Primera sesión"
+
+msgid "Availability"
+msgstr "Disponibilidad"
+
+msgid "Languages"
+msgstr "Idiomas"
+
+msgid "Subjects"
+msgstr "Temas"
+
+msgid "Levels"
+msgstr "Niveles"
+
+msgid "Persons"
+msgstr "Personas"
+
+msgid "Open for enrollment"
+msgstr "Inscripciones abiertas"
+
+msgid "Coming soon"
+msgstr "Próximamente"
+
+msgid "On-going"
+msgstr "En curso"
+
+msgid "Archived"
+msgstr "Archivado"
+
+msgid "Sort by configuration"
+msgstr "Ordenar por configuración"
+
+msgid "Sort by facet count"
+msgstr "Ordenar por número de facetas"
+
+msgid "Sort alphabetically"
+msgstr "Ordenar alfabéticamente"
+
+msgid "You are not allowed to manage the search index."
+msgstr "No está autorizado para administrar el índice de búsqueda."
+
+msgid "The search index was successfully bootstrapped"
+msgstr "El índice de búsqueda fue impulsado con éxito"
+
+msgid "Glimpse"
+msgstr "Vista previa"
+
+msgid "Link settings"
+msgstr "Configuración de enlace"
+
+msgid "Square card"
+msgstr "Tarjeta cuadrada"
+
+msgid "Quote"
+msgstr "Citación"
+
+msgid "Half row"
+msgstr "Media fila"
+
+msgid "Full row"
+msgstr "Fila completa"
+
+msgid "Variant"
+msgstr "Variante"
+
+msgid "Form factor variant"
+msgstr "Variante del factor de forma"
+
+msgid "image"
+msgstr "imagen"
+
+msgid "Content"
+msgstr "Contenido"
+
+msgid "External URL"
+msgstr "URL externa"
+
+msgid "Make the glimpse as a link with an external URL."
+msgstr "Configurar la vista previa como un enlace con una URL externa."
+
+msgid "Internal URL"
+msgstr "URL interna"
+
+msgid "Make the glimpse as a link with an internal (page) URL."
+msgstr ""
+"Configurar la vista previa como un enlace con una URL interna (página)."
+
+msgid "HTML Sitemap"
+msgstr "Mapa del sitio HTML"
+
+msgid ""
+"Press save to create a site map. You will then be able to add a child "
+"plugin for each subtree in your sitemap."
+msgstr ""
+"Haga clic en guardar para crear un mapa del sitio. Luego podrá añadir un "
+"plugin hijo para cada subárbol en su mapa del sitio."
+
+msgid "HTML sitemap page"
+msgstr "Página del mapa del sitio HTML"
+
+msgid "root page"
+msgstr "página raíz"
+
+msgid ""
+"This page will be at the root of your sitemap (or its children if the "
+"\"include root page\" flag is unticked)."
+msgstr ""
+"Esta página estará en la raíz del mapa del sitio (o sus hijos si la "
+"bandera \"incluir página raíz\" está desmarcada)."
+
+msgid "max depth"
+msgstr "profundidad máxima"
+
+msgid ""
+"Limit the level of nesting that your sitemap will contain below this "
+"page. An empty field or 0 equals to no limit."
+msgstr ""
+"Limite el nivel de anidación que su mapa del sitio contendrá debajo de "
+"esta página. Un campo vacío o 0 es igual a ningún límite."
+
+msgid "in navigation"
+msgstr "en navegación"
+
+msgid ""
+"Tick to exclude from sitemap the pages that are excluded from navigation."
+msgstr ""
+"Marque para excluir del mapa del sitio las páginas que están excluidas de "
+"la navegación."
+
+msgid "include root page"
+msgstr "incluir página raíz"
+
+msgid ""
+"Tick to include the root page and its descendants. Untick to include only "
+"its descendants."
+msgstr ""
+"Marque para incluir la página raíz y sus descendientes. Desmarque para "
+"incluir sólo sus descendientes."
+
+msgid "HTML Sitemaps"
+msgstr "Mapas de sitio HTML"
+
+msgid "Sitemap"
+msgstr "Mapa del sitio"
+
+msgid "Large Banner"
+msgstr "Gran banner"
+
+msgid "Medias"
+msgstr "Medias"
+
+msgid "Hero introduction"
+msgstr "Introducción"
+
+msgid "background image"
+msgstr "imagen de fondo"
+
+msgid "Template"
+msgstr "Plantilla"
+
+msgid "Choose template to render plugin."
+msgstr "Elija la plantilla para proveer el plugin."
+
+msgid "Explore our catalog"
+msgstr "Explore nuestro catálogo"
+
+msgid "Search in our courses"
+msgstr "Buscar en nuestros cursos"
+
+msgid "LTI consumer"
+msgstr "Consumidor LTI"
+
+msgid "Custom provider configuration"
+msgstr "Configuración de proveedor personalizado"
+
+msgid "shared secret"
+msgstr "secreto compartido"
+
+msgid ""
+"The url is not valid for this provider. It should be of the form \"{:s}\"."
+msgstr ""
+"La url no es válida para este proveedor. Debería comenzar con \"{:s}\"."
+
+msgid ""
+"The url is not valid for this provider. It should start with \"{:s}\"."
+msgstr ""
+"La url no es válida para este proveedor. Debería comenzar con \"{:s}\"."
+
+msgid "Please choose a predefined provider, or fill fields below"
+msgstr ""
+"Por favor, elija un proveedor predefinido, o rellene los campos a "
+"continuación"
+
+msgid "Please choose a predefined provider above, or fill this field"
+msgstr ""
+"Por favor, elija un proveedor predefinido arriba, o rellene este campo"
+
+msgid "Please fill this field"
+msgstr "Por favor, rellene este campo"
+
+msgid "LTI url"
+msgstr "url LTI"
+
+msgid ""
+"For a predefined provider, leave this field empty for uploading new "
+"content."
+msgstr ""
+"Para un proveedor predefinido, deje este campo vacío para cargar nuevo "
+"contenido."
+
+msgid "Predefined LTI provider"
+msgstr "Proveedor de LTI predefinido"
+
+msgid "Please choose a predefined provider or fill fields below."
+msgstr ""
+"Por favor, elija un proveedor predefinido, o rellene los campos a "
+"continuación."
+
+msgid "Nested item"
+msgstr "Artículo anidado"
+
+msgid "List"
+msgstr "Lista"
+
+msgid "Plain text"
+msgstr "Texto simple"
+
+msgid "plain text"
+msgstr "texto plano"
+
+msgid "Section"
+msgstr "Sección"
+
+msgid "Primary scheme"
+msgstr "Esquema primario"
+
+msgid "Secondary scheme"
+msgstr "Esquema secundario"
+
+msgid "Tertiary scheme"
+msgstr "Esquema terciario"
+
+msgid "Quaternary scheme"
+msgstr "Esquema cuaternario"
+
+msgid "Quinary scheme"
+msgstr "Esquema Quinario"
+
+msgid "Senary scheme"
+msgstr "Esquema senario"
+
+msgid "Septenary scheme"
+msgstr "Esquema septenario"
+
+msgid "Item tiles"
+msgstr "Mosaicos de objetos"
+
+msgid "Optional template for custom look."
+msgstr "Plantilla opcional para aspecto personalizado."
+
+msgid "Attributes"
+msgstr "Atributos"
+
+msgid "Image"
+msgstr "Imagen"
+
+msgid "Simple text"
+msgstr "Texto simple"
+
+msgid "body"
+msgstr "cuerpo"
+
+#, python-format
+msgid ""
+"Ensure this text has at most %(limit_value)d character (it has "
+"%(show_value)d)."
+msgid_plural ""
+"Ensure this text has at most %(limit_value)d characters (it has "
+"%(show_value)d)."
+msgstr[0] ""
+"Asegúrese de que este texto tiene como máximo %(limit_value)d caracter "
+"(tiene %(show_value)d)."
+msgstr[1] ""
+"Asegúrese de que este texto tiene como máximo %(limit_value)d caracteres "
+"(tiene %(show_value)d)."
diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/fr_CA/LC_MESSAGES/django.po b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/fr_CA/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..36b752b495
--- /dev/null
+++ b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/fr_CA/LC_MESSAGES/django.po
@@ -0,0 +1,1592 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: richie\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-31 17:41+0100\n"
+"PO-Revision-Date: 2024-11-20 14:09\n"
+"Last-Translator: \n"
+"Language-Team: French, Canada\n"
+"Language: fr_CA\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Crowdin-Project: richie\n"
+"X-Crowdin-Project-ID: 308578\n"
+"X-Crowdin-Language: fr-CA\n"
+"X-Crowdin-File: backend.pot\n"
+"X-Crowdin-File-ID: 32\n"
+
+#: newsite/settings.py:250 newsite/settings.py:260
+#, fuzzy
+#| msgid "dashboard"
+msgid "Dashboard"
+msgstr "tableau de bord"
+
+#: newsite/settings.py:251
+msgid "{base_url:s}/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:261
+#, fuzzy
+#| msgid "dashboard"
+msgid "/dashboard/"
+msgstr "tableau de bord"
+
+#: newsite/settings.py:264
+#, fuzzy
+#| msgid "dashboard"
+msgid "Teacher dashboard"
+msgstr "tableau de bord"
+
+#: newsite/settings.py:265
+#, fuzzy
+#| msgid "dashboard"
+msgid "/dashboard/teacher"
+msgstr "tableau de bord"
+
+#: newsite/settings.py:287
+msgid "Profile"
+msgstr ""
+
+#: newsite/settings.py:288
+msgid "{base_url:s}/u/(username)"
+msgstr ""
+
+#: newsite/settings.py:291
+#, fuzzy
+#| msgid "Accordion"
+msgid "Account"
+msgstr "Accordéon"
+
+#: newsite/settings.py:292
+msgid "{base_url:s}/account/settings"
+msgstr ""
+
+#: newsite/settings.py:385
+msgid "Teaser"
+msgstr "Accroche"
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "English"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "French"
+msgstr ""
+
+msgid "Richie Plugins"
+msgstr "Plugins Richie"
+
+msgid "Define a duration as a number of time units"
+msgstr "Définir une durée avec un nombre d'unités de temps"
+
+#, python-format
+msgid "%(value)s is not a valid choice for a time unit."
+msgstr "%(value)s n'est pas un choix valide d'unité de temps."
+
+msgid "A composite duration should be a pair: number and time unit."
+msgstr "Une durée composite doit être une paire : nombre / unité de temps."
+
+msgid "A composite duration should be a round number of time units."
+msgstr "Une durée composite doit être un nombre entier d'unités de temps."
+
+msgid "A composite duration should be positive."
+msgstr "Une durée composite doit être positive."
+
+msgid "Define an effort"
+msgstr "Définir un effort"
+
+msgid "An effort should be a triplet: number, time unit and reference unit."
+msgstr ""
+"Un effort doit être un triplet : numéro / unité de temps / unité de "
+"référence."
+
+msgid "An effort should be a round number of time units."
+msgstr "Un effort devrait être un nombre entier d'unités de temps."
+
+msgid "An effort should be positive."
+msgstr "Un effort doit être positif."
+
+msgid "The effort time unit should be shorter than the reference unit."
+msgstr ""
+"L'unité de temps d'effort doit être plus courte que l'unité de temps de "
+"référence."
+
+msgid "{:s} and {:s}"
+msgstr "{:s} et {:s}"
+
+msgid " and "
+msgstr " et "
+
+#, python-format
+msgid "You can only select up to %(limit_value)d choices."
+msgstr "Vous pouvez sélectionner jusqu'à %(limit_value)d choix."
+
+#, python-format
+msgid "Multi select field (up to %(max_choices)s choices)"
+msgstr "Champ de sélection multiple (jusqu'à %(max_choices)s choix)"
+
+#, python-format
+msgid "Value %(value)s is not a valid choice."
+msgid_plural "Values %(value)s are not valid choices."
+msgstr[0] "La valeur %(value)s n'est pas un choix valide."
+msgstr[1] "Les valeurs %(value)s ne sont pas des choix valides."
+
+msgid ""
+"Storing {:d} choices could require storing a CharField of up to {:d} "
+"characters. Please reduce 'max_choices' or increase 'max_length'."
+msgstr ""
+"L'enregistrement de {:d} choix nécessite l'enregistrement d'un CharField "
+"de {:d} caractères. Veuillez réduire 'max_choices' ou augmenter "
+"'max_length'."
+
+msgid "Video"
+msgstr "Vidéo"
+
+msgid "Your browser doesn't support this video format."
+msgstr "Votre navigateur ne supporte pas ce format de vidéo."
+
+msgid "You are here:"
+msgstr "Vous êtes ici :"
+
+msgid "Skip to main content"
+msgstr "Passer au contenu principal"
+
+msgid "Go to homepage"
+msgstr "Aller à la page d'accueil"
+
+msgid "Menu"
+msgstr "Menu"
+
+msgid "Contact us"
+msgstr "Contactez-nous"
+
+msgid "Life-changing learning!"
+msgstr "Un apprentissage renversant!"
+
+msgid "Learn more"
+msgstr "En savoir plus"
+
+msgid "Powered by"
+msgstr "Propulsé par"
+
+msgid "This page has no child objects"
+msgstr "Cette page n'a pas d'objets enfants"
+
+msgid "Back to home"
+msgstr "Retour à la page d'accueil"
+
+msgid "Pagination"
+msgstr "Pagination"
+
+#, python-format
+msgid "Currently reading last page %(page)s"
+msgstr "Actuellement sur la dernière page %(page)s"
+
+#, python-format
+msgid "Currently reading page %(page)s"
+msgstr "Actuellement sur la page %(page)s"
+
+#, python-format
+msgid "Page %(page)s"
+msgstr "Page %(page)s"
+
+#, python-format
+msgid "Previous page %(page)s"
+msgstr "Page précédente %(page)s"
+
+#, python-format
+msgid "Last page %(page)s"
+msgstr "Dernière page %(page)s"
+
+#, python-format
+msgid "Next page %(page)s"
+msgstr "Page suivante %(page)s"
+
+#, python-format
+msgid "Richie news: %(title)s"
+msgstr "Actualités Richie : %(title)s"
+
+#, python-format
+msgid "Richie news: %(title)s %(url)s"
+msgstr "Actualités Richie : %(title)s %(url)s"
+
+msgid "Share on Facebook"
+msgstr "Partager sur Facebook"
+
+msgid "Share on Twitter"
+msgstr "Partager sur Twitter"
+
+msgid "Share on Linkedin"
+msgstr "Partager sur Linkedin"
+
+msgid "Share by Email"
+msgstr "Partager par courriel"
+
+msgid "Follow a course online with Richie"
+msgstr "Suivre un cours en ligne avec Richie"
+
+#, python-format
+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"
+
+msgid "Facebook"
+msgstr "Facebook"
+
+msgid "Twitter page"
+msgstr "Page Twitter"
+
+msgid "Linkedin page"
+msgstr "Page LinkedIn"
+
+msgid "Bad request"
+msgstr "Requête incorrecte"
+
+msgid ""
+"Your query seems to be malformed. Please check your data and try again."
+msgstr ""
+"Votre requête semble être incorrecte. Veuillez vérifier les informations "
+"envoyées et réessayer."
+
+msgid "Forbidden"
+msgstr "Interdit"
+
+msgid "You do not have the required permissions to access this resource."
+msgstr "Vous n'avez pas les permissions requises pour accéder à ce contenu."
+
+msgid "Page not found"
+msgstr "Page introuvable"
+
+msgid "The requested resource does not exist."
+msgstr "Le contenu demandé n'existe pas."
+
+msgid "Server bad request"
+msgstr "Requête incorrecte au serveur"
+
+msgid "Something went wrong. Please try again later."
+msgstr "Une erreur s'est produite. Merci de réessayer plus tard."
+
+msgid "Course could not be found."
+msgstr "Le cours n'a pas pu être trouvé."
+
+msgid "See user group"
+msgstr "Voir le groupe d'utilisateurs"
+
+msgid "See filer folder"
+msgstr "Voir le dossier du classeur"
+
+msgid "Organization"
+msgstr "Organisation"
+
+msgid "Organization by Category"
+msgstr "Institution par catégorie"
+
+msgid "Category"
+msgstr "Catégorie"
+
+msgid "Course"
+msgstr "Cours"
+
+msgid "Person"
+msgstr "Person."
+
+msgid "Licence"
+msgstr "License"
+
+msgid "Post"
+msgstr "Art."
+
+msgid "Program"
+msgstr "Parcours"
+
+msgid "{!s} settings"
+msgstr "Paramètres de {:s}"
+
+msgid "Snapshot this page..."
+msgstr "Prise d'un instantanée de cette page..."
+
+msgid ""
+"This will place a copy of this page as its child and move all its "
+"courseruns as children of its new copy."
+msgstr ""
+"Ceci copie la page vers une page enfant et les sessions de cours "
+"actuelles deviennent des enfants de cette copie."
+
+msgid "New page"
+msgstr "Nouvelle page"
+
+msgid "Create a new page next to the current page."
+msgstr "Créer une nouvelle page à côté de la page actuelle."
+
+msgid "New sub page"
+msgstr "Nouvelle sous-page"
+
+msgid "Create a page below the current page."
+msgstr "Créer une page sous la page actuelle."
+
+msgid "Page title"
+msgstr "Titre de la page"
+
+msgid "Title of the page in current language"
+msgstr "Titre de la page dans la langue actuelle"
+
+msgid "Page slug"
+msgstr "Chemin de la page"
+
+msgid "Slug of the page in current language"
+msgstr "Chemin de la page dans la langue actuelle"
+
+msgid ""
+"This slug is too long. The length of the path built by prepending the "
+"slug of the parent page would be {:d} characters long and it should be "
+"less than 255"
+msgstr ""
+"Ce chemin est trop long. Le lien construit en faisant précéder ce chemin "
+"par le lien de la page parente serait trop long de {:d} caractères et "
+"devrait être de moins de 255 caractères"
+
+msgid "This slug is already in use"
+msgstr "Ce chemin est déjà utilisé"
+
+msgid ""
+"You must first create a parent page and set its `reverse_id` to `{:s}`."
+msgstr ""
+"Vous devez d’abord créer une page parente dont le 'reverse_id' est la "
+"valeur `{:s}`."
+
+msgid "Code"
+msgstr "Code"
+
+msgid "Unique reference for the course."
+msgstr "Référence unique du cours."
+
+msgid "New course page"
+msgstr "Nouvelle page de cours"
+
+msgid "Create a new course page"
+msgstr "Créez une nouvelle page de cours"
+
+msgid "Unique reference for the organization."
+msgstr "Référence unique de l'institution."
+
+msgid "New organization page"
+msgstr "Nouvelle page d'organisation"
+
+msgid "Create a new organization page"
+msgstr "Créer une nouvelle page d'organisation"
+
+msgid "New category page"
+msgstr "Nouvelle page de catégorie"
+
+msgid "Create a new category page"
+msgstr "Créer une nouvelle page de catégorie"
+
+msgid "New blog post"
+msgstr "Nouveau message de blog"
+
+msgid "Create a new blog post"
+msgstr "Créer un nouveau message de blog"
+
+msgid "New person page"
+msgstr "Nouvelle page de personne"
+
+msgid "Create a new person page"
+msgstr "Créez une nouvelle page de personne"
+
+msgid "New program"
+msgstr "Nouveau parcours"
+
+msgid "Create a new program"
+msgstr "Créer un nouveau parcours"
+
+msgid "Admin"
+msgstr "Admin"
+
+msgid "Inherit"
+msgstr "Hériter"
+
+msgid "Default"
+msgstr "Défaut"
+
+msgid "Mini"
+msgstr "Mini"
+
+msgid "Favorite"
+msgstr "Favoris"
+
+msgid "Badge"
+msgstr "Badge"
+
+msgid "Tag"
+msgstr "Étiquette"
+
+msgid "Small"
+msgstr "Petit"
+
+msgid "Large"
+msgstr "Grand"
+
+msgid "Card"
+msgstr "Fiche"
+
+msgid "Row"
+msgstr "Rangée"
+
+msgid "minute"
+msgstr "minute"
+
+msgid "minutes"
+msgstr "minutes"
+
+msgid "hour"
+msgstr "heure"
+
+msgid "hours"
+msgstr "heures"
+
+msgid "day"
+msgstr "jour"
+
+msgid "days"
+msgstr "jours"
+
+msgid "week"
+msgstr "semaine"
+
+msgid "weeks"
+msgstr "semaines"
+
+msgid "month"
+msgstr "mois"
+
+msgid "months"
+msgstr "mois"
+
+msgid "Run {:d}"
+msgstr "Session {:d}"
+
+msgid "You can't snapshot a snapshot."
+msgstr ""
+"Vous ne pouvez pas faire une capture instantanée d'une capture "
+"instantanée."
+
+msgid "You don't have sufficient permissions to snapshot this page."
+msgstr ""
+"Vous n'avez pas les permissions suffisantes pour faire une capture "
+"instantanée de cette page."
+
+msgid "Archived on {now:%Y-%m-%d %H:%M:%S}"
+msgstr "Archivé le {now:%Y-%m-%d %H:%M:%S}"
+
+msgid "{title:s} ({version!s})"
+msgstr "{title:s} ({version!s})"
+
+msgid "blog post"
+msgstr "message de blog"
+
+msgid "blog posts"
+msgstr "messages de blog"
+
+msgid "variant"
+msgstr "variante"
+
+msgid "Optional glimpse variant for a custom look."
+msgstr "Variante de vue optionnelle pour une apparence personnalisé."
+
+msgid "blog post plugin"
+msgstr "plugin pour message de blog"
+
+msgid "blog post plugins"
+msgstr "plugins de message de blog"
+
+msgid "category"
+msgstr "catégorie"
+
+msgid "categories"
+msgstr "catégories"
+
+msgid "category plugin"
+msgstr "plugin de catégorie"
+
+msgid "category plugins"
+msgstr "plugins de catégorie"
+
+msgid "enroll now"
+msgstr "s’inscrire maintenant"
+
+msgid "study now"
+msgstr "étudier maintenant"
+
+msgid "open for enrollment"
+msgstr "ouvert pour inscription"
+
+msgid "starting on"
+msgstr "débute le"
+
+msgid "closing on"
+msgstr "termine le"
+
+msgid "enrollment closed"
+msgstr "inscription fermée"
+
+msgid "on-going"
+msgstr "en cours"
+
+msgid "archived"
+msgstr "archivé"
+
+msgid "to be scheduled"
+msgstr "à planifier"
+
+msgid "forever open"
+msgstr "toujours ouvert"
+
+msgid "code"
+msgstr "code"
+
+msgid "The course time range."
+msgstr "La durée du cours."
+
+msgid "Total amount of time to complete this course."
+msgstr "Effort de temps total pour compléter ce cours."
+
+msgid "is listed"
+msgstr "est listé"
+
+msgid "Tick if you want the course to be visible on the search page."
+msgstr ""
+"Cochez si vous voulez que le cours soit visible sur la page de recherche."
+
+msgid "is self paced"
+msgstr "est à votre rythme"
+
+msgid "Tick if the course pace is self paced."
+msgstr "Cochez si le cours est à votre rythme."
+
+msgid "course"
+msgstr "cours"
+
+msgid "courses"
+msgstr "cours"
+
+msgid "Self paced"
+msgstr "À votre rythme"
+
+msgid "~{pace:d} {effort_unit!s}/{duration_unit!s}"
+msgstr "~{pace:d} {effort_unit!s}/{duration_unit!s}"
+
+msgid "~{pace_hours:d}h{pace_minutes:d}/{duration_unit!s}"
+msgstr "~{pace_hours:d}h{pace_minutes:d}/{duration_unit!s}"
+
+msgid "Manual"
+msgstr "Manuel"
+
+msgid "Synchronization to draft page"
+msgstr "Synchronisation de la page brouillon"
+
+msgid "Synchronization to public page"
+msgstr "Synchronisation de la page publique"
+
+msgid ""
+"course_and_search - show on the course page and include in search results"
+msgstr ""
+"cours et recherche - afficher sur la page du cours et inclure dans les "
+"résultats de recherche"
+
+msgid "course_only - show on the course page and hide from search results"
+msgstr ""
+"cours seulement - afficher sur la page du cours mais exclure des "
+"résultats de recherche"
+
+msgid "hidden - hide on the course page and from search results"
+msgstr ""
+"caché - masquer sur la page du cours et exclure des résultats de recherche"
+
+msgid ""
+"compact - show minimal information about the course run (only for "
+"products)."
+msgstr ""
+"compact - affiche un peu d'information de la session de cours (uniquement "
+"pour les produits)."
+
+msgid ""
+"detailed - show all information about the course run (only for products)."
+msgstr ""
+"détaillé - affiche toutes les informations de la session de cours "
+"(uniquement pour les produits)."
+
+msgid "Synchronization mode"
+msgstr "Mode de synchronisation"
+
+msgid "resource link"
+msgstr "lien de la ressource"
+
+msgid "course start"
+msgstr "début du cours"
+
+msgid "course end"
+msgstr "fin du cours"
+
+msgid "enrollment start"
+msgstr "début des inscriptions"
+
+msgid "enrollment end"
+msgstr "fin des inscriptions"
+
+msgid "The list of languages in which the course content is available."
+msgstr "Les langues dans lesquelles le contenu du cours est disponible."
+
+msgid "enrollment count"
+msgstr "nombre d'inscriptions"
+
+msgid "The number of enrolled students"
+msgstr "Le nombre d'apprenants inscrits"
+
+msgid "catalog visibility"
+msgstr "visibilité dans le catalogue"
+
+msgid "course run"
+msgstr "session de cours"
+
+msgid "course runs"
+msgstr "sessions de cours"
+
+msgid "title"
+msgstr "titre"
+
+msgid "Course run translation"
+msgstr "Traduction de la session de cours"
+
+msgid "Course run translations"
+msgstr "Traductions de la session de cours"
+
+msgid "Empty title"
+msgstr "Titre vide"
+
+msgid "course plugin"
+msgstr "plugin de cours"
+
+msgid "course plugins"
+msgstr "plugins de cours"
+
+msgid "logo"
+msgstr "logo"
+
+msgid "url"
+msgstr "URL"
+
+msgid "name"
+msgstr "nom"
+
+msgid "content"
+msgstr "contenu"
+
+msgid "licence"
+msgstr "license"
+
+msgid "licences"
+msgstr "licences"
+
+msgid "Licence translation"
+msgstr "Traduction de la licence"
+
+msgid "licence translations"
+msgstr "traductions de la licence"
+
+msgid "description"
+msgstr "description"
+
+msgid "licence plugin"
+msgstr "plugin de licence"
+
+msgid "licence plugins"
+msgstr "plugins de licence"
+
+msgid "organization"
+msgstr "institution"
+
+msgid "organizations"
+msgstr "organisations"
+
+msgid "organization plugin"
+msgstr "plugin d'organisation"
+
+msgid "organization plugins"
+msgstr "plugins d'institution"
+
+msgid "organizations by category plugin"
+msgstr "institutions par plugin de catégorie"
+
+msgid "organizations by category plugins"
+msgstr "institutions par plugins de catégorie"
+
+msgid "person"
+msgstr "personnes"
+
+msgid "persons"
+msgstr "personnes"
+
+msgid "Custom bio"
+msgstr "Bio adaptée"
+
+msgid ""
+"Optional: provide a custom bio (if you leave it empty, it will display "
+"the person's bio)."
+msgstr ""
+"Optionnel : adaptez la bio (si vous laissez le champs vide, la biographie "
+"par défaut de la personne s'affichera)."
+
+msgid "person plugin"
+msgstr "plugin de personne"
+
+msgid "person plugins"
+msgstr "plugins de personne"
+
+msgid "program"
+msgstr "parcours"
+
+msgid "programs"
+msgstr "parcours"
+
+msgid "program plugin"
+msgstr "plugin de parcours"
+
+msgid "program plugins"
+msgstr "plugins de parcours"
+
+msgid "role"
+msgstr "rôle"
+
+msgid ""
+"A role describes all the permissions that should be granted to the user "
+"group."
+msgstr ""
+"Un rôle décrit toutes les permissions qui doivent être accordées au "
+"groupe d'utilisateurs."
+
+msgid "page"
+msgstr "page"
+
+msgid "Page to which this role grants permissions."
+msgstr "Page à laquelle ce rôle donne des permissions."
+
+msgid "group"
+msgstr "groupe"
+
+msgid "User group that this role controls."
+msgstr "Groupe d'utilisateurs que ce rôle contrôle."
+
+msgid "filer folder"
+msgstr "dossier du classeur"
+
+msgid "Filer folder that this role controls."
+msgstr "Dossier du classeur que ce rôle contrôle."
+
+msgid "page role"
+msgstr "rôle de page"
+
+msgid "page roles"
+msgstr "rôles de la page"
+
+msgid "{:s} | {:s}"
+msgstr "{:s} | {:s}"
+
+msgid "Course page"
+msgstr "Page de cours"
+
+msgid "Organization list"
+msgstr "Liste des institutions"
+
+msgid "Organization page"
+msgstr "Page d'institution"
+
+msgid "Category list"
+msgstr "Liste des catégories"
+
+msgid "Category page"
+msgstr "Page de catégorie"
+
+msgid "Blog post list"
+msgstr "Liste des articles"
+
+msgid "Blog post page"
+msgstr "Page d'article"
+
+msgid "Person page"
+msgstr "Page de personne"
+
+msgid "Person list"
+msgstr "Liste des personnes"
+
+msgid "Program page"
+msgstr "Page de parcours"
+
+msgid "Program list"
+msgstr "Liste des parcours"
+
+msgid "Search"
+msgstr "Recherche"
+
+msgid "List of child pages"
+msgstr "Liste des pages enfants"
+
+msgid "Homepage"
+msgstr "Page d'accueil"
+
+msgid "Single column"
+msgstr "Colonne unique"
+
+msgid "Three columns: (33% | 33% | 33%)"
+msgstr "Trois colonnes : (33% | 33% | 33%)"
+
+msgid "Two columns: (50% | 50%)"
+msgstr "Deux colonnes: (50% | 50%)"
+
+msgid "Two columns: (25% | 75%)"
+msgstr "Deux colonnes : (25% | 75%)"
+
+msgid "Two columns: (75% | 25%)"
+msgstr "Deux colonnes : (75% | 25%)"
+
+msgid "Footer"
+msgstr "Pied de page"
+
+msgid "Static headline"
+msgstr "Titre statique"
+
+msgid "Main content"
+msgstr "Contenu principal"
+
+msgid "Secondary content"
+msgstr "Deuxième contenu"
+
+msgid "Third content"
+msgstr "Troisième contenu"
+
+msgid "Cover"
+msgstr "Couverture"
+
+msgid "Catch phrase"
+msgstr "Slogan"
+
+msgid "About the course"
+msgstr "À propos du cours"
+
+msgid "What you will learn"
+msgstr "Ce que vous apprendrez"
+
+msgid "Format"
+msgstr "Format"
+
+msgid "Prerequisites"
+msgstr "Prérequis"
+
+msgid "Team"
+msgstr "Équipe"
+
+msgid "Plan"
+msgstr "Plan"
+
+msgid "Complementary information"
+msgstr "Informations complémentaires"
+
+msgid "License for the course content"
+msgstr "Licence pour le contenu du cours"
+
+msgid "License for the content created by course participants"
+msgstr "Licence pour le contenu créé par les participants du cours"
+
+msgid "Categories"
+msgstr "Catégories"
+
+msgid "Icon"
+msgstr "Icône"
+
+msgid "Organizations"
+msgstr "Organisations"
+
+msgid "Assessment and Certification"
+msgstr "Évaluation et Certification"
+
+msgid "Banner"
+msgstr "Bannière"
+
+msgid "Logo"
+msgstr "Logo"
+
+msgid "Description"
+msgstr "Description"
+
+msgid "Excerpt"
+msgstr "Extrait"
+
+msgid "Portrait"
+msgstr "Portrait"
+
+msgid "Bio"
+msgstr "Bio"
+
+msgid "Main Content"
+msgstr "Contenu principal"
+
+msgid "Author"
+msgstr "Auteur"
+
+msgid "Body"
+msgstr "Corps"
+
+msgid "Headline"
+msgstr "Titre"
+
+msgid "Courses"
+msgstr "Cours"
+
+msgid "Button caesura"
+msgstr "Bouton caesura"
+
+msgid "Full width"
+msgstr "Pleine largeur"
+
+msgid "No categories yet."
+msgstr "Pas de catégories."
+
+msgid "Not published yet"
+msgstr "Pas encore publié"
+
+msgid "No author yet"
+msgstr "Pas d'auteur"
+
+msgid "No excerpt content"
+msgstr "Aucun extrait de contenu"
+
+msgid "No body content"
+msgstr "Aucun contenu"
+
+msgid "Related posts"
+msgstr "Billets de blog liés"
+
+msgid "Other categories of articles"
+msgstr "Autres catégories d'articles"
+
+msgid "No associated blogposts"
+msgstr "Aucun message de blogue associé"
+
+#, python-format
+msgid "%(category_title)s - Category"
+msgstr "%(category_title)s - Catégorie"
+
+msgid "Sub categories"
+msgstr "Sous-catégories"
+
+msgid "Related courses"
+msgstr "Cours connexes"
+
+msgid "Courses pagination"
+msgstr "Pagination des cours"
+
+#, python-format
+msgid ""
+"\n"
+" See all courses related to "
+"%(category_title)s\n"
+" "
+msgstr ""
+"\n"
+" Voir tous les cours liés à "
+"%(category_title)s\n"
+" "
+
+msgid "See all courses"
+msgstr "Voir tous les cours"
+
+msgid "Related organizations"
+msgstr "Institutions associées"
+
+msgid "Related organizations pagination"
+msgstr "Pagination des institutions liées"
+
+msgid "Related blogposts"
+msgstr "Billets de blog liés"
+
+msgid "Related blogposts pagination"
+msgstr "Pagination des billets de blog liés"
+
+msgid "Related persons"
+msgstr "Personnes liées"
+
+msgid "Related persons pagination"
+msgstr "Pagination des personnes liées"
+
+msgid "No categories"
+msgstr "Pas de catégories"
+
+#, python-format
+msgid "%(course_title)s - Course"
+msgstr "%(course_title)s - Cours"
+
+msgid "Ref. "
+msgstr "Réf. "
+
+msgid "No associated categories"
+msgstr "Aucune catégorie associée"
+
+msgid "Enter here an introduction to your course."
+msgstr "Saisissez ici une introduction à votre cours."
+
+msgid "Duration:"
+msgstr "Durée :"
+
+msgid "Effort:"
+msgstr "Effort :"
+
+msgid "Pace:"
+msgstr "Rythme :"
+
+msgid "Languages:"
+msgstr "Langues :"
+
+#, python-format
+msgid ""
+"\n"
+" %(count)s already "
+"enrolled!\n"
+" "
+msgstr ""
+"\n"
+" %(count)s déjà "
+"inscrits !\n"
+" "
+
+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."
+
+msgid "course cover image"
+msgstr "image de couverture du cours"
+
+#, python-format
+msgid ""
+"\n"
+" Archived on %(creation_date)s\n"
+" "
+msgstr ""
+"\n"
+" Archivé le %(creation_date)s\n"
+" "
+
+msgid "Go to current version"
+msgstr "Accédez à la version actuelle"
+
+msgid "Glimpse cover"
+msgstr "Image de l'aperçu"
+
+msgid "Add an image for course cover on its glimpse."
+msgstr "Ajouter une image pour la couverture du cours sur son aperçu."
+
+msgctxt "course_detail__title"
+msgid "What you will learn"
+msgstr "Ce que vous apprendrez"
+
+msgid "At the end of this course, you will be able to:"
+msgstr "À la fin de ce cours, vous pourrez :"
+
+msgctxt "course_detail__title"
+msgid "Description"
+msgstr "Description"
+
+msgctxt "course_detail__title"
+msgid "Format"
+msgstr "Format"
+
+msgid "How is the course structured?"
+msgstr "Quelle est la structure du cours ?"
+
+msgctxt "course_detail__title"
+msgid "Prerequisites"
+msgstr "Prérequis"
+
+msgid "What are the prerequisites to follow this course?"
+msgstr "Quels sont les prérequis pour suivre ce cours ?"
+
+msgctxt "course_detail__title"
+msgid "Assessment and certification"
+msgstr "Évaluation et Certification"
+
+msgid "How is progress evaluated and/or certified?"
+msgstr "Comment les étudiants sont ils évalués et/ou certifiés ?"
+
+msgctxt "course_detail__title"
+msgid "Course plan"
+msgstr "Plan de cours"
+
+msgid "Enter here the detailed course plan."
+msgstr "Détaillez ici le plan du cours."
+
+msgid ""
+"\n"
+" This course is part of a "
+"program\n"
+" "
+msgid_plural ""
+"\n"
+" This course is part of "
+"programs\n"
+" "
+msgstr[0] ""
+"\n"
+" Ce cours fait partie d'une "
+"série\n"
+" "
+msgstr[1] ""
+"\n"
+" Ce cours fait partie de ces "
+"séries\n"
+" "
+
+msgctxt "course_detail__title"
+msgid "Course team"
+msgstr "Équipe pédagogique"
+
+msgid "Who are the teachers in the course team?"
+msgstr "Qui sont les enseignants de l’équipe pédagogique ?"
+
+msgctxt "course_detail__title"
+msgid "Organizations"
+msgstr "Organisations"
+
+msgid "What are the organizations publishing this course?"
+msgstr "Quelles sont les organisations publiant ce cours?"
+
+msgctxt "course_detail__title"
+msgid "License"
+msgstr "Licence"
+
+msgid "What is the license for the course content?"
+msgstr "Quelle est la licence pour le contenu du cours ?"
+
+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 ?"
+
+msgid "Course code"
+msgstr "Code du cours"
+
+msgid "Course date"
+msgstr "Date du cours"
+
+msgid "Course team"
+msgstr "Équipe pédagogique"
+
+msgid "License"
+msgstr "Licence"
+
+#, python-format
+msgid ""
+"\n"
+" A %(model)s object is missing on this %(model)s page. Please "
+"select another page template.\n"
+"
\n"
+" If what you need is a %(model)s page, you need to create it via "
+"the wizard and choose \"New %(model)s page\".\n"
+" "
+msgstr ""
+"\n"
+" Il manque un objet %(model)s sur cette page %(model)s . Veuillez "
+"sélectionner un autre gabarit de page.\n"
+"
\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"
+" "
+
+msgid "Main organization"
+msgstr "Organisation principale"
+
+msgid "Related courses pagination"
+msgstr "Pagination des cours liés"
+
+#, python-format
+msgid ""
+"\n"
+" See all courses related to "
+"%(organization_title)s\n"
+" "
+msgstr ""
+"\n"
+" Voir tous les cours liés à "
+"%(organization_title)s\n"
+" "
+
+msgid "No organization yet"
+msgstr "Pas encore d'organisation"
+
+msgid "Enter your bio here..."
+msgstr "Saisissez ici votre bio..."
+
+#, python-format
+msgid "%(title)s avatar"
+msgstr "avatar de %(title)s"
+
+msgid "No associated organizations"
+msgstr "Aucune organisation associée"
+
+#, python-format
+msgid ""
+"\n"
+" See all courses related to "
+"%(person_title)s\n"
+" "
+msgstr ""
+"\n"
+" Voir tous les cours liés à "
+"%(person_title)s\n"
+" "
+
+msgid "Blogposts"
+msgstr "Messages de blog"
+
+msgid "Blogposts pagination"
+msgstr "Pagination des billets de blog"
+
+msgid "No persons"
+msgstr "Pas de personnes"
+
+#, python-format
+msgid "%(program_title)s - Program"
+msgstr "%(program_title)s - Parcours"
+
+msgid "program cover image"
+msgstr "image de couverture de parcours"
+
+msgid "No associated programs"
+msgstr "Aucun parcours associé"
+
+#, python-brace-format
+msgid "Run {i:d}"
+msgstr "Session {i:d}"
+
+msgid "Regenerate search index..."
+msgstr "Regénérer l'index de recherche..."
+
+msgid "New courses"
+msgstr "Nouveaux cours"
+
+msgid "First session"
+msgstr "Première session"
+
+msgid "Availability"
+msgstr "Disponibilité"
+
+msgid "Languages"
+msgstr "Langues"
+
+msgid "Subjects"
+msgstr "Sujets"
+
+msgid "Levels"
+msgstr "Niveaux"
+
+msgid "Persons"
+msgstr "Personnes"
+
+msgid "Licences"
+msgstr "Licences"
+
+msgid "Weekly pace"
+msgstr "Rythme hebdomadaire"
+
+msgid "Self-paced"
+msgstr "À votre rythme"
+
+msgid "Less than one hour"
+msgstr "Moins d'une heure"
+
+msgid "One to two hours"
+msgstr "Entre une et deux heures"
+
+msgid "More than two hours"
+msgstr "Plus de deux heures"
+
+msgid "Open for enrollment"
+msgstr "Ouvert pour inscription"
+
+msgid "Coming soon"
+msgstr "Bientôt"
+
+msgid "On-going"
+msgstr "En cours"
+
+msgid "Archived"
+msgstr "Archivé"
+
+msgid "Sort by configuration"
+msgstr "Trier par configuration"
+
+msgid "Sort by facet count"
+msgstr "Trier par compte de facettes"
+
+msgid "Sort alphabetically"
+msgstr "Trier par ordre alphabétique"
+
+msgid "You are not allowed to manage the search index."
+msgstr "Vous n'êtes pas autorisé à modifier l'index de recherche."
+
+msgid "The search index was successfully bootstrapped"
+msgstr "L'index de recherche a été initialisé avec succès"
+
+msgid "Glimpse"
+msgstr "Aperçu"
+
+msgid "Link settings"
+msgstr "Paramètres du lien"
+
+msgid "Square card"
+msgstr "Carte carrée"
+
+msgid "Quote"
+msgstr "Citation"
+
+msgid "Half row"
+msgstr "Demi-rangée"
+
+msgid "Full row"
+msgstr "Rangée complète"
+
+msgid "Variant"
+msgstr "Variante"
+
+msgid "Form factor variant"
+msgstr "Variante de facteur de forme"
+
+msgid "image"
+msgstr "image"
+
+msgid "Content"
+msgstr "Contenu"
+
+msgid "External URL"
+msgstr "URL externe"
+
+msgid "Make the glimpse as a link with an external URL."
+msgstr "Afficher l'aperçu comme un lien vers une URL externe."
+
+msgid "Internal URL"
+msgstr "URL interne"
+
+msgid "Make the glimpse as a link with an internal (page) URL."
+msgstr "Afficher l'aperçu comme un lien vers une URL (page) interne."
+
+msgid "HTML Sitemap"
+msgstr "Plan de site HTML"
+
+msgid ""
+"Press save to create a site map. You will then be able to add a child "
+"plugin for each subtree in your sitemap."
+msgstr ""
+"Appuyez sur «Enregistrer» pour créer un plan de site. Vous pourrez "
+"ensuite ajouter un plugin enfant pour chaque sous-arbre de votre plan de "
+"site."
+
+msgid "HTML sitemap page"
+msgstr "Page de site HTML"
+
+msgid "root page"
+msgstr "page racine"
+
+msgid ""
+"This page will be at the root of your sitemap (or its children if the "
+"\"include root page\" flag is unticked)."
+msgstr ""
+"Cette page sera à la racine de votre plan de site (ou de ses enfants si "
+"«inclure la page racine» n'a pas été sélectionné)."
+
+msgid "max depth"
+msgstr "profondeur maximale"
+
+msgid ""
+"Limit the level of nesting that your sitemap will contain below this "
+"page. An empty field or 0 equals to no limit."
+msgstr ""
+"Limitez la profondeur de votre plan de site sous cette page. Un champ "
+"vide ou égal à 0 correspond à une profondeur illimitée."
+
+msgid "in navigation"
+msgstr "dans le menu"
+
+msgid ""
+"Tick to exclude from sitemap the pages that are excluded from navigation."
+msgstr ""
+"Sélectionner pour exclure du plan de site les pages qui sont exclues du "
+"menu."
+
+msgid "include root page"
+msgstr "inclure la page racine"
+
+msgid ""
+"Tick to include the root page and its descendants. Untick to include only "
+"its descendants."
+msgstr ""
+"Sélectionner pour inclure la page racine et ses descendants. Ne pas "
+"sélectionner pour n'inclure que les descendants de la page racine."
+
+msgid "HTML Sitemaps"
+msgstr "Plans de site HTML"
+
+msgid "Sitemap"
+msgstr "Plan de site"
+
+msgid "Large Banner"
+msgstr "Grande Bannière"
+
+msgid "Medias"
+msgstr "Médias"
+
+msgid "Hero introduction"
+msgstr "Introduction"
+
+msgid "background image"
+msgstr "image d'arrière-plan"
+
+msgid "Template"
+msgstr "Modèle"
+
+msgid "Choose template to render plugin."
+msgstr "Choisir un modèle d'affichage pour le plugin."
+
+msgid "Explore our catalog"
+msgstr "Explorez notre catalogue"
+
+msgid "Search in our courses"
+msgstr "Rechercher dans nos cours"
+
+msgid "Advanced settings"
+msgstr "Paramètres avancés"
+
+msgid "LTI consumer"
+msgstr "Consommateur LTI"
+
+msgid "Custom provider configuration"
+msgstr "Configuration manuelle du service"
+
+msgid "shared secret"
+msgstr "secret partagé"
+
+msgid ""
+"The url is not valid for this provider. It should be of the form \"{:s}\"."
+msgstr ""
+"L'url n'est pas valide pour ce service. Elle doit être de la forme \"{:"
+"s}\"."
+
+msgid ""
+"The url is not valid for this provider. It should start with \"{:s}\"."
+msgstr ""
+"L'url n'est pas valide pour ce service. Elle devrait commencer par \"{:"
+"s}\"."
+
+msgid "Please choose a predefined provider, or fill fields below"
+msgstr ""
+"Veuillez choisir un fournisseur de service LTI prédéfini, ou remplir les "
+"champs ci-dessous"
+
+msgid "Please choose a predefined provider above, or fill this field"
+msgstr ""
+"Veuillez choisir ci-dessus un fournisseur de service LTI prédéfini, ou "
+"remplir ce champs"
+
+msgid "Please fill this field"
+msgstr "Veuillez remplir ce champ"
+
+msgid "LTI url"
+msgstr "url LTI"
+
+msgid ""
+"For a predefined provider, leave this field empty for uploading new "
+"content."
+msgstr ""
+"Pour un fournisseur de service LTI prédéfini, laissez ce champ vide pour "
+"créer un nouveau contenu."
+
+msgid "Predefined LTI provider"
+msgstr "Fournisseur de service LTI prédéfini"
+
+msgid "Please choose a predefined provider or fill fields below."
+msgstr ""
+"Veuillez choisir un fournisseur de service LTI prédéfini, ou remplir les "
+"champs ci-dessous."
+
+msgid "Yes"
+msgstr "Oui"
+
+msgid "No"
+msgstr "Non"
+
+msgid "Nested item"
+msgstr "Élément imbriqué"
+
+msgid "List"
+msgstr "Liste"
+
+msgid "Plain text"
+msgstr "Texte brut"
+
+msgid "plain text"
+msgstr "texte brut"
+
+msgid "Section"
+msgstr "Section"
+
+msgid "Primary scheme"
+msgstr "Schéma principal"
+
+msgid "Secondary scheme"
+msgstr "Schéma secondaire"
+
+msgid "Tertiary scheme"
+msgstr "Schéma tertiaire"
+
+msgid "Quaternary scheme"
+msgstr "Schéma Quaternaire"
+
+msgid "Quinary scheme"
+msgstr "Schéma Quinaire"
+
+msgid "Senary scheme"
+msgstr "Schéma sénaire"
+
+msgid "Septenary scheme"
+msgstr "Schéma septénaire"
+
+msgid "Item tiles"
+msgstr "Tuiles d'objet"
+
+msgid "Optional template for custom look."
+msgstr "Modèle optionnel pour un rendu personnalisé."
+
+msgid "Attributes"
+msgstr "Attributs"
+
+msgid "Image"
+msgstr "Image"
+
+msgid "Simple text"
+msgstr "Texte simple"
+
+msgid "body"
+msgstr "corps"
+
+#, python-format
+msgid ""
+"Ensure this text has at most %(limit_value)d character (it has "
+"%(show_value)d)."
+msgid_plural ""
+"Ensure this text has at most %(limit_value)d characters (it has "
+"%(show_value)d)."
+msgstr[0] ""
+"Assurez-vous que ce texte a au maximum %(limit_value)d caractère (il a "
+"%(show_value)d)."
+msgstr[1] ""
+"Assurez-vous que ce texte a au maximum %(limit_value)d caractères (il a "
+"%(show_value)d)."
diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/fr_FR/LC_MESSAGES/django.po b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/fr_FR/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..a9fa919a6b
--- /dev/null
+++ b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/fr_FR/LC_MESSAGES/django.po
@@ -0,0 +1,1662 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: richie\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-31 17:41+0100\n"
+"PO-Revision-Date: 2024-11-27 13:20\n"
+"Last-Translator: \n"
+"Language-Team: French\n"
+"Language: fr_FR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Crowdin-Project: richie\n"
+"X-Crowdin-Project-ID: 308578\n"
+"X-Crowdin-Language: fr\n"
+"X-Crowdin-File: backend.pot\n"
+"X-Crowdin-File-ID: 32\n"
+
+#: newsite/settings.py:250 newsite/settings.py:260
+#, fuzzy
+#| msgid "dashboard"
+msgid "Dashboard"
+msgstr "tableau de bord"
+
+#: newsite/settings.py:251
+msgid "{base_url:s}/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:261
+#, fuzzy
+#| msgid "dashboard"
+msgid "/dashboard/"
+msgstr "tableau de bord"
+
+#: newsite/settings.py:264
+#, fuzzy
+#| msgid "dashboard"
+msgid "Teacher dashboard"
+msgstr "tableau de bord"
+
+#: newsite/settings.py:265
+#, fuzzy
+#| msgid "dashboard"
+msgid "/dashboard/teacher"
+msgstr "tableau de bord"
+
+#: newsite/settings.py:287
+msgid "Profile"
+msgstr ""
+
+#: newsite/settings.py:288
+msgid "{base_url:s}/u/(username)"
+msgstr ""
+
+#: newsite/settings.py:291
+#, fuzzy
+#| msgid "Accordion"
+msgid "Account"
+msgstr "Accordéon"
+
+#: newsite/settings.py:292
+msgid "{base_url:s}/account/settings"
+msgstr ""
+
+#: newsite/settings.py:385
+msgid "Teaser"
+msgstr "Accroche"
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "English"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "French"
+msgstr ""
+
+msgid "Richie Plugins"
+msgstr "Plugins Richie"
+
+msgid "Define a duration as a number of time units"
+msgstr "Définir une durée comme un nombre d'unités de temps"
+
+#, python-format
+msgid "%(value)s is not a valid choice for a time unit."
+msgstr "%(value)s n'est pas un choix valide d'unité de temps."
+
+msgid "A composite duration should be a pair: number and time unit."
+msgstr "Une durée composite doit être une paire : nombre / unité de temps."
+
+msgid "A composite duration should be a round number of time units."
+msgstr "Une durée composite doit être un nombre rond d'unités de temps."
+
+msgid "A composite duration should be positive."
+msgstr "Une durée composite doit être positive."
+
+msgid "Define an effort"
+msgstr "Définir un effort"
+
+msgid "An effort should be a triplet: number, time unit and reference unit."
+msgstr ""
+"Un effort doit être un triplet: numéro / unité de temps / unité de "
+"référence."
+
+msgid "An effort should be a round number of time units."
+msgstr "Un effort doit être un nombre rond d'unités de temps."
+
+msgid "An effort should be positive."
+msgstr "Un effort doit être positif."
+
+msgid "The effort time unit should be shorter than the reference unit."
+msgstr ""
+"L'unité de temps d'effort doit être plus courte que l'unité de temps de "
+"référence."
+
+msgid "{:s} and {:s}"
+msgstr "{:s} et {:s}"
+
+msgid " and "
+msgstr " et "
+
+#, python-format
+msgid "You can only select up to %(limit_value)d choices."
+msgstr "Vous pouvez sélectionner jusqu'à %(limit_value)d choix."
+
+#, python-format
+msgid "Multi select field (up to %(max_choices)s choices)"
+msgstr "Champ de sélection multiple (jusqu'à %(max_choices)s choix)"
+
+#, python-format
+msgid "Value %(value)s is not a valid choice."
+msgid_plural "Values %(value)s are not valid choices."
+msgstr[0] "La valeur %(value)s n'est pas un choix valide."
+msgstr[1] "Les valeurs %(value)s ne sont pas des choix valides."
+
+msgid ""
+"Storing {:d} choices could require storing a CharField of up to {:d} "
+"characters. Please reduce 'max_choices' or increase 'max_length'."
+msgstr ""
+"L'enregistrement de {:d} choix nécessite l'enregistrement d'un CharField "
+"de {:d} caractères. Veuillez réduire 'max_choices' ou augmenter "
+"'max_length'."
+
+msgid "Video"
+msgstr "Vidéo"
+
+msgid "Your browser doesn't support this video format."
+msgstr "Votre navigateur ne supporte pas ce format de vidéo."
+
+msgid "You are here:"
+msgstr "Vous êtes ici:"
+
+msgid "Skip to main content"
+msgstr "Passer au contenu principal"
+
+msgid "Go to homepage"
+msgstr "Retour à la page d'accueil"
+
+msgid "Menu"
+msgstr "Menu"
+
+msgid "Contact us"
+msgstr "Nous contacter"
+
+msgid "Life-changing learning!"
+msgstr "Apprendre pour changer de vie !"
+
+msgid "Learn more"
+msgstr "En savoir plus"
+
+msgid "Powered by"
+msgstr "Propulsé par"
+
+msgid "This page has no child objects"
+msgstr "Cette page n'a pas d'objets enfants"
+
+msgid "Back to home"
+msgstr "Retour à la page d'accueil"
+
+msgid "Pagination"
+msgstr "Pagination"
+
+#, python-format
+msgid "Currently reading last page %(page)s"
+msgstr "Actuellement sur la dernière page %(page)s"
+
+#, python-format
+msgid "Currently reading page %(page)s"
+msgstr "Actuellement sur la page %(page)s"
+
+#, python-format
+msgid "Page %(page)s"
+msgstr "Page %(page)s"
+
+#, python-format
+msgid "Previous page %(page)s"
+msgstr "Page précédente %(page)s"
+
+#, python-format
+msgid "Last page %(page)s"
+msgstr "Dernière page %(page)s"
+
+#, python-format
+msgid "Next page %(page)s"
+msgstr "Page suivante %(page)s"
+
+#, python-format
+msgid "Richie news: %(title)s"
+msgstr "Actualités Richie: %(title)s"
+
+#, python-format
+msgid "Richie news: %(title)s %(url)s"
+msgstr "Actualités Richie: %(title)s %(url)s"
+
+msgid "Share on Facebook"
+msgstr "Partager sur Facebook"
+
+msgid "Share on Twitter"
+msgstr "Partager sur Twitter"
+
+msgid "Share on Linkedin"
+msgstr "Partager sur Linkedin"
+
+msgid "Share by Email"
+msgstr "Partager par Email"
+
+msgid "Follow a course online with Richie"
+msgstr "Suivre un cours en ligne avec Richie"
+
+#, python-format
+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"
+
+msgid "Facebook"
+msgstr "Facebook"
+
+msgid "Twitter page"
+msgstr "Page Twitter"
+
+msgid "Linkedin page"
+msgstr "Page LinkedIn"
+
+msgid "Bad request"
+msgstr "Requête incorrecte"
+
+msgid ""
+"Your query seems to be malformed. Please check your data and try again."
+msgstr ""
+"Votre requête semble être incorrecte. Veuillez vérifier les informations "
+"envoyées et réessayer."
+
+msgid "Forbidden"
+msgstr "Interdit"
+
+msgid "You do not have the required permissions to access this resource."
+msgstr "Vous n'avez pas les permissions requises pour accéder à ce contenu."
+
+msgid "Page not found"
+msgstr "Page introuvable"
+
+msgid "The requested resource does not exist."
+msgstr "Le contenu demandé n'existe pas."
+
+msgid "Server bad request"
+msgstr "Requête incorrecte au serveur"
+
+msgid "Something went wrong. Please try again later."
+msgstr "Une erreur s'est produite. Merci de réessayer plus tard."
+
+msgid "Course could not be found."
+msgstr "Le cours n'a pas pu être trouvé."
+
+msgid "See user group"
+msgstr "Voir le groupe d'utilisateurs"
+
+msgid "See filer folder"
+msgstr "Voir le dossier du classeur"
+
+msgid "Organization"
+msgstr "Établissement"
+
+msgid "Organization by Category"
+msgstr "Établissement par catégorie"
+
+msgid "Category"
+msgstr "Catégorie"
+
+msgid "Course"
+msgstr "Cours"
+
+msgid "Person"
+msgstr "Pers"
+
+msgid "Licence"
+msgstr "License"
+
+msgid "Post"
+msgstr "Post"
+
+msgid "Program"
+msgstr "Parcours"
+
+msgid "{!s} settings"
+msgstr "Paramètres de {:s}"
+
+msgid "Snapshot this page..."
+msgstr "Faire un instantané de cette page..."
+
+msgid ""
+"This will place a copy of this page as its child and move all its "
+"courseruns as children of its new copy."
+msgstr ""
+"Ceci copie la page vers une page enfant et les sessions de cours "
+"actuelles deviennent des enfants de cette copie."
+
+msgid "New page"
+msgstr "Nouvelle page"
+
+msgid "Create a new page next to the current page."
+msgstr "Créer une nouvelle page à côté de la page actuelle."
+
+msgid "New sub page"
+msgstr "Nouvelle sous-page"
+
+msgid "Create a page below the current page."
+msgstr "Créer une page sous la page actuelle."
+
+msgid "Page title"
+msgstr "Titre de la page"
+
+msgid "Title of the page in current language"
+msgstr "Titre de la page dans la langue actuelle"
+
+msgid "Page slug"
+msgstr "Chemin de la page"
+
+msgid "Slug of the page in current language"
+msgstr "Chemin de la page dans la langue actuelle"
+
+msgid ""
+"This slug is too long. The length of the path built by prepending the "
+"slug of the parent page would be {:d} characters long and it should be "
+"less than 255"
+msgstr ""
+"Ce chemin est trop long. Le lien construit en faisant précéder ce chemin "
+"par le lien de la page parente serait trop long de {:d} caractères et "
+"devrait être de moins de 255 caractères"
+
+msgid "This slug is already in use"
+msgstr "Ce chemin est déjà utilisé"
+
+msgid ""
+"You must first create a parent page and set its `reverse_id` to `{:s}`."
+msgstr ""
+"Vous devez d’abord créer une page parente dont le 'reverse_id' est la "
+"valeur `{:s}`."
+
+msgid "Code"
+msgstr "Code"
+
+msgid "Unique reference for the course."
+msgstr "Référence unique du cours."
+
+msgid "New course page"
+msgstr "Nouvelle page de cours"
+
+msgid "Create a new course page"
+msgstr "Créez une nouvelle page de cours"
+
+msgid "Unique reference for the organization."
+msgstr "Référence unique de l'établissement."
+
+msgid "New organization page"
+msgstr "Nouvelle page d'établissement"
+
+msgid "Create a new organization page"
+msgstr "Créer une nouvelle page d'établissement"
+
+msgid "New category page"
+msgstr "Nouvelle page de catégorie"
+
+msgid "Create a new category page"
+msgstr "Créer une nouvelle page de catégorie"
+
+msgid "New blog post"
+msgstr "Nouveau billet de blog"
+
+msgid "Create a new blog post"
+msgstr "Créer un nouveau billet de blog"
+
+msgid "New person page"
+msgstr "Nouvelle page de personne"
+
+msgid "Create a new person page"
+msgstr "Créez une nouvelle page de personne"
+
+msgid "New program"
+msgstr "Nouveau parcours"
+
+msgid "Create a new program"
+msgstr "Créer un nouveau parcours"
+
+msgid "Admin"
+msgstr "Admin"
+
+msgid "Inherit"
+msgstr "Hériter"
+
+msgid "Default"
+msgstr "Par défaut"
+
+msgid "Mini"
+msgstr "Mini"
+
+msgid "Favorite"
+msgstr "Favoris"
+
+msgid "Badge"
+msgstr "Badge"
+
+msgid "Tag"
+msgstr "Tag"
+
+msgid "Small"
+msgstr "Petit"
+
+msgid "Large"
+msgstr "Grand"
+
+msgid "Card"
+msgstr "Carte"
+
+msgid "Row"
+msgstr "Rangée"
+
+msgid "minute"
+msgstr "minute"
+
+msgid "minutes"
+msgstr "minutes"
+
+msgid "hour"
+msgstr "heure"
+
+msgid "hours"
+msgstr "heures"
+
+msgid "day"
+msgstr "jour"
+
+msgid "days"
+msgstr "jours"
+
+msgid "week"
+msgstr "semaine"
+
+msgid "weeks"
+msgstr "semaines"
+
+msgid "month"
+msgstr "mois"
+
+msgid "months"
+msgstr "mois"
+
+msgid "Run {:d}"
+msgstr "Session {:d}"
+
+msgid "You can't snapshot a snapshot."
+msgstr ""
+"Vous ne pouvez pas faire une capture instantanée d'une capture "
+"instantanée."
+
+msgid "You don't have sufficient permissions to snapshot this page."
+msgstr ""
+"Vous n'avez pas les permissions suffisantes pour faire une capture "
+"instantanée de cette page."
+
+msgid "Archived on {now:%Y-%m-%d %H:%M:%S}"
+msgstr "Archivé le {now:%Y-%m-%d %H:%M:%S}"
+
+msgid "{title:s} ({version!s})"
+msgstr "{title:s} ({version!s})"
+
+msgid "blog post"
+msgstr "billet de blog"
+
+msgid "blog posts"
+msgstr "articles de blog"
+
+msgid "variant"
+msgstr "variante"
+
+msgid "Optional glimpse variant for a custom look."
+msgstr "Variante d'aperçu optionnelle pour un affichage personnalisé."
+
+msgid "blog post plugin"
+msgstr "plugin de billet de blog"
+
+msgid "blog post plugins"
+msgstr "plugins d'article de blog"
+
+msgid "category"
+msgstr "catégorie"
+
+msgid "categories"
+msgstr "catégories"
+
+msgid "category plugin"
+msgstr "plugin de catégorie"
+
+msgid "category plugins"
+msgstr "plugins de catégorie"
+
+msgid "enroll now"
+msgstr "s’inscrire maintenant"
+
+msgid "study now"
+msgstr "étudier maintenant"
+
+msgid "open for enrollment"
+msgstr "ouvert à l'inscription"
+
+msgid "starting on"
+msgstr "débute le"
+
+msgid "closing on"
+msgstr "termine le"
+
+msgid "enrollment closed"
+msgstr "inscription fermée"
+
+msgid "on-going"
+msgstr "en cours"
+
+msgid "archived"
+msgstr "archivé"
+
+msgid "to be scheduled"
+msgstr "à programmer"
+
+msgid "forever open"
+msgstr "toujours ouvert"
+
+msgid "code"
+msgstr "code"
+
+msgid "The course time range."
+msgstr "La durée du cours."
+
+msgid "Total amount of time to complete this course."
+msgstr "Temps de travail total nécessaire pour compléter ce cours."
+
+msgid "is listed"
+msgstr "est listé"
+
+msgid "Tick if you want the course to be visible on the search page."
+msgstr ""
+"Cochez si vous voulez que le cours soit visible sur la page de recherche."
+
+msgid "is self paced"
+msgstr "est auto-rythmé"
+
+msgid "Tick if the course pace is self paced."
+msgstr "Cochez si le cours est auto-rythmé"
+
+msgid "course"
+msgstr "cours"
+
+msgid "courses"
+msgstr "cours"
+
+msgid "Self paced"
+msgstr "Auto-rythmé"
+
+msgid "~{pace:d} {effort_unit!s}/{duration_unit!s}"
+msgstr "~{pace:d} {effort_unit!s}/{duration_unit!s}"
+
+msgid "~{pace_hours:d}h{pace_minutes:d}/{duration_unit!s}"
+msgstr "~{pace_hours:d}h{pace_minutes:d}/{duration_unit!s}"
+
+msgid "Manual"
+msgstr "Manuel"
+
+msgid "Synchronization to draft page"
+msgstr "Synchronisation vers le brouillon de la page"
+
+msgid "Synchronization to public page"
+msgstr "Synchronisation de la page publique"
+
+msgid ""
+"course_and_search - show on the course page and include in search results"
+msgstr ""
+"cours et recherche - afficher sur la page du cours et inclure dans les "
+"résultats de recherche"
+
+msgid "course_only - show on the course page and hide from search results"
+msgstr ""
+"cours seulement - afficher sur la page du cours et exclure des résultats "
+"de recherche"
+
+msgid "hidden - hide on the course page and from search results"
+msgstr ""
+"caché - masquer sur la page du cours et exclure des résultats de recherche"
+
+msgid ""
+"compact - show minimal information about the course run (only for "
+"products)."
+msgstr ""
+"compacte - affiche des informations synthétiques sur la session "
+"(uniquement pour les produits)."
+
+msgid ""
+"detailed - show all information about the course run (only for products)."
+msgstr ""
+"détaillée - affiche des informations détaillées sur la session "
+"(uniquement pour les produits)."
+
+msgid "Synchronization mode"
+msgstr "Mode de synchronisation"
+
+msgid "resource link"
+msgstr "lien de la ressource"
+
+msgid "course start"
+msgstr "début du cours"
+
+msgid "course end"
+msgstr "fin du cours"
+
+msgid "enrollment start"
+msgstr "début des inscriptions"
+
+msgid "enrollment end"
+msgstr "fin des inscriptions"
+
+msgid "The list of languages in which the course content is available."
+msgstr "Les langues dans lesquelles le contenu du cours est disponible."
+
+msgid "enrollment count"
+msgstr "compte des inscriptions"
+
+msgid "The number of enrolled students"
+msgstr "Le nombre d'apprenants inscrits"
+
+msgid "catalog visibility"
+msgstr "visibilité dans le catalogue"
+
+msgid "course run"
+msgstr "session de cours"
+
+msgid "course runs"
+msgstr "sessions de cours"
+
+msgid "title"
+msgstr "titre"
+
+msgid "Course run translation"
+msgstr "Traduction de session de cours"
+
+msgid "Course run translations"
+msgstr "Traductions de sessions de cours"
+
+msgid "Empty title"
+msgstr "Titre manquant"
+
+msgid "course plugin"
+msgstr "plugin de cours"
+
+msgid "course plugins"
+msgstr "plugins de cours"
+
+msgid "logo"
+msgstr "logo"
+
+msgid "url"
+msgstr "URL"
+
+msgid "name"
+msgstr "nom"
+
+msgid "content"
+msgstr "contenu"
+
+msgid "licence"
+msgstr "license"
+
+msgid "licences"
+msgstr "licences"
+
+msgid "Licence translation"
+msgstr "Traduction des Licences"
+
+msgid "licence translations"
+msgstr "traductions de licences"
+
+msgid "description"
+msgstr "description"
+
+msgid "licence plugin"
+msgstr "plugin de licence"
+
+msgid "licence plugins"
+msgstr "plugins de licences"
+
+msgid "organization"
+msgstr "établissement"
+
+msgid "organizations"
+msgstr "établissements"
+
+msgid "organization plugin"
+msgstr "plugin d'établissement"
+
+msgid "organization plugins"
+msgstr "plugins d'établissements"
+
+msgid "organizations by category plugin"
+msgstr "plugin d'établissements par catégorie"
+
+msgid "organizations by category plugins"
+msgstr "plugins d'établissements par catégorie"
+
+msgid "person"
+msgstr "personnes"
+
+msgid "persons"
+msgstr "personnes"
+
+msgid "Custom bio"
+msgstr "Bio adaptée"
+
+msgid ""
+"Optional: provide a custom bio (if you leave it empty, it will display "
+"the person's bio)."
+msgstr ""
+"Optionnel: adaptez la bio (si vous laissez le champs vide, la biographie "
+"par défaut de la personne s'affichera)."
+
+msgid "person plugin"
+msgstr "plugin de personne"
+
+msgid "person plugins"
+msgstr "plugins de personnes"
+
+msgid "program"
+msgstr "parcours"
+
+msgid "programs"
+msgstr "parcours"
+
+msgid "program plugin"
+msgstr "plugin de parcours"
+
+msgid "program plugins"
+msgstr "plugins de parcours"
+
+msgid "role"
+msgstr "rôle"
+
+msgid ""
+"A role describes all the permissions that should be granted to the user "
+"group."
+msgstr ""
+"Un rôle décrit toutes les permissions qui doivent être accordées au "
+"groupe d'utilisateurs."
+
+msgid "page"
+msgstr "page"
+
+msgid "Page to which this role grants permissions."
+msgstr "Page à laquelle ce rôle donne des permissions."
+
+msgid "group"
+msgstr "groupe"
+
+msgid "User group that this role controls."
+msgstr "Groupe d'utilisateurs que ce rôle contrôle."
+
+msgid "filer folder"
+msgstr "dossier du classeur"
+
+msgid "Filer folder that this role controls."
+msgstr "Dossier du classeur que ce rôle contrôle."
+
+msgid "page role"
+msgstr "rôle de page"
+
+msgid "page roles"
+msgstr "rôles de page"
+
+msgid "{:s} | {:s}"
+msgstr "{:s} | {:s}"
+
+msgid "Course page"
+msgstr "Page de cours"
+
+msgid "Organization list"
+msgstr "Liste des établissements"
+
+msgid "Organization page"
+msgstr "Page d'établissement"
+
+msgid "Category list"
+msgstr "Liste des Catégories"
+
+msgid "Category page"
+msgstr "Page de catégorie"
+
+msgid "Blog post list"
+msgstr "Liste de billet de blog"
+
+msgid "Blog post page"
+msgstr "Page de billet de blog"
+
+msgid "Person page"
+msgstr "Page de personne"
+
+msgid "Person list"
+msgstr "Liste des personnes"
+
+msgid "Program page"
+msgstr "Page de parcours"
+
+msgid "Program list"
+msgstr "Liste des parcours"
+
+msgid "Search"
+msgstr "Recherche"
+
+msgid "List of child pages"
+msgstr "Liste des pages enfants"
+
+msgid "Homepage"
+msgstr "Page d'accueil"
+
+msgid "Single column"
+msgstr "Colonne unique"
+
+msgid "Three columns: (33% | 33% | 33%)"
+msgstr "Trois colonnes: (33% | 33% | 33%)"
+
+msgid "Two columns: (50% | 50%)"
+msgstr "Deux colonnes: (50% | 50%)"
+
+msgid "Two columns: (25% | 75%)"
+msgstr "Deux colonnes: (25% | 75%)"
+
+msgid "Two columns: (75% | 25%)"
+msgstr "Deux colonnes: (75% | 25%)"
+
+msgid "Footer"
+msgstr "Pied de page"
+
+msgid "Static headline"
+msgstr "Entête statique"
+
+msgid "Main content"
+msgstr "Contenu principal"
+
+msgid "Secondary content"
+msgstr "Deuxième contenu"
+
+msgid "Third content"
+msgstr "Troisième contenu"
+
+msgid "Cover"
+msgstr "Couverture"
+
+msgid "Catch phrase"
+msgstr "Slogan"
+
+msgid "About the course"
+msgstr "À propos du cours"
+
+msgid "What you will learn"
+msgstr "Ce que vous allez apprendre"
+
+msgid "Format"
+msgstr "Format"
+
+msgid "Prerequisites"
+msgstr "Prérequis"
+
+msgid "Team"
+msgstr "Équipe"
+
+msgid "Plan"
+msgstr "Plan"
+
+msgid "Complementary information"
+msgstr "Informations complémentaires"
+
+msgid "License for the course content"
+msgstr "Licence pour le contenu du cours"
+
+msgid "License for the content created by course participants"
+msgstr "Licence pour le contenu créé par les participants du cours"
+
+msgid "Categories"
+msgstr "Catégories"
+
+msgid "Icon"
+msgstr "Icône"
+
+msgid "Organizations"
+msgstr "Établissements"
+
+msgid "Assessment and Certification"
+msgstr "Évaluation et certification"
+
+msgid "Required equipment"
+msgstr "Équipement requis"
+
+msgid "Accessibility"
+msgstr "Accessibilité"
+
+msgid "Banner"
+msgstr "Bannière"
+
+msgid "Logo"
+msgstr "Logo"
+
+msgid "Description"
+msgstr "Description"
+
+msgid "Excerpt"
+msgstr "Extrait"
+
+msgid "Portrait"
+msgstr "Portrait"
+
+msgid "Bio"
+msgstr "Bio"
+
+msgid "Main Content"
+msgstr "Contenu principal"
+
+msgid "Author"
+msgstr "Auteur"
+
+msgid "Body"
+msgstr "Corps"
+
+msgid "Headline"
+msgstr "Entête"
+
+msgid "Courses"
+msgstr "Cours"
+
+msgid "Button caesura"
+msgstr "Bouton caesura"
+
+msgid "Full width"
+msgstr "Pleine largeur"
+
+msgid "No categories yet."
+msgstr "Pas de catégories."
+
+msgid "Not published yet"
+msgstr "Pas encore publié"
+
+msgid "No author yet"
+msgstr "Pas d'auteur"
+
+msgid "No excerpt content"
+msgstr "Pas d'extrait"
+
+msgid "No body content"
+msgstr "Pas de contenu"
+
+msgid "Related posts"
+msgstr "Articles liés"
+
+msgid "Other categories of articles"
+msgstr "Autres catégories d'articles"
+
+msgid "No associated blogposts"
+msgstr "Pas de billets de blog associés"
+
+#, python-format
+msgid "%(category_title)s - Category"
+msgstr "%(category_title)s - Catégorie"
+
+msgid "Sub categories"
+msgstr "Sous-catégories"
+
+msgid "Related courses"
+msgstr "Cours associés"
+
+msgid "Courses pagination"
+msgstr "Pagination des cours"
+
+#, python-format
+msgid ""
+"\n"
+" See all courses related to "
+"%(category_title)s\n"
+" "
+msgstr ""
+"\n"
+" Voir tous les cours liés à "
+"%(category_title)s\n"
+" "
+
+msgid "See all courses"
+msgstr "Voir tous les cours"
+
+msgid "Related organizations"
+msgstr "Établissements liés"
+
+msgid "Related organizations pagination"
+msgstr "Pagination des établissements liés"
+
+msgid "Related blogposts"
+msgstr "Billets de blog liés"
+
+msgid "Related blogposts pagination"
+msgstr "Pagination des articles de blog liés"
+
+msgid "Related persons"
+msgstr "Personnes liées"
+
+msgid "Related persons pagination"
+msgstr "Pagination des personnes liées"
+
+msgid "No categories"
+msgstr "Pas de catégories"
+
+#, python-format
+msgid "%(course_title)s - Course"
+msgstr "%(course_title)s - Cours"
+
+msgid "Ref. "
+msgstr "Réf. "
+
+msgid "No associated categories"
+msgstr "Aucune catégorie associée"
+
+msgid "Enter here an introduction to your course."
+msgstr "Saisissez ici une introduction à votre cours."
+
+msgid "Duration:"
+msgstr "Durée :"
+
+msgid "Effort:"
+msgstr "Effort :"
+
+msgid "Pace:"
+msgstr "Rythme:"
+
+msgid "Languages:"
+msgstr "Langues:"
+
+#, python-format
+msgid ""
+"\n"
+" %(count)s already "
+"enrolled!\n"
+" "
+msgstr ""
+"\n"
+" %(count)s déjà "
+"inscrits !\n"
+" "
+
+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."
+
+msgid "course cover image"
+msgstr "image de couverture du cours"
+
+#, python-format
+msgid ""
+"\n"
+" Archived on %(creation_date)s\n"
+" "
+msgstr ""
+"\n"
+" Archivé le %(creation_date)s\n"
+" "
+
+msgid "Go to current version"
+msgstr "Accédez à la version actuelle"
+
+msgid "Glimpse cover"
+msgstr "Image d'aperçu"
+
+msgid "Add an image for course cover on its glimpse."
+msgstr "Ajouter une image pour la couverture du cours sur son aperçu."
+
+msgctxt "course_detail__title"
+msgid "What you will learn"
+msgstr "Ce que vous allez apprendre"
+
+msgid "At the end of this course, you will be able to:"
+msgstr "À la fin de ce cours, vous saurez :"
+
+msgctxt "course_detail__title"
+msgid "Description"
+msgstr "Description"
+
+msgctxt "course_detail__title"
+msgid "Format"
+msgstr "Format"
+
+msgid "How is the course structured?"
+msgstr "Quelle est la structure du cours ?"
+
+msgctxt "course_detail__title"
+msgid "Prerequisites"
+msgstr "Prérequis"
+
+msgid "What are the prerequisites to follow this course?"
+msgstr "Quels sont les prérequis pour suivre ce cours ?"
+
+msgctxt "course_detail__title"
+msgid "Required Equipment"
+msgstr "Équipement requis"
+
+msgid "What are the required equipment to follow this course?"
+msgstr "Quels sont les équipements nécessaires pour suivre ce cours ?"
+
+msgctxt "course_detail__title"
+msgid "Assessment and certification"
+msgstr "Evaluation et Certification"
+
+msgid "How is progress evaluated and/or certified?"
+msgstr "Comment les étudiants sont ils évalués et/ou certifiés ?"
+
+msgctxt "course_detail__title"
+msgid "Accessibility"
+msgstr "Accessibilité"
+
+msgid "What is the accessibility of this course?"
+msgstr "Quelle est l'accessibilité de ce cours ?"
+
+msgctxt "course_detail__title"
+msgid "Course plan"
+msgstr "Plan de cours"
+
+msgid "Enter here the detailed course plan."
+msgstr "Détaillez ici le plan du cours."
+
+msgid ""
+"\n"
+" This course is part of a "
+"program\n"
+" "
+msgid_plural ""
+"\n"
+" This course is part of "
+"programs\n"
+" "
+msgstr[0] ""
+"\n"
+" Ce cours fait partie d'un "
+"parcours\n"
+" "
+msgstr[1] ""
+"\n"
+" Ce cours fait partie de plusieurs "
+"parcours\n"
+" "
+
+msgctxt "course_detail__title"
+msgid "Course team"
+msgstr "Équipe pédagogique"
+
+msgid "Who are the teachers in the course team?"
+msgstr "Qui sont les enseignants de l’équipe pédagogique ?"
+
+msgctxt "course_detail__title"
+msgid "Organizations"
+msgstr "Établissements"
+
+msgid "What are the organizations publishing this course?"
+msgstr "Qui sont les établissements publiant ce cours ?"
+
+msgctxt "course_detail__title"
+msgid "License"
+msgstr "Licence"
+
+msgid "What is the license for the course content?"
+msgstr "Quelle est la licence pour le contenu du cours ?"
+
+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 ?"
+
+msgid "Course code"
+msgstr "Code du cours"
+
+msgid "Course date"
+msgstr "Date du cours"
+
+msgid "Course team"
+msgstr "Équipe pédagogique"
+
+msgid "License"
+msgstr "Licence"
+
+#, python-format
+msgid ""
+"\n"
+" A %(model)s object is missing on this %(model)s page. Please "
+"select another page template.\n"
+"
\n"
+" If what you need is a %(model)s page, you need to create it via "
+"the wizard and choose \"New %(model)s page\".\n"
+" "
+msgstr ""
+"\n"
+" Il manque un objet %(model)s sur cette page %(model)s . Veuillez "
+"sélectionner un autre gabarit de page.\n"
+"
\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"
+" "
+
+#, python-format
+msgid "Link to the organization page of %(title)s"
+msgstr "Lien vers la page de l'organisation de %(title)s"
+
+msgid "Main organization"
+msgstr "Etablissement principal"
+
+msgctxt "organization_detail__title"
+msgid "Related organizations"
+msgstr "Établissements liés"
+
+msgid "Are there organizations affiliated to this organization?"
+msgstr "Y a-t-il des établissements affiliés à cet établissement ?"
+
+msgid "Related courses pagination"
+msgstr "Pagination des cours liés"
+
+#, python-format
+msgid ""
+"\n"
+" See all courses related to "
+"%(organization_title)s\n"
+" "
+msgstr ""
+"\n"
+" Voir tous les cours liés à "
+"%(organization_title)s\n"
+" "
+
+msgid "No organization yet"
+msgstr "Pas d'établissement"
+
+msgid "Enter your bio here..."
+msgstr "Saisissez ici votre bio..."
+
+#, python-format
+msgid "%(title)s avatar"
+msgstr "avatar de %(title)s"
+
+msgid "No associated organizations"
+msgstr "Aucun établissement associé"
+
+#, python-format
+msgid ""
+"\n"
+" See all courses related to "
+"%(person_title)s\n"
+" "
+msgstr ""
+"\n"
+" Voir tous les cours liés à "
+"%(person_title)s\n"
+" "
+
+msgid "Blogposts"
+msgstr "Articles de blog"
+
+msgid "Blogposts pagination"
+msgstr "Pagination des articles de blog"
+
+msgid "No persons"
+msgstr "Pas de personnes"
+
+#, python-format
+msgid "%(program_title)s - Program"
+msgstr "%(program_title)s - Programme"
+
+msgid "program cover image"
+msgstr "image de couverture de parcours"
+
+msgid "No associated programs"
+msgstr "Aucun parcours associé"
+
+#, python-brace-format
+msgid "Run {i:d}"
+msgstr "Session {i:d}"
+
+msgid "Regenerate search index..."
+msgstr "Regénérer l'index de recherche..."
+
+msgid "New courses"
+msgstr "Nouveaux cours"
+
+msgid "First session"
+msgstr "Première session"
+
+msgid "Availability"
+msgstr "Disponibilité"
+
+msgid "Languages"
+msgstr "Langues"
+
+msgid "Subjects"
+msgstr "Sujets"
+
+msgid "Levels"
+msgstr "Niveaux"
+
+msgid "Persons"
+msgstr "Personnes"
+
+msgid "Licences"
+msgstr "Licences"
+
+msgid "Weekly pace"
+msgstr "Rythme hebdomadaire"
+
+msgid "Self-paced"
+msgstr "À son rythme"
+
+msgid "Less than one hour"
+msgstr "Moins d'une heure"
+
+msgid "One to two hours"
+msgstr "Entre une et deux heures"
+
+msgid "More than two hours"
+msgstr "Plus de deux heures"
+
+msgid "Open for enrollment"
+msgstr "Ouvert pour inscription"
+
+msgid "Coming soon"
+msgstr "Bientôt"
+
+msgid "On-going"
+msgstr "En cours"
+
+msgid "Archived"
+msgstr "Archivé"
+
+msgid "Sort by configuration"
+msgstr "Trier par configuration"
+
+msgid "Sort by facet count"
+msgstr "Trier par compte de facette"
+
+msgid "Sort alphabetically"
+msgstr "Trier par ordre alphabétique"
+
+msgid "You are not allowed to manage the search index."
+msgstr "Vous n'êtes pas autorisé à modifier l'index de recherche."
+
+msgid "The search index was successfully bootstrapped"
+msgstr "L'index de recherche a été initialisé avec succès"
+
+msgid "Glimpse"
+msgstr "Aperçu"
+
+msgid "Link settings"
+msgstr "Paramètres du lien"
+
+msgid "Square card"
+msgstr "Carte carrée"
+
+msgid "Quote"
+msgstr "Citation"
+
+msgid "Half row"
+msgstr "Demi-rangée"
+
+msgid "Full row"
+msgstr "Rangée complète"
+
+msgid "Variant"
+msgstr "Variante"
+
+msgid "Form factor variant"
+msgstr "Variante de facteur de forme"
+
+msgid "image"
+msgstr "image"
+
+msgid "Content"
+msgstr "Contenu"
+
+msgid "External URL"
+msgstr "URL externe"
+
+msgid "Make the glimpse as a link with an external URL."
+msgstr "Configurer l'aperçu comme un lien vers une URL externe."
+
+msgid "Internal URL"
+msgstr "URL interne"
+
+msgid "Make the glimpse as a link with an internal (page) URL."
+msgstr "Configurer l'aperçu comme un lien vers une URL (page) interne."
+
+msgid "HTML Sitemap"
+msgstr "Plan de site HTML"
+
+msgid ""
+"Press save to create a site map. You will then be able to add a child "
+"plugin for each subtree in your sitemap."
+msgstr ""
+"Appuyez sur \"Enregistrer\" pour créer un plan de site. Vous pourrez "
+"ensuite ajouter un plugin enfant pour chaque sous-arbre de votre plan de "
+"site."
+
+msgid "HTML sitemap page"
+msgstr "Page de site HTML"
+
+msgid "root page"
+msgstr "page racine"
+
+msgid ""
+"This page will be at the root of your sitemap (or its children if the "
+"\"include root page\" flag is unticked)."
+msgstr ""
+"Cette page sera à la racine de votre plan de site (ou ses enfants au lieu "
+"d'elle si la case \"inclure la page racine\" n'est pas sélectionnée)."
+
+msgid "max depth"
+msgstr "profondeur maximale"
+
+msgid ""
+"Limit the level of nesting that your sitemap will contain below this "
+"page. An empty field or 0 equals to no limit."
+msgstr ""
+"Limitez la profondeur de votre plan de site sous cette page. Un champ "
+"vide ou égal à 0 correspond à une profondeur illimitée."
+
+msgid "in navigation"
+msgstr "dans le menu"
+
+msgid ""
+"Tick to exclude from sitemap the pages that are excluded from navigation."
+msgstr ""
+"Sélectionner pour exclure du plan de site les pages qui sont exclues du "
+"menu."
+
+msgid "include root page"
+msgstr "inclure la page racine"
+
+msgid ""
+"Tick to include the root page and its descendants. Untick to include only "
+"its descendants."
+msgstr ""
+"Sélectionner pour inclure la page racine et ses descendants. Ne pas "
+"sélectionner pour n'inclure que les descendants de la page racine."
+
+msgid "HTML Sitemaps"
+msgstr "Plans de site HTML"
+
+msgid "Sitemap"
+msgstr "Plan de site"
+
+msgid "Large Banner"
+msgstr "Grande Bannière"
+
+msgid "Medias"
+msgstr "Media"
+
+msgid "Hero introduction"
+msgstr "Introduction"
+
+msgid "Compacted introduction"
+msgstr "Introduction compactée"
+
+msgid "background image"
+msgstr "image d'arrière-plan"
+
+msgid "Template"
+msgstr "Modèle"
+
+msgid "Choose template to render plugin."
+msgstr "Choisir un modèle pour afficher le plugin."
+
+msgid "Explore our catalog"
+msgstr "Explorer notre catalogue"
+
+msgid "Search in our courses"
+msgstr "Chercher dans nos cours"
+
+msgid "Advanced settings"
+msgstr "Paramètres avancés"
+
+msgid "LTI consumer"
+msgstr "Consommateur LTI"
+
+msgid "Custom provider configuration"
+msgstr "Configuration manuelle du service"
+
+msgid "shared secret"
+msgstr "secret partagé"
+
+msgid ""
+"The url is not valid for this provider. It should be of the form \"{:s}\"."
+msgstr ""
+"L'url n'est pas valide pour ce service. Elle doit être de la forme \"{:"
+"s}\"."
+
+msgid ""
+"The url is not valid for this provider. It should start with \"{:s}\"."
+msgstr ""
+"L'url n'est pas valide pour ce service. Elle devrait commencer par \"{:"
+"s}\"."
+
+msgid "Please choose a predefined provider, or fill fields below"
+msgstr ""
+"Veuillez choisir un fournisseur de service LTI prédéfini, ou remplir les "
+"champs ci-dessous"
+
+msgid "Please choose a predefined provider above, or fill this field"
+msgstr ""
+"Veuillez choisir ci-dessus un fournisseur de service LTI prédéfini, ou "
+"remplir ce champs"
+
+msgid "Please fill this field"
+msgstr "Veuillez remplir ce champ"
+
+msgid "LTI url"
+msgstr "url LTI"
+
+msgid ""
+"For a predefined provider, leave this field empty for uploading new "
+"content."
+msgstr ""
+"Pour un fournisseur de service LTI prédéfini, laissez ce champ vide pour "
+"créer un nouveau contenu."
+
+msgid "Predefined LTI provider"
+msgstr "Fournisseur de service LTI prédéfini"
+
+msgid "Please choose a predefined provider or fill fields below."
+msgstr ""
+"Veuillez choisir un fournisseur de service LTI prédéfini, ou remplir les "
+"champs ci-dessous."
+
+msgid "Yes"
+msgstr "Oui"
+
+msgid "No"
+msgstr "Non"
+
+msgid "Nested item"
+msgstr "Élément imbriqué"
+
+msgid "List"
+msgstr "Liste"
+
+msgid "Plain text"
+msgstr "Texte brut"
+
+msgid "plain text"
+msgstr "texte brut"
+
+msgid "Section"
+msgstr "Section"
+
+msgid "Primary scheme"
+msgstr "Schéma primaire"
+
+msgid "Secondary scheme"
+msgstr "Schéma secondaire"
+
+msgid "Tertiary scheme"
+msgstr "Schéma tertiaire"
+
+msgid "Quaternary scheme"
+msgstr "Schéma quaternaire"
+
+msgid "Quinary scheme"
+msgstr "Schéma quinquénaire"
+
+msgid "Senary scheme"
+msgstr "Schéma sexténaire"
+
+msgid "Septenary scheme"
+msgstr "Schéma septénaire"
+
+msgid "Item tiles"
+msgstr "Tuiles d'objets"
+
+msgid "None"
+msgstr "Aucun"
+
+msgid "Optional template for custom look."
+msgstr "Modèle optionnel pour un rendu personnalisé."
+
+msgid "Attributes"
+msgstr "Attributs"
+
+msgid "Grid"
+msgstr "Grille"
+
+msgid ""
+"Define a Grid to use for contents, when no Grid is enable each content "
+"can define its own width."
+msgstr ""
+"Définit une grille à utiliser pour les contenus, quand aucune grille "
+"n'est activée, chaque contenu peut définir sa propre largeur."
+
+msgid "Grid gutter"
+msgstr "Gouttière de la grille"
+
+msgid "Enable a gutter between content items when Grid is enabled."
+msgstr ""
+"Activer une gouttière entre les éléments de contenu lorsque la grille est "
+"activée."
+
+msgid "Image"
+msgstr "Image"
+
+msgid "Simple text"
+msgstr "Texte simple"
+
+msgid "Transparent box"
+msgstr "Boîte transparente"
+
+msgid "Fulfilled box"
+msgstr "Boîte avec fond"
+
+msgid "Stroked box"
+msgstr "Boîte avec bordure"
+
+msgid "body"
+msgstr "corps"
+
+msgid "Box variant"
+msgstr "Variante de boîte"
+
+msgid "Enable a themed box to enclose content."
+msgstr "Utiliser une boîte stylisée pour inclure du contenu."
+
+#, python-format
+msgid ""
+"Ensure this text has at most %(limit_value)d character (it has "
+"%(show_value)d)."
+msgid_plural ""
+"Ensure this text has at most %(limit_value)d characters (it has "
+"%(show_value)d)."
+msgstr[0] ""
+"Assurez-vous que ce texte a au maximum %(limit_value)d caractères (il en "
+"a %(show_value)d)."
+msgstr[1] ""
+"Assurez-vous que ce texte fait au maximum %(limit_value)d caractères (il "
+"en a %(show_value)d)."
diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/ko_KR/LC_MESSAGES/django.po b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/ko_KR/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..2cdddc65be
--- /dev/null
+++ b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/ko_KR/LC_MESSAGES/django.po
@@ -0,0 +1,66 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: richie\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-31 17:41+0100\n"
+"PO-Revision-Date: 2024-11-20 14:09\n"
+"Last-Translator: \n"
+"Language-Team: Korean\n"
+"Language: ko_KR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Crowdin-Project: richie\n"
+"X-Crowdin-Project-ID: 308578\n"
+"X-Crowdin-Language: ko\n"
+"X-Crowdin-File: backend.pot\n"
+"X-Crowdin-File-ID: 32\n"
+
+#: newsite/settings.py:250 newsite/settings.py:260
+msgid "Dashboard"
+msgstr ""
+
+#: newsite/settings.py:251
+msgid "{base_url:s}/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:261
+msgid "/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:264
+msgid "Teacher dashboard"
+msgstr ""
+
+#: newsite/settings.py:265
+msgid "/dashboard/teacher"
+msgstr ""
+
+#: newsite/settings.py:287
+msgid "Profile"
+msgstr ""
+
+#: newsite/settings.py:288
+msgid "{base_url:s}/u/(username)"
+msgstr ""
+
+#: newsite/settings.py:291
+msgid "Account"
+msgstr ""
+
+#: newsite/settings.py:292
+msgid "{base_url:s}/account/settings"
+msgstr ""
+
+#: newsite/settings.py:385
+msgid "Teaser"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "English"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "French"
+msgstr ""
diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/pt_PT/LC_MESSAGES/django.po b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/pt_PT/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..36e21afa21
--- /dev/null
+++ b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/pt_PT/LC_MESSAGES/django.po
@@ -0,0 +1,1641 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: richie\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-31 17:41+0100\n"
+"PO-Revision-Date: 2024-11-20 14:09\n"
+"Last-Translator: \n"
+"Language-Team: Portuguese\n"
+"Language: pt_PT\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Crowdin-Project: richie\n"
+"X-Crowdin-Project-ID: 308578\n"
+"X-Crowdin-Language: pt-PT\n"
+"X-Crowdin-File: backend.pot\n"
+"X-Crowdin-File-ID: 32\n"
+
+#: newsite/settings.py:250 newsite/settings.py:260
+#, fuzzy
+#| msgid "dashboard"
+msgid "Dashboard"
+msgstr "painel de controlo"
+
+#: newsite/settings.py:251
+msgid "{base_url:s}/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:261
+#, fuzzy
+#| msgid "dashboard"
+msgid "/dashboard/"
+msgstr "painel de controlo"
+
+#: newsite/settings.py:264
+#, fuzzy
+#| msgid "dashboard"
+msgid "Teacher dashboard"
+msgstr "painel de controlo"
+
+#: newsite/settings.py:265
+#, fuzzy
+#| msgid "dashboard"
+msgid "/dashboard/teacher"
+msgstr "painel de controlo"
+
+#: newsite/settings.py:287
+msgid "Profile"
+msgstr ""
+
+#: newsite/settings.py:288
+msgid "{base_url:s}/u/(username)"
+msgstr ""
+
+#: newsite/settings.py:291
+#, fuzzy
+#| msgid "Accordion"
+msgid "Account"
+msgstr "Acordeão"
+
+#: newsite/settings.py:292
+msgid "{base_url:s}/account/settings"
+msgstr ""
+
+#: newsite/settings.py:385
+msgid "Teaser"
+msgstr "Teaser"
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "English"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "French"
+msgstr ""
+
+msgid "Richie Plugins"
+msgstr "Plugins do Richie"
+
+msgid "Define a duration as a number of time units"
+msgstr "Defina a duração como uma unidade de tempo"
+
+#, python-format
+msgid "%(value)s is not a valid choice for a time unit."
+msgstr "%(value)s não é uma unidade de tempo válida."
+
+msgid "A composite duration should be a pair: number and time unit."
+msgstr "Uma duração composta deve ser um par: número e unidade de tempo."
+
+msgid "A composite duration should be a round number of time units."
+msgstr "A duração composta deve ser um valor inteiro de unidades de tempo."
+
+msgid "A composite duration should be positive."
+msgstr "Uma duração composta deve ser positiva."
+
+msgid "Define an effort"
+msgstr "Defina uma taxa de esforço"
+
+msgid "An effort should be a triplet: number, time unit and reference unit."
+msgstr ""
+"A taxa de esforço deve ser representada por um conjunto de três valores: "
+"número, unidade de tempo e referência."
+
+msgid "An effort should be a round number of time units."
+msgstr "A taxa de esforço deve ser um valor inteiro de unidades de tempo."
+
+msgid "An effort should be positive."
+msgstr "A taxa de esforço deve ser positiva."
+
+msgid "The effort time unit should be shorter than the reference unit."
+msgstr ""
+"A unidade de tempo da taxa de esforço deve ser menor do que a unidade de "
+"referência."
+
+msgid "{:s} and {:s}"
+msgstr "{:s} e {:s}"
+
+msgid " and "
+msgstr " e "
+
+#, python-format
+msgid "You can only select up to %(limit_value)d choices."
+msgstr "Só pode selecionar até %(limit_value)d escolhas."
+
+#, python-format
+msgid "Multi select field (up to %(max_choices)s choices)"
+msgstr "Caixa de seleção múltipla (até %(max_choices)s escolhas)"
+
+#, python-format
+msgid "Value %(value)s is not a valid choice."
+msgid_plural "Values %(value)s are not valid choices."
+msgstr[0] "O valor %(value)s não é uma escolha válida."
+msgstr[1] "Os valores %(value)s não são escolhas válidas."
+
+msgid ""
+"Storing {:d} choices could require storing a CharField of up to {:d} "
+"characters. Please reduce 'max_choices' or increase 'max_length'."
+msgstr ""
+"Guardar {:d} opções poderá exigir o armazenamento de um Campo de {:d} "
+"caracteres. Por favor reduza 'max_choices' ou aumente 'max_length'."
+
+msgid "Video"
+msgstr "Vídeo"
+
+msgid "Your browser doesn't support this video format."
+msgstr "O seu navegador não suporta este formato de vídeo."
+
+msgid "You are here:"
+msgstr "Você está aqui:"
+
+msgid "Skip to main content"
+msgstr "Saltar para o conteúdo"
+
+msgid "Go to homepage"
+msgstr "Ir para a página inicial"
+
+msgid "Menu"
+msgstr "Menu"
+
+msgid "Contact us"
+msgstr "Contacte-nos"
+
+msgid "Life-changing learning!"
+msgstr "Aprendizagem que muda a sua vida!"
+
+msgid "Learn more"
+msgstr "Saiba mais"
+
+msgid "Powered by"
+msgstr "Desenvolvido por"
+
+msgid "This page has no child objects"
+msgstr "Esta página não tem objetos filhos"
+
+msgid "Back to home"
+msgstr "Voltar à página inicial"
+
+msgid "Pagination"
+msgstr "Paginação"
+
+#, python-format
+msgid "Currently reading last page %(page)s"
+msgstr "A ler a última página %(page)s"
+
+#, python-format
+msgid "Currently reading page %(page)s"
+msgstr "A ler a página %(page)s"
+
+#, python-format
+msgid "Page %(page)s"
+msgstr "Página %(page)s"
+
+#, python-format
+msgid "Previous page %(page)s"
+msgstr "Página anterior %(page)s"
+
+#, python-format
+msgid "Last page %(page)s"
+msgstr "Última página %(page)s"
+
+#, python-format
+msgid "Next page %(page)s"
+msgstr "Página seguinte %(page)s"
+
+#, python-format
+msgid "Richie news: %(title)s"
+msgstr "Notícias do Richie: %(title)s"
+
+#, python-format
+msgid "Richie news: %(title)s %(url)s"
+msgstr "Notícias de Richie: %(title)s %(url)s"
+
+msgid "Share on Facebook"
+msgstr "Partilhar no Facebook"
+
+msgid "Share on Twitter"
+msgstr "Partilhar no Twitter"
+
+msgid "Share on Linkedin"
+msgstr "Partilhar no Linkedin"
+
+msgid "Share by Email"
+msgstr "Partilhar por e-mail"
+
+msgid "Follow a course online with Richie"
+msgstr "Siga um curso online com o Richie"
+
+#, python-format
+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"
+
+msgid "Facebook"
+msgstr "Facebook"
+
+msgid "Twitter page"
+msgstr "Página do Twitter"
+
+msgid "Linkedin page"
+msgstr "Página do Linkedin"
+
+msgid "Bad request"
+msgstr "Pedido inválido"
+
+msgid ""
+"Your query seems to be malformed. Please check your data and try again."
+msgstr ""
+"A sua consulta parece estar incorreta. Por favor, verifique os dados e "
+"tente novamente."
+
+msgid "Forbidden"
+msgstr "Proibido"
+
+msgid "You do not have the required permissions to access this resource."
+msgstr "Não tem as permissões necessárias para aceder a este recurso."
+
+msgid "Page not found"
+msgstr "Página não encontrada"
+
+msgid "The requested resource does not exist."
+msgstr "O recurso solicitado não existe."
+
+msgid "Server bad request"
+msgstr "Processo não permitido pelo servidor"
+
+msgid "Something went wrong. Please try again later."
+msgstr "Ocorreu um erro. Por favor, tente novamente."
+
+msgid "Course could not be found."
+msgstr "O curso não foi encontrado."
+
+msgid "See user group"
+msgstr "Ver grupo de utilizadores"
+
+msgid "See filer folder"
+msgstr "Ver pasta do arquivador"
+
+msgid "Organization"
+msgstr "Organização"
+
+msgid "Organization by Category"
+msgstr "Organização por Categoria"
+
+msgid "Category"
+msgstr "Categoria"
+
+msgid "Course"
+msgstr "Curso"
+
+msgid "Person"
+msgstr "Pessoa"
+
+msgid "Licence"
+msgstr "Licença"
+
+msgid "Post"
+msgstr "Publicação"
+
+msgid "Program"
+msgstr "Programa"
+
+msgid "{!s} settings"
+msgstr "Definições de {!s}"
+
+msgid "Snapshot this page..."
+msgstr "Capturar esta página..."
+
+msgid ""
+"This will place a copy of this page as its child and move all its "
+"courseruns as children of its new copy."
+msgstr ""
+"Isto colocará uma cópia desta página como filho e moverá todos as edições "
+"do curso como filhos da sua nova cópia."
+
+msgid "New page"
+msgstr "Nova página"
+
+msgid "Create a new page next to the current page."
+msgstr "Criar uma nova página próxima à página atual."
+
+msgid "New sub page"
+msgstr "Nova sub-página"
+
+msgid "Create a page below the current page."
+msgstr "Criar uma página abaixo da página atual."
+
+msgid "Page title"
+msgstr "Título da página"
+
+msgid "Title of the page in current language"
+msgstr "Título da página no idioma atual"
+
+msgid "Page slug"
+msgstr "Slug da página"
+
+msgid "Slug of the page in current language"
+msgstr "Slug da página no idioma atual"
+
+msgid ""
+"This slug is too long. The length of the path built by prepending the "
+"slug of the parent page would be {:d} characters long and it should be "
+"less than 255"
+msgstr ""
+"Este slug é demasiado longo. O comprimento do caminho construído teria {:"
+"d} caracteres e não deveria ter mais de 255"
+
+msgid "This slug is already in use"
+msgstr "Este slug já se encontra em utilização"
+
+msgid ""
+"You must first create a parent page and set its `reverse_id` to `{:s}`."
+msgstr ""
+"Primeiro é preciso criar uma página pai e definir o `reverse_id` para `{:"
+"s}`."
+
+msgid "Code"
+msgstr "Código"
+
+msgid "Unique reference for the course."
+msgstr "Referência única para o curso."
+
+msgid "New course page"
+msgstr "Nova página de curso"
+
+msgid "Create a new course page"
+msgstr "Criar uma nova página de curso"
+
+msgid "Unique reference for the organization."
+msgstr "Referência única para a organização."
+
+msgid "New organization page"
+msgstr "Nova página de organização"
+
+msgid "Create a new organization page"
+msgstr "Criar uma nova página de organização"
+
+msgid "New category page"
+msgstr "Nova página de categoria"
+
+msgid "Create a new category page"
+msgstr "Criar uma nova página de categoria"
+
+msgid "New blog post"
+msgstr "Nova publicação no blog"
+
+msgid "Create a new blog post"
+msgstr "Criar uma nova publicação no blog"
+
+msgid "New person page"
+msgstr "Nova página de pessoa"
+
+msgid "Create a new person page"
+msgstr "Criar uma nova página de pessoa"
+
+msgid "New program"
+msgstr "Novo programa"
+
+msgid "Create a new program"
+msgstr "Criar um novo programa"
+
+msgid "Admin"
+msgstr "Admin"
+
+msgid "Inherit"
+msgstr "Herdar"
+
+msgid "Default"
+msgstr "Predefinição"
+
+msgid "Mini"
+msgstr "Mini"
+
+msgid "Favorite"
+msgstr "Favorito"
+
+msgid "Badge"
+msgstr "Emblema"
+
+msgid "Tag"
+msgstr "Etiqueta"
+
+msgid "Small"
+msgstr "Pequeno"
+
+msgid "Large"
+msgstr "Grande"
+
+msgid "Card"
+msgstr "Cartão"
+
+msgid "Row"
+msgstr "Linha"
+
+msgid "minute"
+msgstr "minuto"
+
+msgid "minutes"
+msgstr "minutos"
+
+msgid "hour"
+msgstr "hora"
+
+msgid "hours"
+msgstr "horas"
+
+msgid "day"
+msgstr "dia"
+
+msgid "days"
+msgstr "dias"
+
+msgid "week"
+msgstr "semana"
+
+msgid "weeks"
+msgstr "semanas"
+
+msgid "month"
+msgstr "mês"
+
+msgid "months"
+msgstr "meses"
+
+msgid "Run {:d}"
+msgstr "Executar {:d}"
+
+msgid "You can't snapshot a snapshot."
+msgstr "Você não pode capturar uma captura."
+
+msgid "You don't have sufficient permissions to snapshot this page."
+msgstr "Não tem permissões suficientes para fazer uma captura desta página."
+
+msgid "Archived on {now:%Y-%m-%d %H:%M:%S}"
+msgstr "Arquivado em {now:%Y-%m-%d %H:%M:%S}"
+
+msgid "{title:s} ({version!s})"
+msgstr "{title:s} ({version!s})"
+
+msgid "blog post"
+msgstr "publicação"
+
+msgid "blog posts"
+msgstr "publicações"
+
+msgid "variant"
+msgstr "variante"
+
+msgid "Optional glimpse variant for a custom look."
+msgstr "Variante de visualização personalizada."
+
+msgid "blog post plugin"
+msgstr "plugin de publicações"
+
+msgid "blog post plugins"
+msgstr "plugins de publicações"
+
+msgid "category"
+msgstr "categoria"
+
+msgid "categories"
+msgstr "categorias"
+
+msgid "category plugin"
+msgstr "plugin de categoria"
+
+msgid "category plugins"
+msgstr "plugins de categoria"
+
+msgid "enroll now"
+msgstr "inscreva-se já"
+
+msgid "study now"
+msgstr "estudar agora"
+
+msgid "open for enrollment"
+msgstr "inscrições abertas"
+
+msgid "starting on"
+msgstr "inicia a"
+
+msgid "closing on"
+msgstr "encerra a"
+
+msgid "enrollment closed"
+msgstr "inscrição encerrada"
+
+msgid "on-going"
+msgstr "a decorrer"
+
+msgid "archived"
+msgstr "arquivado"
+
+msgid "to be scheduled"
+msgstr "a agendar"
+
+msgid "forever open"
+msgstr "sempre aberto"
+
+msgid "code"
+msgstr "código"
+
+msgid "The course time range."
+msgstr "O intervalo de duração curso."
+
+msgid "Total amount of time to complete this course."
+msgstr "Quantidade total de tempo para concluir este curso."
+
+msgid "is listed"
+msgstr "está listado"
+
+msgid "Tick if you want the course to be visible on the search page."
+msgstr "Marque se deseja que o curso esteja visível na página de pesquisa."
+
+msgid "is self paced"
+msgstr "ao ritmo do estudante"
+
+msgid "Tick if the course pace is self paced."
+msgstr "Marque se o curso é ao ritmo do estudante."
+
+msgid "course"
+msgstr "curso"
+
+msgid "courses"
+msgstr "cursos"
+
+msgid "Self paced"
+msgstr "Ao ritmo do estudante"
+
+msgid "~{pace:d} {effort_unit!s}/{duration_unit!s}"
+msgstr "~{pace:d} {effort_unit!s}/{duration_unit!s}"
+
+msgid "~{pace_hours:d}h{pace_minutes:d}/{duration_unit!s}"
+msgstr "~{pace_hours:d}h{pace_minutes:d}/{duration_unit!s}"
+
+msgid "Manual"
+msgstr "Manual"
+
+msgid "Synchronization to draft page"
+msgstr "Sincronização com a página rascunho"
+
+msgid "Synchronization to public page"
+msgstr "Sincronização com a página pública"
+
+msgid ""
+"course_and_search - show on the course page and include in search results"
+msgstr ""
+"course_and_search - mostrar na página do curso e incluir nos resultados "
+"da pesquisa"
+
+msgid "course_only - show on the course page and hide from search results"
+msgstr ""
+"course_only - mostrar na página do curso mas ocultar nos resultados de "
+"pesquisa"
+
+msgid "hidden - hide on the course page and from search results"
+msgstr "hidden - ocultar na página de curso e nos resultados de pesquisa"
+
+msgid ""
+"compact - show minimal information about the course run (only for "
+"products)."
+msgstr ""
+"compacto - mostra informação mínima sobre a edição do curso (só para "
+"produtos)."
+
+msgid ""
+"detailed - show all information about the course run (only for products)."
+msgstr ""
+"detalhado - mostra toda a informação sobre a edição do curso (só para "
+"produtos)."
+
+msgid "Synchronization mode"
+msgstr "Modo de sincronização"
+
+msgid "resource link"
+msgstr "link do recurso"
+
+msgid "course start"
+msgstr "início do curso"
+
+msgid "course end"
+msgstr "fim do curso"
+
+msgid "enrollment start"
+msgstr "início das inscrições"
+
+msgid "enrollment end"
+msgstr "fim das inscrições"
+
+msgid "The list of languages in which the course content is available."
+msgstr "Lista de idiomas em que o conteúdo do curso está disponível."
+
+msgid "enrollment count"
+msgstr "número de inscrições"
+
+msgid "The number of enrolled students"
+msgstr "O número de alunos inscritos"
+
+msgid "catalog visibility"
+msgstr "visibilidade no catálogo"
+
+msgid "course run"
+msgstr "edição do curso"
+
+msgid "course runs"
+msgstr "edições do curso"
+
+msgid "title"
+msgstr "título"
+
+msgid "Course run translation"
+msgstr "Tradução da edição do curso"
+
+msgid "Course run translations"
+msgstr "Traduções da edição do curso"
+
+msgid "Empty title"
+msgstr "Título em branco"
+
+msgid "course plugin"
+msgstr "plugin do curso"
+
+msgid "course plugins"
+msgstr "plugins do curso"
+
+msgid "logo"
+msgstr "logotipo"
+
+msgid "url"
+msgstr "url"
+
+msgid "name"
+msgstr "nome"
+
+msgid "content"
+msgstr "conteúdo"
+
+msgid "licence"
+msgstr "licença"
+
+msgid "licences"
+msgstr "licenças"
+
+msgid "Licence translation"
+msgstr "Tradução da licença"
+
+msgid "licence translations"
+msgstr "traduções da licença"
+
+msgid "description"
+msgstr "descrição"
+
+msgid "licence plugin"
+msgstr "plugin da licença"
+
+msgid "licence plugins"
+msgstr "plugins de licença"
+
+msgid "organization"
+msgstr "organização"
+
+msgid "organizations"
+msgstr "organizações"
+
+msgid "organization plugin"
+msgstr "plugin da organização"
+
+msgid "organization plugins"
+msgstr "plugins da organização"
+
+msgid "organizations by category plugin"
+msgstr "plugin de organizações por categoria"
+
+msgid "organizations by category plugins"
+msgstr "plugins de organizações por categoria"
+
+msgid "person"
+msgstr "pessoa"
+
+msgid "persons"
+msgstr "pessoas"
+
+msgid "Custom bio"
+msgstr "Biografia personalizada"
+
+msgid ""
+"Optional: provide a custom bio (if you leave it empty, it will display "
+"the person's bio)."
+msgstr ""
+"Opcional: fornecer uma biografia personalizada (caso a deixe vazia, ela "
+"exibirá a bio)."
+
+msgid "person plugin"
+msgstr "plugin de pessoa"
+
+msgid "person plugins"
+msgstr "plugins de pessoa"
+
+msgid "program"
+msgstr "programa"
+
+msgid "programs"
+msgstr "programas"
+
+msgid "program plugin"
+msgstr "plugin do programa"
+
+msgid "program plugins"
+msgstr "plugins do programa"
+
+msgid "role"
+msgstr "papel"
+
+msgid ""
+"A role describes all the permissions that should be granted to the user "
+"group."
+msgstr ""
+"Um papel descreve todas as permissões dadas a um grupo de utilizadores."
+
+msgid "page"
+msgstr "página"
+
+msgid "Page to which this role grants permissions."
+msgstr "Página à qual este papel concede permissões."
+
+msgid "group"
+msgstr "grupo"
+
+msgid "User group that this role controls."
+msgstr "Grupo de utilizadores controlado por este papel."
+
+msgid "filer folder"
+msgstr "pasta do arquivador"
+
+msgid "Filer folder that this role controls."
+msgstr "Pasta do arquivador controlada por este papel."
+
+msgid "page role"
+msgstr "papel da página"
+
+msgid "page roles"
+msgstr "papéis de página"
+
+msgid "{:s} | {:s}"
+msgstr "{:s} | {:s}"
+
+msgid "Course page"
+msgstr "Página do curso"
+
+msgid "Organization list"
+msgstr "Lista de organizações"
+
+msgid "Organization page"
+msgstr "Página da organização"
+
+msgid "Category list"
+msgstr "Lista de categorias"
+
+msgid "Category page"
+msgstr "Página de categorias"
+
+msgid "Blog post list"
+msgstr "Lista de publicações"
+
+msgid "Blog post page"
+msgstr "Página de publicação"
+
+msgid "Person page"
+msgstr "Página da pessoa"
+
+msgid "Person list"
+msgstr "Lista de pessoas"
+
+msgid "Program page"
+msgstr "Página de programa"
+
+msgid "Program list"
+msgstr "Lista de programas"
+
+msgid "Search"
+msgstr "Pesquisar"
+
+msgid "List of child pages"
+msgstr "Lista de páginas filhas"
+
+msgid "Homepage"
+msgstr "Página inicial"
+
+msgid "Single column"
+msgstr "Coluna única"
+
+msgid "Three columns: (33% | 33% | 33%)"
+msgstr "Três colunas: (33% | 33% | 33%)"
+
+msgid "Two columns: (50% | 50%)"
+msgstr "Duas colunas: (50% | 50%)"
+
+msgid "Two columns: (25% | 75%)"
+msgstr "Duas colunas: (25% | 75%)"
+
+msgid "Two columns: (75% | 25%)"
+msgstr "Duas colunas: (75% | 25%)"
+
+msgid "Footer"
+msgstr "Rodapé"
+
+msgid "Static headline"
+msgstr "Cabeçalho estático"
+
+msgid "Main content"
+msgstr "Conteúdo principal"
+
+msgid "Secondary content"
+msgstr "Conteúdo secundário"
+
+msgid "Third content"
+msgstr "Conteúdo terciário"
+
+msgid "Cover"
+msgstr "Capa"
+
+msgid "Catch phrase"
+msgstr "Frase-chave"
+
+msgid "About the course"
+msgstr "Sobre o curso"
+
+msgid "What you will learn"
+msgstr "O que vai aprender"
+
+msgid "Format"
+msgstr "Formato"
+
+msgid "Prerequisites"
+msgstr "Pré-requisitos"
+
+msgid "Team"
+msgstr "Equipa"
+
+msgid "Plan"
+msgstr "Plano"
+
+msgid "Complementary information"
+msgstr "Informação complementar"
+
+msgid "License for the course content"
+msgstr "Licença para o conteúdo do curso"
+
+msgid "License for the content created by course participants"
+msgstr "Licença para o conteúdo criado pelos participantes do curso"
+
+msgid "Categories"
+msgstr "Categorias"
+
+msgid "Icon"
+msgstr "Ícone"
+
+msgid "Organizations"
+msgstr "Organizações"
+
+msgid "Assessment and Certification"
+msgstr "Avaliação e Certificação"
+
+msgid "Required equipment"
+msgstr "Equipamento necessário"
+
+msgid "Accessibility"
+msgstr "Acessibilidade"
+
+msgid "Banner"
+msgstr "Banner"
+
+msgid "Logo"
+msgstr "Logo"
+
+msgid "Description"
+msgstr "Descrição"
+
+msgid "Excerpt"
+msgstr "Excerto"
+
+msgid "Portrait"
+msgstr "Retrato"
+
+msgid "Bio"
+msgstr "Bio"
+
+msgid "Main Content"
+msgstr "Conteúdo Principal"
+
+msgid "Author"
+msgstr "Autor"
+
+msgid "Body"
+msgstr "Conteúdo"
+
+msgid "Headline"
+msgstr "Título"
+
+msgid "Courses"
+msgstr "Cursos"
+
+msgid "Button caesura"
+msgstr "Botão de quebra de secção"
+
+msgid "Full width"
+msgstr "Largura total"
+
+msgid "No categories yet."
+msgstr "Não existem categorias."
+
+msgid "Not published yet"
+msgstr "Não publicado"
+
+msgid "No author yet"
+msgstr "Nenhum autor"
+
+msgid "No excerpt content"
+msgstr "Sem conteúdo no excerto"
+
+msgid "No body content"
+msgstr "Sem conteúdo de corpo de texto"
+
+msgid "Related posts"
+msgstr "Publicações relacionadas"
+
+msgid "Other categories of articles"
+msgstr "Outras categorias de artigos"
+
+msgid "No associated blogposts"
+msgstr "Não existem publicações associadas"
+
+#, python-format
+msgid "%(category_title)s - Category"
+msgstr "%(category_title)s - Categoria"
+
+msgid "Sub categories"
+msgstr "Subcategorias"
+
+msgid "Related courses"
+msgstr "Cursos relacionados"
+
+msgid "Courses pagination"
+msgstr "Paginação de cursos"
+
+#, python-format
+msgid ""
+"\n"
+" See all courses related to "
+"%(category_title)s\n"
+" "
+msgstr ""
+"\n"
+" Ver todos os cursos "
+"relacionados com %(category_title)s\n"
+" "
+
+msgid "See all courses"
+msgstr "Ver todos os cursos"
+
+msgid "Related organizations"
+msgstr "Organizações relacionadas"
+
+msgid "Related organizations pagination"
+msgstr "Paginação de organizações relacionadas"
+
+msgid "Related blogposts"
+msgstr "Publicações relacionadas"
+
+msgid "Related blogposts pagination"
+msgstr "Página de posts de blog relacionados"
+
+msgid "Related persons"
+msgstr "Pessoas relacionadas"
+
+msgid "Related persons pagination"
+msgstr "Paginação de pessoas relacionadas"
+
+msgid "No categories"
+msgstr "Sem categorias"
+
+#, python-format
+msgid "%(course_title)s - Course"
+msgstr "%(course_title)s - Curso"
+
+msgid "Ref. "
+msgstr "Cód. "
+
+msgid "No associated categories"
+msgstr "Nenhuma categoria associada"
+
+msgid "Enter here an introduction to your course."
+msgstr "Escreva um texto introdutório para o curso."
+
+msgid "Duration:"
+msgstr "Duração:"
+
+msgid "Effort:"
+msgstr "Esforço:"
+
+msgid "Pace:"
+msgstr "Ritmo:"
+
+msgid "Languages:"
+msgstr "Idiomas:"
+
+#, python-format
+msgid ""
+"\n"
+" %(count)s already "
+"enrolled!\n"
+" "
+msgstr ""
+"\n"
+" %(count)s já "
+"inscritos!\n"
+" "
+
+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."
+
+msgid "course cover image"
+msgstr "imagem de capa do curso"
+
+#, python-format
+msgid ""
+"\n"
+" Archived on %(creation_date)s\n"
+" "
+msgstr ""
+"\n"
+" Arquivado em %(creation_date)s\n"
+" "
+
+msgid "Go to current version"
+msgstr "Ir para a versão atual"
+
+msgid "Glimpse cover"
+msgstr "Capa da perspectiva"
+
+msgid "Add an image for course cover on its glimpse."
+msgstr "Adicione uma imagem para a capa do curso na perspectiva."
+
+msgctxt "course_detail__title"
+msgid "What you will learn"
+msgstr "O que vai aprender"
+
+msgid "At the end of this course, you will be able to:"
+msgstr "No final deste curso, será capaz de:"
+
+msgctxt "course_detail__title"
+msgid "Description"
+msgstr "Descrição"
+
+msgctxt "course_detail__title"
+msgid "Format"
+msgstr "Formato"
+
+msgid "How is the course structured?"
+msgstr "Como está estruturado o curso?"
+
+msgctxt "course_detail__title"
+msgid "Prerequisites"
+msgstr "Pré-requisitos"
+
+msgid "What are the prerequisites to follow this course?"
+msgstr "Quais são os pré-requisitos para este curso?"
+
+msgctxt "course_detail__title"
+msgid "Required Equipment"
+msgstr "Equipamento Necessário"
+
+msgid "What are the required equipment to follow this course?"
+msgstr "Quais são os equipamentos necessários para frequentar este curso?"
+
+msgctxt "course_detail__title"
+msgid "Assessment and certification"
+msgstr "Avaliação e certificação"
+
+msgid "How is progress evaluated and/or certified?"
+msgstr "Como é avaliado o progresso e/ou certificado?"
+
+msgctxt "course_detail__title"
+msgid "Accessibility"
+msgstr "Acessibilidade"
+
+msgid "What is the accessibility of this course?"
+msgstr "Qual é a acessibilidade deste curso?"
+
+msgctxt "course_detail__title"
+msgid "Course plan"
+msgstr "Plano de curso"
+
+msgid "Enter here the detailed course plan."
+msgstr "Descreva aqui o plano detalhado do curso."
+
+msgid ""
+"\n"
+" This course is part of a "
+"program\n"
+" "
+msgid_plural ""
+"\n"
+" This course is part of "
+"programs\n"
+" "
+msgstr[0] ""
+"\n"
+" Este curso faz parte de um "
+"programa\n"
+" "
+msgstr[1] ""
+"\n"
+" Este curso faz parte de "
+"programas\n"
+" "
+
+msgctxt "course_detail__title"
+msgid "Course team"
+msgstr "Equipa do curso"
+
+msgid "Who are the teachers in the course team?"
+msgstr "Quem são os professores da equipa do curso?"
+
+msgctxt "course_detail__title"
+msgid "Organizations"
+msgstr "Organizações"
+
+msgid "What are the organizations publishing this course?"
+msgstr "Quem são as organizações responsáveis por este curso?"
+
+msgctxt "course_detail__title"
+msgid "License"
+msgstr "Licença"
+
+msgid "What is the license for the course content?"
+msgstr "Qual é a licença para o conteúdo do curso?"
+
+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?"
+
+msgid "Course code"
+msgstr "Código do curso"
+
+msgid "Course date"
+msgstr "Data do curso"
+
+msgid "Course team"
+msgstr "Equipa do curso"
+
+msgid "License"
+msgstr "Licença"
+
+#, python-format
+msgid ""
+"\n"
+" A %(model)s object is missing on this %(model)s page. Please "
+"select another page template.\n"
+"
\n"
+" If what you need is a %(model)s page, you need to create it via "
+"the wizard and choose \"New %(model)s page\".\n"
+" "
+msgstr ""
+"\n"
+" Um objeto %(model)s está em falta nesta página %(model)s. Por "
+"favor, selecione outro modelo de página.\n"
+"
\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"
+" "
+
+msgid "Main organization"
+msgstr "Organização principal"
+
+msgctxt "organization_detail__title"
+msgid "Related organizations"
+msgstr "Organizações relacionadas"
+
+msgid "Are there organizations affiliated to this organization?"
+msgstr "Existem organizações afiliadas a esta organização?"
+
+msgid "Related courses pagination"
+msgstr "Paginação de cursos relacionados"
+
+#, python-format
+msgid ""
+"\n"
+" See all courses related to "
+"%(organization_title)s\n"
+" "
+msgstr ""
+"\n"
+" Ver todos os cursos "
+"relacionados com %(organization_title)s\n"
+" "
+
+msgid "No organization yet"
+msgstr "Nenhuma organização disponível"
+
+msgid "Enter your bio here..."
+msgstr "Insira a sua biografia aqui..."
+
+#, python-format
+msgid "%(title)s avatar"
+msgstr "avatar de %(title)s"
+
+msgid "No associated organizations"
+msgstr "Nenhuma organização associada"
+
+#, python-format
+msgid ""
+"\n"
+" See all courses related to "
+"%(person_title)s\n"
+" "
+msgstr ""
+"\n"
+" Ver todos os cursos "
+"relacionados com %(person_title)s\n"
+" "
+
+msgid "Blogposts"
+msgstr "Publicações"
+
+msgid "Blogposts pagination"
+msgstr "Paginação de posts de blog"
+
+msgid "No persons"
+msgstr "Sem pessoas"
+
+#, python-format
+msgid "%(program_title)s - Program"
+msgstr "%(program_title)s - Programa"
+
+msgid "program cover image"
+msgstr "imagem de capa do programa"
+
+msgid "No associated programs"
+msgstr "Sem programas associados"
+
+#, python-brace-format
+msgid "Run {i:d}"
+msgstr "Executar {i:d}"
+
+msgid "Regenerate search index..."
+msgstr "Regenerar índice de pesquisa..."
+
+msgid "New courses"
+msgstr "Novos cursos"
+
+msgid "First session"
+msgstr "Primeira sessão"
+
+msgid "Availability"
+msgstr "Disponibilidade"
+
+msgid "Languages"
+msgstr "Idiomas"
+
+msgid "Subjects"
+msgstr "Temas"
+
+msgid "Levels"
+msgstr "Níveis"
+
+msgid "Persons"
+msgstr "Pessoas"
+
+msgid "Licences"
+msgstr "Licenças"
+
+msgid "Weekly pace"
+msgstr "Ritmo semanal"
+
+msgid "Self-paced"
+msgstr "Ao ritmo do estudante"
+
+msgid "Less than one hour"
+msgstr "Menos de uma hora"
+
+msgid "One to two hours"
+msgstr "Uma a duas horas"
+
+msgid "More than two hours"
+msgstr "Mais de duas horas"
+
+msgid "Open for enrollment"
+msgstr "Inscrições abertas"
+
+msgid "Coming soon"
+msgstr "Brevemente"
+
+msgid "On-going"
+msgstr "A decorrer"
+
+msgid "Archived"
+msgstr "Arquivado"
+
+msgid "Sort by configuration"
+msgstr "Ordenar por configuração"
+
+msgid "Sort by facet count"
+msgstr "Ordenar por quantidade de facetas"
+
+msgid "Sort alphabetically"
+msgstr "Ordenar alfabeticamente"
+
+msgid "You are not allowed to manage the search index."
+msgstr "Não tem permissões para gerir o índice de pesquisa."
+
+msgid "The search index was successfully bootstrapped"
+msgstr "O índice de pesquisa foi iniciado com sucesso"
+
+msgid "Glimpse"
+msgstr "Perspectiva"
+
+msgid "Link settings"
+msgstr "Configurações de hiperligação"
+
+msgid "Square card"
+msgstr "Cartão quadrado"
+
+msgid "Quote"
+msgstr "Citação"
+
+msgid "Half row"
+msgstr "Meia linha"
+
+msgid "Full row"
+msgstr "Linha completa"
+
+msgid "Variant"
+msgstr "Variante"
+
+msgid "Form factor variant"
+msgstr "Variante do formulário"
+
+msgid "image"
+msgstr "imagem"
+
+msgid "Content"
+msgstr "Conteúdo"
+
+msgid "External URL"
+msgstr "URL Externo"
+
+msgid "Make the glimpse as a link with an external URL."
+msgstr "Tornar a perspectiva como um link para um URL externo."
+
+msgid "Internal URL"
+msgstr "URL Interno"
+
+msgid "Make the glimpse as a link with an internal (page) URL."
+msgstr "Tornar a perspectiva como um link para um URL interno (página)."
+
+msgid "HTML Sitemap"
+msgstr "Mapa do Site HTML"
+
+msgid ""
+"Press save to create a site map. You will then be able to add a child "
+"plugin for each subtree in your sitemap."
+msgstr ""
+"Carregue em gravar para criar um mapa do site. Será depois possível "
+"adicionar um plugin filho para cada ramo do mapa do site."
+
+msgid "HTML sitemap page"
+msgstr "Página do mapa do site HTML"
+
+msgid "root page"
+msgstr "página inicial"
+
+msgid ""
+"This page will be at the root of your sitemap (or its children if the "
+"\"include root page\" flag is unticked)."
+msgstr ""
+"Esta página estará na raiz do seu mapa do site (ou filhos, se a opção "
+"\"incluir página principal\" não estiver marcada)."
+
+msgid "max depth"
+msgstr "profundidade máxima"
+
+msgid ""
+"Limit the level of nesting that your sitemap will contain below this "
+"page. An empty field or 0 equals to no limit."
+msgstr ""
+"Limitar o nível de profundidade que o mapa do site terá abaixo desta "
+"página. Um campo vazio ou 0 é igual a nenhum limite."
+
+msgid "in navigation"
+msgstr "na navegação"
+
+msgid ""
+"Tick to exclude from sitemap the pages that are excluded from navigation."
+msgstr ""
+"Marque para excluir do mapa do site as páginas que estão excluídas da "
+"navegação."
+
+msgid "include root page"
+msgstr "incluir página principal"
+
+msgid ""
+"Tick to include the root page and its descendants. Untick to include only "
+"its descendants."
+msgstr ""
+"Marque para incluir a página principal e seus descendentes. Desmarque "
+"para incluir apenas seus descendentes."
+
+msgid "HTML Sitemaps"
+msgstr "Mapa do Site HTML"
+
+msgid "Sitemap"
+msgstr "Mapa do site"
+
+msgid "Large Banner"
+msgstr "Banner Grande"
+
+msgid "Medias"
+msgstr "Multimédia"
+
+msgid "Hero introduction"
+msgstr "Introdução do Hero"
+
+msgid "Compacted introduction"
+msgstr "Introdução compactada"
+
+msgid "background image"
+msgstr "imagem de fundo"
+
+msgid "Template"
+msgstr "Modelo"
+
+msgid "Choose template to render plugin."
+msgstr "Escolha o modelo para renderizar o plugin."
+
+msgid "Explore our catalog"
+msgstr "Explore o nosso catálogo"
+
+msgid "Search in our courses"
+msgstr "Pesquisar nos cursos"
+
+msgid "Advanced settings"
+msgstr "Definições avançadas"
+
+msgid "LTI consumer"
+msgstr "Cliente LTI"
+
+msgid "Custom provider configuration"
+msgstr "Configuração de fornecedor personalizado"
+
+msgid "shared secret"
+msgstr "segredo partilhado"
+
+msgid ""
+"The url is not valid for this provider. It should be of the form \"{:s}\"."
+msgstr ""
+"A url não é válida para este fornecedor. Deve ser no formato \"{:s}\"."
+
+msgid ""
+"The url is not valid for this provider. It should start with \"{:s}\"."
+msgstr "A url não é válida para este fornecedor. Deve começar com \"{:s}\"."
+
+msgid "Please choose a predefined provider, or fill fields below"
+msgstr ""
+"Por favor, escolha um fornecedor predefinido, ou preencha os campos abaixo"
+
+msgid "Please choose a predefined provider above, or fill this field"
+msgstr ""
+"Por favor, escolha um fornecedor predefinido acima, ou preencha este campo"
+
+msgid "Please fill this field"
+msgstr "Preencha este campo"
+
+msgid "LTI url"
+msgstr "LTI url"
+
+msgid ""
+"For a predefined provider, leave this field empty for uploading new "
+"content."
+msgstr ""
+"Para um fornecedor predefinido, deixe este campo vazio para carregar um "
+"novo conteúdo."
+
+msgid "Predefined LTI provider"
+msgstr "Fornecedor de LTI predefinido"
+
+msgid "Please choose a predefined provider or fill fields below."
+msgstr ""
+"Por favor, escolha um fornecedor predefinido ou preencha os campos abaixo."
+
+msgid "Yes"
+msgstr "Sim"
+
+msgid "No"
+msgstr "Não"
+
+msgid "Nested item"
+msgstr "Item agrupado"
+
+msgid "List"
+msgstr "Lista"
+
+msgid "Plain text"
+msgstr "Texto simples"
+
+msgid "plain text"
+msgstr "texto simples"
+
+msgid "Section"
+msgstr "Secção"
+
+msgid "Primary scheme"
+msgstr "Esquema principal"
+
+msgid "Secondary scheme"
+msgstr "Esquema secundário"
+
+msgid "Tertiary scheme"
+msgstr "Esquema terciário"
+
+msgid "Quaternary scheme"
+msgstr "Esquema quaternário"
+
+msgid "Quinary scheme"
+msgstr "Esquema quinário"
+
+msgid "Senary scheme"
+msgstr "Esquema senário"
+
+msgid "Septenary scheme"
+msgstr "Esquema setenário"
+
+msgid "Item tiles"
+msgstr "Blocos do item"
+
+msgid "None"
+msgstr "Nenhum"
+
+msgid "Optional template for custom look."
+msgstr "Modelo opcional para aparência personalizada."
+
+msgid "Attributes"
+msgstr "Atributos"
+
+msgid "Grid"
+msgstr "Grelha"
+
+msgid ""
+"Define a Grid to use for contents, when no Grid is enable each content "
+"can define its own width."
+msgstr ""
+"Definir uma grelha a utilizar para os conteúdos, quando não é ativada uma "
+"grelha cada conteúdo pode definir a sua própria largura."
+
+msgid "Grid gutter"
+msgstr "Calha da grelha"
+
+msgid "Enable a gutter between content items when Grid is enabled."
+msgstr ""
+"Ativar uma calha entre itens de conteúdo quando a Grelha está ativada."
+
+msgid "Image"
+msgstr "Imagem"
+
+msgid "Simple text"
+msgstr "Texto simples"
+
+msgid "Transparent box"
+msgstr "Caixa transparente"
+
+msgid "Fulfilled box"
+msgstr "Caixa preenchida"
+
+msgid "Stroked box"
+msgstr "Caixa de destacada"
+
+msgid "body"
+msgstr "corpo"
+
+msgid "Box variant"
+msgstr "Variante de caixa"
+
+msgid "Enable a themed box to enclose content."
+msgstr "Ativar uma caixa temática para incluir conteúdo."
+
+#, python-format
+msgid ""
+"Ensure this text has at most %(limit_value)d character (it has "
+"%(show_value)d)."
+msgid_plural ""
+"Ensure this text has at most %(limit_value)d characters (it has "
+"%(show_value)d)."
+msgstr[0] ""
+"Certifique-se de que o texto tem no máximo %(limit_value)d caracter (está "
+"com %(show_value)d)."
+msgstr[1] ""
+"Certifique-se de que o texto tem no máximo %(limit_value)d caracteres "
+"(está com %(show_value)d)."
diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/ru_RU/LC_MESSAGES/django.po b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/ru_RU/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..bae2023e65
--- /dev/null
+++ b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/ru_RU/LC_MESSAGES/django.po
@@ -0,0 +1,1495 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: richie\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-31 17:41+0100\n"
+"PO-Revision-Date: 2024-11-20 14:09\n"
+"Last-Translator: \n"
+"Language-Team: Russian\n"
+"Language: ru_RU\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 "
+"&& n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 "
+"&& n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
+"X-Crowdin-Project: richie\n"
+"X-Crowdin-Project-ID: 308578\n"
+"X-Crowdin-Language: ru\n"
+"X-Crowdin-File: backend.pot\n"
+"X-Crowdin-File-ID: 32\n"
+
+#: newsite/settings.py:250 newsite/settings.py:260
+#, fuzzy
+#| msgid "dashboard"
+msgid "Dashboard"
+msgstr "панель управления"
+
+#: newsite/settings.py:251
+msgid "{base_url:s}/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:261
+#, fuzzy
+#| msgid "dashboard"
+msgid "/dashboard/"
+msgstr "панель управления"
+
+#: newsite/settings.py:264
+#, fuzzy
+#| msgid "dashboard"
+msgid "Teacher dashboard"
+msgstr "панель управления"
+
+#: newsite/settings.py:265
+#, fuzzy
+#| msgid "dashboard"
+msgid "/dashboard/teacher"
+msgstr "панель управления"
+
+#: newsite/settings.py:287
+msgid "Profile"
+msgstr ""
+
+#: newsite/settings.py:288
+msgid "{base_url:s}/u/(username)"
+msgstr ""
+
+#: newsite/settings.py:291
+#, fuzzy
+#| msgid "Accordion"
+msgid "Account"
+msgstr "Аккордеон"
+
+#: newsite/settings.py:292
+msgid "{base_url:s}/account/settings"
+msgstr ""
+
+#: newsite/settings.py:385
+msgid "Teaser"
+msgstr "Тизер"
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "English"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "French"
+msgstr ""
+
+msgid "Richie Plugins"
+msgstr "Плагины Richie"
+
+msgid "Define a duration as a number of time units"
+msgstr "Определить длительность как количество единиц времени"
+
+#, python-format
+msgid "%(value)s is not a valid choice for a time unit."
+msgstr "%(value)s - недопустимый выбор единицы времени."
+
+msgid "A composite duration should be a pair: number and time unit."
+msgstr "Составная длительность должна быть парой: число и единица времени."
+
+msgid "A composite duration should be a round number of time units."
+msgstr ""
+"Составная продолжительность должна представлять собой круглое число "
+"единиц времени."
+
+msgid "A composite duration should be positive."
+msgstr "Составная продолжительность должна быть положительной."
+
+msgid "Define an effort"
+msgstr "Определить усилия"
+
+msgid "An effort should be a triplet: number, time unit and reference unit."
+msgstr ""
+"Усилие должно быть триплетом: число, единица времени и единица отсчета."
+
+msgid "An effort should be a round number of time units."
+msgstr "Усилие должно представлять собой круглое число единиц времени."
+
+msgid "An effort should be positive."
+msgstr "Усилие должно быть положительным."
+
+msgid "The effort time unit should be shorter than the reference unit."
+msgstr "Единица времени усилия должна быть короче, чем единица отсчета."
+
+msgid "{:s} and {:s}"
+msgstr "{:s} и {:s}"
+
+msgid " and "
+msgstr " и "
+
+#, python-format
+msgid "You can only select up to %(limit_value)d choices."
+msgstr "Вы можете выбрать только %(limit_value)d вариантов."
+
+#, python-format
+msgid "Multi select field (up to %(max_choices)s choices)"
+msgstr "Поле множественного выбора (до %(max_choices)s вариантов)"
+
+#, python-format
+msgid "Value %(value)s is not a valid choice."
+msgid_plural "Values %(value)s are not valid choices."
+msgstr[0] "Значение %(value)s не является допустимым вариантом."
+msgstr[1] "Значения %(value)s не являются допустимыми вариантами."
+msgstr[2] "Значения %(value)s не являются допустимыми вариантами."
+msgstr[3] "Значения %(value)s не являются допустимыми вариантами."
+
+msgid ""
+"Storing {:d} choices could require storing a CharField of up to {:d} "
+"characters. Please reduce 'max_choices' or increase 'max_length'."
+msgstr ""
+"Хранение {:d} вариантов может потребовать хранения CharField размером до "
+"{:d} символов. Уменьшите значение 'max_choices' или увеличьте значение "
+"'max_length'."
+
+msgid "Video"
+msgstr "Видео"
+
+msgid "Your browser doesn't support this video format."
+msgstr "Ваш браузер не поддерживает этот формат видео."
+
+msgid "You are here:"
+msgstr "Вы находитесь здесь:"
+
+msgid "Skip to main content"
+msgstr "Перейти к основному содержимому"
+
+msgid "Go to homepage"
+msgstr "Вернуться на главную страницу"
+
+msgid "Menu"
+msgstr "Меню"
+
+msgid "Contact us"
+msgstr "Свяжитесь с нами"
+
+msgid "Life-changing learning!"
+msgstr "Обучение, меняющее жизнь!"
+
+msgid "Learn more"
+msgstr "Узнать больше"
+
+msgid "Powered by"
+msgstr "Работает на"
+
+msgid "This page has no child objects"
+msgstr "У этой страницы нет дочерних объектов"
+
+msgid "Back to home"
+msgstr "Вернуться на главную"
+
+msgid "Pagination"
+msgstr "Постраничная навигация"
+
+#, python-format
+msgid "Currently reading last page %(page)s"
+msgstr "В настоящее время чтение последней страницы %(page)s"
+
+#, python-format
+msgid "Currently reading page %(page)s"
+msgstr "Сейчас чтение страницы %(page)s"
+
+#, python-format
+msgid "Page %(page)s"
+msgstr "Страница %(page)s"
+
+#, python-format
+msgid "Previous page %(page)s"
+msgstr "Предыдущая страница %(page)s"
+
+#, python-format
+msgid "Last page %(page)s"
+msgstr "Последняя страница %(page)s"
+
+#, python-format
+msgid "Next page %(page)s"
+msgstr "Следующая страница %(page)s"
+
+#, python-format
+msgid "Richie news: %(title)s"
+msgstr "Новости Richie: %(title)s"
+
+#, python-format
+msgid "Richie news: %(title)s %(url)s"
+msgstr "Новости Richie: %(title)s %(url)s"
+
+msgid "Share on Facebook"
+msgstr "Поделитесь на Facebook"
+
+msgid "Share on Twitter"
+msgstr "Поделиться через Twitter"
+
+msgid "Share on Linkedin"
+msgstr "Поделиться на LinkedIn"
+
+msgid "Share by Email"
+msgstr "Поделиться по электронной почте"
+
+msgid "Follow a course online with Richie"
+msgstr "Пройдите курс обучения онлайн вместе с Richie"
+
+#, python-format
+msgid "I just enrolled to the course \"%(title)s\" on Richie: %(url)s"
+msgstr "Я записался на курс \"%(title)s\" на Richie\": %(url)s"
+
+msgid "Facebook"
+msgstr "Facebook"
+
+msgid "Twitter page"
+msgstr "Страничка Twitter"
+
+msgid "Linkedin page"
+msgstr "Linkedin"
+
+msgid "Bad request"
+msgstr "Неверный запрос"
+
+msgid ""
+"Your query seems to be malformed. Please check your data and try again."
+msgstr ""
+"Похоже, ваш запрос имеет неправильный формат. Пожалуйста, проверьте ваши "
+"данные и повторите попытку."
+
+msgid "Forbidden"
+msgstr "Доступ запрещен"
+
+msgid "You do not have the required permissions to access this resource."
+msgstr "У вас нет требуемых прав для доступа к этому ресурсу."
+
+msgid "Page not found"
+msgstr "Страница не найдена"
+
+msgid "The requested resource does not exist."
+msgstr "Запрошенный ресурс не существует."
+
+msgid "Server bad request"
+msgstr "Неверный запрос сервера"
+
+msgid "Something went wrong. Please try again later."
+msgstr "Что-то пошло не так. Пожалуйста, попробуйте позже."
+
+msgid "Course could not be found."
+msgstr "Курс не может быть найден."
+
+msgid "See user group"
+msgstr "Посмотреть группу пользователей"
+
+msgid "See filer folder"
+msgstr "Смотреть папку filer"
+
+msgid "Organization"
+msgstr "Организация"
+
+msgid "Organization by Category"
+msgstr "Организация по категориям"
+
+msgid "Category"
+msgstr "Категория"
+
+msgid "Course"
+msgstr "Курс"
+
+msgid "Person"
+msgstr "Человек"
+
+msgid "Licence"
+msgstr "Лицензия"
+
+msgid "Post"
+msgstr "Пост"
+
+msgid "Program"
+msgstr "Программа"
+
+msgid "{!s} settings"
+msgstr "Настройки {!s}"
+
+msgid "Snapshot this page..."
+msgstr "Снимок этой страницы..."
+
+msgid ""
+"This will place a copy of this page as its child and move all its "
+"courseruns as children of its new copy."
+msgstr ""
+"Это поместит копию этой страницы в качестве ее дочерней и переместит все "
+"её этапы курса в качестве дочерних для ее новой копии."
+
+msgid "New page"
+msgstr "Новая страница"
+
+msgid "Create a new page next to the current page."
+msgstr "Создать новую страницу рядом с текущей страницей."
+
+msgid "New sub page"
+msgstr "Новая подстраница"
+
+msgid "Create a page below the current page."
+msgstr "Создайте страницу под текущей страницей."
+
+msgid "Page title"
+msgstr "Заголовок страницы"
+
+msgid "Title of the page in current language"
+msgstr "Заголовок страницы на текущем языке"
+
+msgid "Page slug"
+msgstr "Slug страницы"
+
+msgid "Slug of the page in current language"
+msgstr "Slug страницы на текущем языке"
+
+msgid ""
+"This slug is too long. The length of the path built by prepending the "
+"slug of the parent page would be {:d} characters long and it should be "
+"less than 255"
+msgstr ""
+"Этот slug слишком длинный. Длина пути, созданного в ожидании slug "
+"родительской страницы, будет равна {:d} символам, и она должна быть "
+"меньше 255"
+
+msgid "This slug is already in use"
+msgstr "Этот slug уже используется"
+
+msgid ""
+"You must first create a parent page and set its `reverse_id` to `{:s}`."
+msgstr ""
+"Сначала вы должны создать родительскую страницу и установить `reverse_id` "
+"в `{:s}`."
+
+msgid "Code"
+msgstr "Код"
+
+msgid "Unique reference for the course."
+msgstr "Уникальная ссылка на курс."
+
+msgid "New course page"
+msgstr "Новая страница курса"
+
+msgid "Create a new course page"
+msgstr "Создать новую страницу курса"
+
+msgid "Unique reference for the organization."
+msgstr "Уникальная ссылка для организации."
+
+msgid "New organization page"
+msgstr "Новая страница организации"
+
+msgid "Create a new organization page"
+msgstr "Создать новую страницу организации"
+
+msgid "New category page"
+msgstr "Новая страница категории"
+
+msgid "Create a new category page"
+msgstr "Создать новую страницу категории"
+
+msgid "New blog post"
+msgstr "Новая запись блога"
+
+msgid "Create a new blog post"
+msgstr "Создать новую запись блога"
+
+msgid "New person page"
+msgstr "Новая страница человека"
+
+msgid "Create a new person page"
+msgstr "Создать новую страницу человека"
+
+msgid "New program"
+msgstr "Новая программа"
+
+msgid "Create a new program"
+msgstr "Создать новую программу"
+
+msgid "Admin"
+msgstr "Администратор"
+
+msgid "Inherit"
+msgstr "Наследовать"
+
+msgid "Default"
+msgstr "По-умолчанию"
+
+msgid "Mini"
+msgstr "Мини"
+
+msgid "Favorite"
+msgstr "Избранное"
+
+msgid "Badge"
+msgstr "Значок"
+
+msgid "Tag"
+msgstr "Тег"
+
+msgid "Small"
+msgstr "Маленький"
+
+msgid "Large"
+msgstr "Большой"
+
+msgid "Card"
+msgstr "Карточка"
+
+msgid "Row"
+msgstr "Строка"
+
+msgid "minute"
+msgstr "минута"
+
+msgid "minutes"
+msgstr "минут"
+
+msgid "hour"
+msgstr "час"
+
+msgid "hours"
+msgstr "часов"
+
+msgid "day"
+msgstr "день"
+
+msgid "days"
+msgstr "дней"
+
+msgid "week"
+msgstr "неделя"
+
+msgid "weeks"
+msgstr "недель"
+
+msgid "month"
+msgstr "месяц"
+
+msgid "months"
+msgstr "месяцев"
+
+msgid "Run {:d}"
+msgstr "Запустить {:d}"
+
+msgid "You can't snapshot a snapshot."
+msgstr "Вы не можете сделать снимок снимка."
+
+msgid "You don't have sufficient permissions to snapshot this page."
+msgstr "У вас недостаточно прав для снимка этой страницы."
+
+msgid "Archived on {now:%Y-%m-%d %H:%M:%S}"
+msgstr "Архивировано {now:%Y-%m-%d %H:%M:%S}"
+
+msgid "{title:s} ({version!s})"
+msgstr "{title:s} ({version!s})"
+
+msgid "blog post"
+msgstr "запись в блоге"
+
+msgid "blog posts"
+msgstr "записи в блоге"
+
+msgid "variant"
+msgstr "вариант"
+
+msgid "Optional glimpse variant for a custom look."
+msgstr ""
+"Дополнительный вариант с проблеском для придания индивидуального вида."
+
+msgid "blog post plugin"
+msgstr "плагин для записи в блоге"
+
+msgid "blog post plugins"
+msgstr "плагины для записи в блоге"
+
+msgid "category"
+msgstr "категория"
+
+msgid "categories"
+msgstr "категории"
+
+msgid "category plugin"
+msgstr "плагин категории"
+
+msgid "category plugins"
+msgstr "плагины категории"
+
+msgid "enroll now"
+msgstr "записаться сейчас"
+
+msgid "study now"
+msgstr "начать обучение"
+
+msgid "starting on"
+msgstr "начиная с"
+
+msgid "closing on"
+msgstr "закрытие с"
+
+msgid "enrollment closed"
+msgstr "зачисление закрыто"
+
+msgid "on-going"
+msgstr "в настоящее время"
+
+msgid "archived"
+msgstr "архивировано"
+
+msgid "to be scheduled"
+msgstr "будет запланировано"
+
+msgid "forever open"
+msgstr "всегда открыты"
+
+msgid "code"
+msgstr "код"
+
+msgid "The course time range."
+msgstr "Интервал времени курса."
+
+msgid "Total amount of time to complete this course."
+msgstr "Общее количество времени для завершения этого курса."
+
+msgid "is listed"
+msgstr "в списке"
+
+msgid "Tick if you want the course to be visible on the search page."
+msgstr "Отметьте, если хотите, чтобы курс был виден на странице поиска."
+
+msgid "is self paced"
+msgstr "самостоятельный"
+
+msgid "Tick if the course pace is self paced."
+msgstr "Отметьте, если темп прохождения курса - самостоятельный."
+
+msgid "course"
+msgstr "курс"
+
+msgid "courses"
+msgstr "курсы"
+
+msgid "Self paced"
+msgstr "Самостоятельный"
+
+msgid "~{pace:d} {effort_unit!s}/{duration_unit!s}"
+msgstr "~{pace:d} {effort_unit!s}/{duration_unit!s}"
+
+msgid "~{pace_hours:d}h{pace_minutes:d}/{duration_unit!s}"
+msgstr "~{pace_hours:d}ч{pace_minutes:d}/{duration_unit!s}"
+
+msgid "Manual"
+msgstr "Руководство"
+
+msgid "Synchronization to draft page"
+msgstr "Синхронизация с черновиком страницы"
+
+msgid "Synchronization to public page"
+msgstr "Синхронизация с публичной страницей"
+
+msgid ""
+"course_and_search - show on the course page and include in search results"
+msgstr ""
+"course_and_search - показать на странице курса и включить в результаты "
+"поиска"
+
+msgid "course_only - show on the course page and hide from search results"
+msgstr ""
+"course_only - показывать на странице курса и скрыть от результатов поиска"
+
+msgid "hidden - hide on the course page and from search results"
+msgstr "hidden - скрыть на странице курса и из результатов поиска"
+
+msgid "Synchronization mode"
+msgstr "Режим синхронизации"
+
+msgid "resource link"
+msgstr "ссылка на ресурс"
+
+msgid "course start"
+msgstr "начало курса"
+
+msgid "course end"
+msgstr "конец курса"
+
+msgid "enrollment start"
+msgstr "начало зачисления"
+
+msgid "enrollment end"
+msgstr "окончание зачисления"
+
+msgid "The list of languages in which the course content is available."
+msgstr "Список языков, на которых доступно содержимое курса."
+
+msgid "enrollment count"
+msgstr "количество зачислений"
+
+msgid "The number of enrolled students"
+msgstr "Количество зачисленных студентов"
+
+msgid "catalog visibility"
+msgstr "видимость каталога"
+
+msgid "course run"
+msgstr "запуск курса"
+
+msgid "course runs"
+msgstr "этапы курса"
+
+msgid "title"
+msgstr "заголовок"
+
+msgid "Course run translation"
+msgstr "Перевод запуска курса"
+
+msgid "Course run translations"
+msgstr "Переводы запуска курса"
+
+msgid "Empty title"
+msgstr "Пустой заголовок"
+
+msgid "course plugin"
+msgstr "плагин курса"
+
+msgid "course plugins"
+msgstr "плагины курса"
+
+msgid "logo"
+msgstr "лого"
+
+msgid "url"
+msgstr "url"
+
+msgid "name"
+msgstr "имя"
+
+msgid "content"
+msgstr "контент"
+
+msgid "licence"
+msgstr "лицензия"
+
+msgid "licences"
+msgstr "лицензии"
+
+msgid "Licence translation"
+msgstr "Перевод лицензии"
+
+msgid "licence translations"
+msgstr "переводы лицензий"
+
+msgid "description"
+msgstr "описание"
+
+msgid "licence plugin"
+msgstr "плагин лицензии"
+
+msgid "licence plugins"
+msgstr "плагины лицензии"
+
+msgid "organization"
+msgstr "организация"
+
+msgid "organizations"
+msgstr "организации"
+
+msgid "organization plugin"
+msgstr "плагин организации"
+
+msgid "organization plugins"
+msgstr "плагины организации"
+
+msgid "organizations by category plugin"
+msgstr "организации по плагину категории"
+
+msgid "organizations by category plugins"
+msgstr "организации по плагинам категории"
+
+msgid "person"
+msgstr "человек"
+
+msgid "persons"
+msgstr "люди"
+
+msgid "Custom bio"
+msgstr "Пользовательская биография"
+
+msgid ""
+"Optional: provide a custom bio (if you leave it empty, it will display "
+"the person's bio)."
+msgstr ""
+"Необязательно: укажите пользовательскую биографию (если оставить ее "
+"пустым, она отобразит биографию человека)."
+
+msgid "person plugin"
+msgstr "плагин человека"
+
+msgid "person plugins"
+msgstr "плагины человека"
+
+msgid "program"
+msgstr "программа"
+
+msgid "programs"
+msgstr "программы"
+
+msgid "program plugin"
+msgstr "плагин программы"
+
+msgid "program plugins"
+msgstr "плагины программы"
+
+msgid "role"
+msgstr "роль"
+
+msgid ""
+"A role describes all the permissions that should be granted to the user "
+"group."
+msgstr ""
+"Роль описывает все разрешения, которые должны быть предоставлены группе "
+"пользователей."
+
+msgid "page"
+msgstr "страница"
+
+msgid "Page to which this role grants permissions."
+msgstr "Страница, к которой эта роль предоставляет разрешения."
+
+msgid "group"
+msgstr "группа"
+
+msgid "User group that this role controls."
+msgstr "Группа пользователей, которой управляет эта роль."
+
+msgid "filer folder"
+msgstr "filer папка"
+
+msgid "Filer folder that this role controls."
+msgstr "Filer папка, которой управляет эта роль."
+
+msgid "page role"
+msgstr "роль страницы"
+
+msgid "page roles"
+msgstr "роли страницы"
+
+msgid "{:s} | {:s}"
+msgstr "{:s} | {:s}"
+
+msgid "Course page"
+msgstr "Страница курса"
+
+msgid "Organization list"
+msgstr "Список организаций"
+
+msgid "Organization page"
+msgstr "Страница организации"
+
+msgid "Category list"
+msgstr "Список категорий"
+
+msgid "Category page"
+msgstr "Страница категории"
+
+msgid "Blog post list"
+msgstr "Список записей блога"
+
+msgid "Blog post page"
+msgstr "Страница записи блога"
+
+msgid "Person page"
+msgstr "Страница человека"
+
+msgid "Person list"
+msgstr "Список людей"
+
+msgid "Program page"
+msgstr "Страница программы"
+
+msgid "Program list"
+msgstr "Список программ"
+
+msgid "Search"
+msgstr "Поиск"
+
+msgid "List of child pages"
+msgstr "Список дочерних страниц"
+
+msgid "Homepage"
+msgstr "Домашняя страница"
+
+msgid "Single column"
+msgstr "Одна колонка"
+
+msgid "Three columns: (33% | 33% | 33%)"
+msgstr "Три колонки: (33% | 33% | 33%)"
+
+msgid "Two columns: (50% | 50%)"
+msgstr "Две колонки: (50% | 50%)"
+
+msgid "Two columns: (25% | 75%)"
+msgstr "Две колонки: (25% | 75%)"
+
+msgid "Two columns: (75% | 25%)"
+msgstr "Две колонки: (75% | 25%)"
+
+msgid "Footer"
+msgstr "Подвал"
+
+msgid "Static headline"
+msgstr "Статический заголовок"
+
+msgid "Main content"
+msgstr "Основной контент"
+
+msgid "Secondary content"
+msgstr "Дополнительное содержимое"
+
+msgid "Third content"
+msgstr "Третье содержимое"
+
+msgid "Cover"
+msgstr "Обложка"
+
+msgid "Catch phrase"
+msgstr "Меткая фраза"
+
+msgid "About the course"
+msgstr "О курсе"
+
+msgid "What you will learn"
+msgstr "Чему вы научитесь"
+
+msgid "Format"
+msgstr "Формат"
+
+msgid "Prerequisites"
+msgstr "Предварительные условия"
+
+msgid "Team"
+msgstr "Команда"
+
+msgid "Plan"
+msgstr "План"
+
+msgid "Complementary information"
+msgstr "Дополнительная информация"
+
+msgid "License for the course content"
+msgstr "Лицензия на содержимое курса"
+
+msgid "License for the content created by course participants"
+msgstr "Лицензия на контент, созданный участниками курса"
+
+msgid "Categories"
+msgstr "Категории"
+
+msgid "Icon"
+msgstr "Иконка"
+
+msgid "Organizations"
+msgstr "Организации"
+
+msgid "Assessment and Certification"
+msgstr "Оценка и сертификация"
+
+msgid "Banner"
+msgstr "Баннер"
+
+msgid "Logo"
+msgstr "Лого"
+
+msgid "Description"
+msgstr "Описание"
+
+msgid "Excerpt"
+msgstr "Выдержка"
+
+msgid "Portrait"
+msgstr "Портрет"
+
+msgid "Bio"
+msgstr "О себе"
+
+msgid "Main Content"
+msgstr "Основной Контент"
+
+msgid "Author"
+msgstr "Автор"
+
+msgid "Body"
+msgstr "Тело"
+
+msgid "Headline"
+msgstr "Заголовок"
+
+msgid "Courses"
+msgstr "Курсы"
+
+msgid "Button caesura"
+msgstr "Кнопка цезура"
+
+msgid "Full width"
+msgstr "Во всю ширину"
+
+msgid "No categories yet."
+msgstr "Еще нет категорий."
+
+msgid "Not published yet"
+msgstr "Ещё не опубликовано"
+
+msgid "No author yet"
+msgstr "Пока нет автора"
+
+msgid "No excerpt content"
+msgstr "Контент без выдержки"
+
+msgid "No body content"
+msgstr "Контент без тела"
+
+msgid "Related posts"
+msgstr "Похожие записи"
+
+msgid "Other categories of articles"
+msgstr "Другие категории статей"
+
+msgid "No associated blogposts"
+msgstr "Нет связанных блогов"
+
+#, python-format
+msgid "%(category_title)s - Category"
+msgstr "%(category_title)s - Категория"
+
+msgid "Sub categories"
+msgstr "Подкатегории"
+
+msgid "Related courses"
+msgstr "Связанные курсы"
+
+msgid "Courses pagination"
+msgstr "Пагинация курсов"
+
+msgid "See all courses"
+msgstr "Посмотреть все курсы"
+
+msgid "Related organizations"
+msgstr "Связанные организации"
+
+msgid "Related organizations pagination"
+msgstr "Пагинация связанных курсов"
+
+msgid "Related blogposts"
+msgstr "Похожие блоги"
+
+msgid "Related blogposts pagination"
+msgstr "Пагинация связанных блогов"
+
+msgid "Related persons"
+msgstr "Связанные люди"
+
+msgid "Related persons pagination"
+msgstr "Пагинация связанных персон"
+
+msgid "No categories"
+msgstr "Нет категорий"
+
+#, python-format
+msgid "%(course_title)s - Course"
+msgstr "%(course_title)s - Курс"
+
+msgid "Ref. "
+msgstr "Ссылка. "
+
+msgid "No associated categories"
+msgstr "Нет связанных категорий"
+
+msgid "Duration:"
+msgstr "Длительность:"
+
+msgid "Effort:"
+msgstr "Усилие:"
+
+msgid "Pace:"
+msgstr "Темп:"
+
+msgid ""
+"Add a teaser video or add a cover image below and it will be used as "
+"teaser image as well."
+msgstr ""
+"Добавьте видео тизер или добавьте обложку ниже и оно также будет "
+"использоваться в качестве тизерного изображения."
+
+msgid "course cover image"
+msgstr "обложка курса"
+
+#, python-format
+msgid ""
+"\n"
+" Archived on %(creation_date)s\n"
+" "
+msgstr ""
+"\n"
+" Архивировано %(creation_date)s\n"
+" "
+
+msgid "Go to current version"
+msgstr "Перейти к текущей версии"
+
+msgid "Glimpse cover"
+msgstr "Glimpse обложка"
+
+msgid "Add an image for course cover on its glimpse."
+msgstr "Добавить изображение для обложки курса на его glimpse."
+
+msgctxt "course_detail__title"
+msgid "What you will learn"
+msgstr "Чему вы научитесь"
+
+msgid "At the end of this course, you will be able to:"
+msgstr "По окончании этого курса вы сможете:"
+
+msgctxt "course_detail__title"
+msgid "Description"
+msgstr "Описание"
+
+msgctxt "course_detail__title"
+msgid "Format"
+msgstr "Формат"
+
+msgid "How is the course structured?"
+msgstr "Как структурирован курс?"
+
+msgctxt "course_detail__title"
+msgid "Prerequisites"
+msgstr "Предварительные условия"
+
+msgid "What are the prerequisites to follow this course?"
+msgstr "Каковы предварительные условия для прохождения этого курса?"
+
+msgctxt "course_detail__title"
+msgid "Assessment and certification"
+msgstr "Оценка и сертификация"
+
+msgid "How is progress evaluated and/or certified?"
+msgstr "Как оценивается и/или сертифицируется прогресс?"
+
+msgctxt "course_detail__title"
+msgid "Course plan"
+msgstr "План курса"
+
+msgid "Enter here the detailed course plan."
+msgstr "Введите подробный план курса."
+
+msgctxt "course_detail__title"
+msgid "Course team"
+msgstr "Команда курса"
+
+msgid "Who are the teachers in the course team?"
+msgstr "Кто является преподавателями в команде курсов?"
+
+msgctxt "course_detail__title"
+msgid "Organizations"
+msgstr "Организации"
+
+msgid "What are the organizations publishing this course?"
+msgstr "Какие организации публикуют этот курс?"
+
+msgctxt "course_detail__title"
+msgid "License"
+msgstr "Лицензия"
+
+msgid "What is the license for the course content?"
+msgstr "Какова лицензия на содержимое курса?"
+
+msgid "What is the license for the content created by course participants?"
+msgstr "Какова лицензия на контент, созданный участниками курса?"
+
+msgid "Course code"
+msgstr "Код курса"
+
+msgid "Course date"
+msgstr "Дата курса"
+
+msgid "Course team"
+msgstr "Команда курса"
+
+msgid "License"
+msgstr "Лицензия"
+
+#, python-format
+msgid ""
+"\n"
+" A %(model)s object is missing on this %(model)s page. Please "
+"select another page template.\n"
+"
\n"
+" If what you need is a %(model)s page, you need to create it via "
+"the wizard and choose \"New %(model)s page\".\n"
+" "
+msgstr ""
+"\n"
+" На этой странице %(model)s отсутствует объект %(model)s. "
+"Пожалуйста, выберите другой шаблон страницы.\n"
+"
\n"
+" Если вам нужна страница %(model)s, вы должны создать его через "
+"мастер и выбрать \"Новая %(model)s страница\".\n"
+" "
+
+msgid "Main organization"
+msgstr "Основная организация"
+
+msgid "Related courses pagination"
+msgstr "Пагинация связанных курсов"
+
+msgid "No organization yet"
+msgstr "Организаций пока нет"
+
+msgid "Enter your bio here..."
+msgstr "Введите вашу биографию..."
+
+#, python-format
+msgid "%(title)s avatar"
+msgstr "Аватар %(title)s"
+
+msgid "No associated organizations"
+msgstr "Нет связанных организаций"
+
+msgid "Blogposts"
+msgstr "Записи в блогах"
+
+msgid "Blogposts pagination"
+msgstr "Пагинация блогов"
+
+msgid "No persons"
+msgstr "Нет людей"
+
+#, python-format
+msgid "%(program_title)s - Program"
+msgstr "%(program_title)s - Программа"
+
+msgid "program cover image"
+msgstr "обложка программы"
+
+msgid "No associated programs"
+msgstr "Нет связанных программ"
+
+#, python-brace-format
+msgid "Run {i:d}"
+msgstr "Запустить {i:d}"
+
+msgid "Regenerate search index..."
+msgstr "Пересоздать индекс поиска..."
+
+msgid "New courses"
+msgstr "Новые курсы"
+
+msgid "First session"
+msgstr "Первая сессия"
+
+msgid "Availability"
+msgstr "Доступность"
+
+msgid "Languages"
+msgstr "Языки"
+
+msgid "Subjects"
+msgstr "Темы"
+
+msgid "Levels"
+msgstr "Уровни"
+
+msgid "Persons"
+msgstr "Люди"
+
+msgid "Licences"
+msgstr "Лицензии"
+
+msgid "Weekly pace"
+msgstr "Недельный темп"
+
+msgid "Self-paced"
+msgstr "В своём темпе"
+
+msgid "Less than one hour"
+msgstr "Меньше одного часа"
+
+msgid "One to two hours"
+msgstr "От одного до двух часов"
+
+msgid "More than two hours"
+msgstr "Более двух часов"
+
+msgid "Open for enrollment"
+msgstr "Открыть для зачисления"
+
+msgid "Coming soon"
+msgstr "Скоро появится"
+
+msgid "On-going"
+msgstr "В настоящее Время"
+
+msgid "Archived"
+msgstr "Архивировано"
+
+msgid "Sort by configuration"
+msgstr "Сортировать по конфигурации"
+
+msgid "Sort by facet count"
+msgstr "Сортировать по количеству аспектов"
+
+msgid "Sort alphabetically"
+msgstr "Сортировать по алфавиту"
+
+msgid "You are not allowed to manage the search index."
+msgstr "Вы не можете управлять поисковым индексом."
+
+msgid "The search index was successfully bootstrapped"
+msgstr "Поисковый индекс успешно загружен"
+
+msgid "Glimpse"
+msgstr "Glimpse"
+
+msgid "Link settings"
+msgstr "Настройки ссылок"
+
+msgid "Square card"
+msgstr "Квадратная карточка"
+
+msgid "Quote"
+msgstr "Цитата"
+
+msgid "Half row"
+msgstr "Половина строки"
+
+msgid "Full row"
+msgstr "Полная строка"
+
+msgid "Variant"
+msgstr "Вариант"
+
+msgid "Form factor variant"
+msgstr "Вариант коэффициента формы"
+
+msgid "image"
+msgstr "изображение"
+
+msgid "Content"
+msgstr "Контент"
+
+msgid "External URL"
+msgstr "Внешний URL"
+
+msgid "Make the glimpse as a link with an external URL."
+msgstr "Сделать glimpse как ссылку с внешним URL."
+
+msgid "Internal URL"
+msgstr "Внутренний URL"
+
+msgid "Make the glimpse as a link with an internal (page) URL."
+msgstr "Сделать glimpse как ссылку с внутренним (страничкой) URL."
+
+msgid "HTML Sitemap"
+msgstr "HTML карта сайта"
+
+msgid ""
+"Press save to create a site map. You will then be able to add a child "
+"plugin for each subtree in your sitemap."
+msgstr ""
+"Нажмите кнопку «Сохранить», чтобы создать карту сайта. Затем вы сможете "
+"добавить дочерний плагин для каждого поддерева на карте сайта."
+
+msgid "HTML sitemap page"
+msgstr "Страница HTML карты сайта"
+
+msgid "root page"
+msgstr "корневая страница"
+
+msgid ""
+"This page will be at the root of your sitemap (or its children if the "
+"\"include root page\" flag is unticked)."
+msgstr ""
+"Эта страница будет в корне вашей карты сайта (или её дочерних частей, "
+"если флаг \"включая корневую страницу\" не отмечен)."
+
+msgid "max depth"
+msgstr "максимальная глубина"
+
+msgid ""
+"Limit the level of nesting that your sitemap will contain below this "
+"page. An empty field or 0 equals to no limit."
+msgstr ""
+"Ограничить уровень вложения, который ваша карта сайта будет содержать "
+"ниже этой страницы. Пустое поле или 0 означает без ограничений."
+
+msgid "in navigation"
+msgstr "в навигации"
+
+msgid ""
+"Tick to exclude from sitemap the pages that are excluded from navigation."
+msgstr ""
+"Отметьте, чтобы исключить из карты сайта страницы, исключенные из "
+"навигации."
+
+msgid "include root page"
+msgstr "включая корневую страницу"
+
+msgid ""
+"Tick to include the root page and its descendants. Untick to include only "
+"its descendants."
+msgstr ""
+"Отметьте, чтобы включить корневую страницу и ее потомков. Удалите отметку "
+"для включения только его потомков."
+
+msgid "HTML Sitemaps"
+msgstr "HTML карты сайта"
+
+msgid "Sitemap"
+msgstr "Карта сайта"
+
+msgid "Large Banner"
+msgstr "Большой Баннер"
+
+msgid "Medias"
+msgstr "СМИ"
+
+msgid "Hero introduction"
+msgstr "Hero введение"
+
+msgid "background image"
+msgstr "фоновое изображение"
+
+msgid "Template"
+msgstr "Шаблон"
+
+msgid "Choose template to render plugin."
+msgstr "Выберите шаблон для плагина рендеринга."
+
+msgid "Explore our catalog"
+msgstr "Ознакомьтесь с нашим каталогом"
+
+msgid "Search in our courses"
+msgstr "Поиск в наших курсах"
+
+msgid "Advanced settings"
+msgstr "Расширенные настройки"
+
+msgid "LTI consumer"
+msgstr "LTI потребитель"
+
+msgid "Custom provider configuration"
+msgstr "Пользовательская конфигурация провайдера"
+
+msgid "shared secret"
+msgstr "общий секрет"
+
+msgid ""
+"The url is not valid for this provider. It should be of the form \"{:s}\"."
+msgstr ""
+"URL не действителен для этого провайдера. Он должен быть в форме \"{:s}\"."
+
+msgid ""
+"The url is not valid for this provider. It should start with \"{:s}\"."
+msgstr ""
+"URL не действителен для этого провайдера. Он должен начинаться с \"{:s}\"."
+
+msgid "Please choose a predefined provider, or fill fields below"
+msgstr "Пожалуйста, выберите провайдера или заполните поля ниже"
+
+msgid "Please choose a predefined provider above, or fill this field"
+msgstr ""
+"Пожалуйста, выберите выбранного провайдера выше или заполните это поле"
+
+msgid "Please fill this field"
+msgstr "Пожалуйста, заполните это поле"
+
+msgid "LTI url"
+msgstr "LTI url"
+
+msgid ""
+"For a predefined provider, leave this field empty for uploading new "
+"content."
+msgstr ""
+"Для предопределенного поставщика оставьте это поле пустым для загрузки "
+"нового содержимого."
+
+msgid "Predefined LTI provider"
+msgstr "Предопределенный провайдер LTI"
+
+msgid "Please choose a predefined provider or fill fields below."
+msgstr "Пожалуйста, выберите провайдера или заполните поля ниже."
+
+msgid "Yes"
+msgstr "Да"
+
+msgid "No"
+msgstr "Нет"
+
+msgid "Nested item"
+msgstr "Вложенный элемент"
+
+msgid "List"
+msgstr "Список"
+
+msgid "Plain text"
+msgstr "Простой текст"
+
+msgid "plain text"
+msgstr "простой текст"
+
+msgid "Section"
+msgstr "Раздел"
+
+msgid "Primary scheme"
+msgstr "Основная схема"
+
+msgid "Secondary scheme"
+msgstr "Вторичная схема"
+
+msgid "Tertiary scheme"
+msgstr "Третичная схема"
+
+msgid "Quaternary scheme"
+msgstr "Четвертичная схема"
+
+msgid "Quinary scheme"
+msgstr "Пятеричная схема"
+
+msgid "Senary scheme"
+msgstr "Шестеричная схема"
+
+msgid "Septenary scheme"
+msgstr "Семеричная схема"
+
+msgid "Item tiles"
+msgstr "Плитки элементов"
+
+msgid "Optional template for custom look."
+msgstr "Дополнительный шаблон для пользовательского вида."
+
+msgid "Attributes"
+msgstr "Атрибуты"
+
+msgid "Image"
+msgstr "Изображение"
+
+msgid "Simple text"
+msgstr "Обычный текст"
+
+msgid "body"
+msgstr "тело"
+
+#, python-format
+msgid ""
+"Ensure this text has at most %(limit_value)d character (it has "
+"%(show_value)d)."
+msgid_plural ""
+"Ensure this text has at most %(limit_value)d characters (it has "
+"%(show_value)d)."
+msgstr[0] ""
+"Убедитесь, что текст содержит не более %(limit_value)d символа (сейчас "
+"%(show_value)d)."
+msgstr[1] ""
+"Убедитесь, что текст содержит не более %(limit_value)d символов (сейчас "
+"%(show_value)d)."
+msgstr[2] ""
+"Убедитесь, что текст содержит не более %(limit_value)d символов (сейчас "
+"%(show_value)d)."
+msgstr[3] ""
+"Убедитесь, что текст содержит не более %(limit_value)d символов (сейчас "
+"%(show_value)d)."
diff --git a/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/vi_VN/LC_MESSAGES/django.po b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/vi_VN/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..534a892d24
--- /dev/null
+++ b/cookiecutter/{{cookiecutter.organization}}-richie-site-factory/template/{{cookiecutter.site}}/src/backend/locale/vi_VN/LC_MESSAGES/django.po
@@ -0,0 +1,66 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: richie\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-31 17:41+0100\n"
+"PO-Revision-Date: 2024-11-20 14:09\n"
+"Last-Translator: \n"
+"Language-Team: Vietnamese\n"
+"Language: vi_VN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Crowdin-Project: richie\n"
+"X-Crowdin-Project-ID: 308578\n"
+"X-Crowdin-Language: vi\n"
+"X-Crowdin-File: backend.pot\n"
+"X-Crowdin-File-ID: 32\n"
+
+#: newsite/settings.py:250 newsite/settings.py:260
+msgid "Dashboard"
+msgstr ""
+
+#: newsite/settings.py:251
+msgid "{base_url:s}/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:261
+msgid "/dashboard/"
+msgstr ""
+
+#: newsite/settings.py:264
+msgid "Teacher dashboard"
+msgstr ""
+
+#: newsite/settings.py:265
+msgid "/dashboard/teacher"
+msgstr ""
+
+#: newsite/settings.py:287
+msgid "Profile"
+msgstr ""
+
+#: newsite/settings.py:288
+msgid "{base_url:s}/u/(username)"
+msgstr ""
+
+#: newsite/settings.py:291
+msgid "Account"
+msgstr ""
+
+#: newsite/settings.py:292
+msgid "{base_url:s}/account/settings"
+msgstr ""
+
+#: newsite/settings.py:385
+msgid "Teaser"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "English"
+msgstr ""
+
+#: newsite/settings.py:476 newsite/settings.py:483
+msgid "French"
+msgstr ""
diff --git a/pyproject.toml b/pyproject.toml
index 6208720b6e..ab53809d5f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -72,7 +72,7 @@ dev = [
"black==24.10.0",
"pyRdfa3==3.6.4",
"cssselect==1.2.0",
- "factory-boy==3.3.1",
+ "factory-boy==3.3.3",
"flake8==7.1.1",
"flake8-pyproject==1.2.3",
"htmlmin==0.1.12",
@@ -95,7 +95,7 @@ ci = [
sandbox = [
"django-configurations==2.5.1",
"dockerflow==2024.4.2",
- "factory-boy==3.3.1",
+ "factory-boy==3.3.3",
"gunicorn==23.0.0",
"psycopg2-binary==2.9.10",
"sentry-sdk==2.19.2",
diff --git a/sandbox/settings.py b/sandbox/settings.py
index 91e52b402a..c268496dd4 100644
--- a/sandbox/settings.py
+++ b/sandbox/settings.py
@@ -458,6 +458,19 @@ class Base(StyleguideMixin, DRFMixin, RichieCoursesConfigurationMixin, Configura
"django.contrib.humanize",
)
+ RFC_5646_LOCALES = [
+ "en-US",
+ "es-ES",
+ "pt-PT",
+ "pt-BR",
+ "fr-FR",
+ "fr-CA",
+ "ru-RU",
+ "vi-VN",
+ "ar-SA",
+ "ko-KR",
+ ]
+
# Languages
# - Django
LANGUAGE_CODE = "en"
@@ -466,33 +479,39 @@ class Base(StyleguideMixin, DRFMixin, RichieCoursesConfigurationMixin, Configura
# fallback/default languages throughout the app.
# Use "en" as default as it is the language that is most likely to be spoken by any visitor
# when their preferred language, whatever it is, is unavailable
- LANGUAGES = (("en", _("English")), ("fr", _("French")))
+ LANGUAGES = values.Value(
+ (
+ ("en", _("English")),
+ ("pt", _("Portuguese")),
+ ("pt-br", _("Brazilian Portuguese")),
+ ("fr", _("French (France)")),
+ ("es", _("Spanish")),
+ ("ru", _("Russian")),
+ ("vi", _("Vietnamese")),
+ ("ar", _("Arabic (Saudi Arabia)")),
+ ("ko", _("Korean")),
+ ),
+ environ_name="LANGUAGES",
+ )
# - Django CMS
CMS_LANGUAGES = {
"default": {
"public": True,
"hide_untranslated": False,
- "redirect_on_fallback": False,
+ "redirect_on_fallback": True,
"fallbacks": ["en", "fr"],
},
1: [
{
"public": True,
- "code": "en",
+ "code": code,
"hide_untranslated": False,
- "name": _("English"),
- "fallbacks": ["fr"],
- "redirect_on_fallback": False,
- },
- {
- "public": True,
- "code": "fr",
- "hide_untranslated": False,
- "name": _("French"),
+ "name": _(name),
"fallbacks": ["en"],
"redirect_on_fallback": False,
- },
+ }
+ for code, name in LANGUAGES
],
}
diff --git a/src/richie/apps/demo/defaults.py b/src/richie/apps/demo/defaults.py
index bc1930c59c..94ae3ca2f0 100644
--- a/src/richie/apps/demo/defaults.py
+++ b/src/richie/apps/demo/defaults.py
@@ -1,6 +1,8 @@
"""Parameters that define how the demo site will be built."""
from django.conf import settings
+from django.utils import translation
+from django.utils.translation import gettext_lazy as _
from .utils import pick_image
@@ -33,60 +35,78 @@
}
NB_OBJECTS.update(getattr(settings, "RICHIE_DEMO_NB_OBJECTS", {}))
+languages = getattr(settings, "LANGUAGES", ())
+
+
+def translate_message(code, label):
+ with translation.override(code):
+ new_label = str(_(label))
+ return new_label
+
+
+def set_labels_by_language(label):
+ labels = {}
+
+ for language in languages:
+ labels.update({str(language[0]): translate_message(language[0], label)})
+
+ return labels
+
+
PAGES_INFO = {
"home": {
- "title": {"en": "Home", "fr": "Accueil"},
+ "title": set_labels_by_language("Home"),
"in_navigation": False,
"is_homepage": True,
"template": "richie/homepage.html",
},
"blogposts": {
- "title": {"en": "News", "fr": "Actualités"},
+ "title": set_labels_by_language("News"),
"in_navigation": True,
"template": "courses/cms/blogpost_list.html",
},
"courses": {
- "title": {"en": "Courses", "fr": "Cours"},
+ "title": set_labels_by_language("Courses"),
"in_navigation": True,
"template": "search/search.html",
},
"categories": {
- "title": {"en": "Categories", "fr": "Catégories"},
+ "title": set_labels_by_language("Categories"),
"in_navigation": True,
"template": "courses/cms/category_list.html",
},
"organizations": {
- "title": {"en": "Organizations", "fr": "Établissements"},
+ "title": set_labels_by_language("Organizations"),
"in_navigation": True,
"template": "courses/cms/organization_list.html",
},
"persons": {
- "title": {"en": "Persons", "fr": "Personnes"},
+ "title": set_labels_by_language("Persons"),
"in_navigation": True,
"template": "courses/cms/person_list.html",
},
"programs": {
- "title": {"en": "Programs", "fr": "Parcours"},
+ "title": set_labels_by_language("Programs"),
"in_navigation": True,
"template": "courses/cms/program_list.html",
},
"annex": {
- "title": {"en": "Annex", "fr": "Annexe"},
+ "title": set_labels_by_language("Annex"),
"in_navigation": False,
"template": "richie/single_column.html",
"children": {
"annex__about": {
- "title": {"en": "About", "fr": "A propos"},
+ "title": set_labels_by_language("About"),
"in_navigation": True,
"template": "richie/single_column.html",
},
"annex__sitemap": {
- "title": {"en": "Sitemap", "fr": "Plan de site"},
+ "title": set_labels_by_language("Sitemap"),
"in_navigation": True,
"template": "richie/single_column.html",
},
"login-error": {
- "title": {"en": "Login error", "fr": "Erreur de connexion"},
+ "title": set_labels_by_language("Login error"),
"in_navigation": False,
"template": "richie/single_column.html",
},
@@ -97,202 +117,136 @@
LEVELS_INFO = {
- "page_title": {"en": "Level", "fr": "Niveau"},
+ "page_title": set_labels_by_language("Level"),
"children": [
- {"page_title": {"en": "Beginner", "fr": "Débutant"}},
- {"page_title": {"en": "Advanced", "fr": "Avancé"}},
- {"page_title": {"en": "Expert", "fr": "Expert"}},
+ {"page_title": set_labels_by_language("Beginner")},
+ {"page_title": set_labels_by_language("Advanced")},
+ {"page_title": set_labels_by_language("Expert")},
],
"page_reverse_id": "levels",
}
LEVELS_INFO.update(getattr(settings, "RICHIE_DEMO_LEVELS_INFO", {}))
PARTNERSHIPS_INFO = {
- "page_title": {"en": "Partnership", "fr": "Partenariat"},
+ "page_title": set_labels_by_language("Partnership"),
"children": [
- {"page_title": {"en": "Gold", "fr": "Or"}},
- {"page_title": {"en": "Silver", "fr": "Argent"}},
- {"page_title": {"en": "Bronze", "fr": "Bronze"}},
+ {"page_title": set_labels_by_language("Gold")},
+ {"page_title": set_labels_by_language("Silver")},
+ {"page_title": set_labels_by_language("Bronze")},
],
"page_reverse_id": "partnerships",
}
PARTNERSHIPS_INFO.update(getattr(settings, "RICHIE_DEMO_PARTNERSHIPS_INFO", {}))
TAGS_INFO = {
- "page_title": {"en": "Tag", "fr": "Etiquette"},
+ "page_title": set_labels_by_language("Tag"),
"children": [
- {"page_title": {"en": "Event", "fr": "Evénement"}},
- {"page_title": {"en": "Feature", "fr": "Fonctionnalité"}},
- {"page_title": {"en": "Around the course", "fr": "Autour du cours"}},
- {"page_title": {"en": "Partner", "fr": "Partenaire"}},
- {"page_title": {"en": "Portrait", "fr": "Portrait"}},
- {"page_title": {"en": "Recruitment", "fr": "Recrutement"}},
+ {"page_title": set_labels_by_language("Event")},
+ {"page_title": set_labels_by_language("Feature")},
+ {"page_title": set_labels_by_language("Around the course")},
+ {"page_title": set_labels_by_language("Partner")},
+ {"page_title": set_labels_by_language("Portrait")},
+ {"page_title": set_labels_by_language("Recruitment")},
],
"page_reverse_id": "tags",
}
TAGS_INFO.update(getattr(settings, "RICHIE_DEMO_TAGS_INFO", {}))
SUBJECTS_INFO = {
- "page_title": {"en": "Subject", "fr": "Sujet"},
+ "page_title": set_labels_by_language("Subject"),
"children": [
{
- "page_title": {"en": "Science", "fr": "Sciences"},
+ "page_title": set_labels_by_language("Science"),
"children": [
+ {"page_title": set_labels_by_language("Agronomy and Agriculture")},
+ {"page_title": set_labels_by_language("Chemistry")},
+ {"page_title": set_labels_by_language("Discovery of the Universe")},
+ {"page_title": set_labels_by_language("Environment")},
+ {"page_title": set_labels_by_language("Mathematics and Statistics")},
+ {"page_title": set_labels_by_language("Tools for Research")},
+ {"page_title": set_labels_by_language("Physics")},
+ {"page_title": set_labels_by_language("Cognitive science")},
{
- "page_title": {
- "en": "Agronomy and Agriculture",
- "fr": "Agronomie et Agriculture",
- }
- },
- {"page_title": {"en": "Chemistry", "fr": "Chimie"}},
- {
- "page_title": {
- "en": "Discovery of the Universe",
- "fr": "Découverte de l'Univers",
- }
- },
- {"page_title": {"en": "Environment", "fr": "Environnement"}},
- {
- "page_title": {
- "en": "Mathematics and Statistics",
- "fr": "Mathématiques et Statistiques",
- }
- },
- {
- "page_title": {
- "en": "Tools for Research",
- "fr": "Outils pour la Recherche",
- }
- },
- {"page_title": {"en": "Physics", "fr": "Physique"}},
- {
- "page_title": {
- "en": "Cognitive science",
- "fr": "Sciences cognitives",
- }
- },
- {
- "page_title": {
- "en": "Earth science and science of the Universe",
- "fr": "Sciences de la Terre et de l'Univers",
- }
- },
- {"page_title": {"en": "Life science", "fr": "Sciences de la vie"}},
- {
- "page_title": {
- "en": "Engineering science",
- "fr": "Sciences pour l'ingénieur",
- }
+ "page_title": set_labels_by_language(
+ "Earth science and science of the Universe"
+ )
},
+ {"page_title": set_labels_by_language("Life science")},
+ {"page_title": set_labels_by_language("Engineering science")},
],
},
{
- "page_title": {
- "en": "Human and social sciences",
- "fr": "Sciences humaines et social",
- },
+ "page_title": set_labels_by_language("Human and social sciences"),
"children": [
- {"page_title": {"en": "Communication", "fr": "Communication"}},
- {
- "page_title": {
- "en": "Creation, Arts and Design",
- "fr": "Création, Arts et Design",
- }
- },
- {
- "page_title": {
- "en": "Culture and Civilization",
- "fr": "Cultures et Civilisations",
- }
- },
- {
- "page_title": {
- "en": "Social Issues and Social Policy",
- "fr": "Enjeux de société",
- }
- },
- {"page_title": {"en": "Geography", "fr": "Géographie"}},
- {"page_title": {"en": "History", "fr": "Histoire"}},
- {"page_title": {"en": "Innovation", "fr": "Innovation"}},
- {"page_title": {"en": "Literature", "fr": "Lettres"}},
- {"page_title": {"en": "Media", "fr": "Médias"}},
- {"page_title": {"en": "Philosophy", "fr": "Philosophie"}},
+ {"page_title": set_labels_by_language("Communication")},
+ {"page_title": set_labels_by_language("Creation, Arts and Design")},
+ {"page_title": set_labels_by_language("Culture and Civilization")},
{
- "page_title": {
- "en": "Political science",
- "fr": "Sciences politiques",
- }
+ "page_title": set_labels_by_language(
+ "Social Issues and Social Policy"
+ )
},
- {
- "page_title": {
- "en": "International relations",
- "fr": "Relations internationales",
- }
- },
- {"page_title": {"en": "Sports", "fr": "Sport"}},
+ {"page_title": set_labels_by_language("Geography")},
+ {"page_title": set_labels_by_language("History")},
+ {"page_title": set_labels_by_language("Innovation")},
+ {"page_title": set_labels_by_language("Literature")},
+ {"page_title": set_labels_by_language("Media")},
+ {"page_title": set_labels_by_language("Philosophy")},
+ {"page_title": set_labels_by_language("Political science")},
+ {"page_title": set_labels_by_language("International relations")},
+ {"page_title": set_labels_by_language("Sports")},
],
},
- {"page_title": {"en": "Law", "fr": "Droit et juridique"}},
- {"page_title": {"en": "Economy and Finance", "fr": "Economie et Finance"}},
- {
- "page_title": {
- "en": "Education and Training",
- "fr": "Education et formation",
- }
- },
- {"page_title": {"en": "Management", "fr": "Management"}},
- {"page_title": {"en": "Entrepreneurship", "fr": "Entreprenariat"}},
+ {"page_title": set_labels_by_language("Law")},
+ {"page_title": set_labels_by_language("Economy and Finance")},
+ {"page_title": set_labels_by_language("Education and Training")},
+ {"page_title": set_labels_by_language("Management")},
+ {"page_title": set_labels_by_language("Entrepreneurship")},
{
- "page_title": {"en": "Computer science", "fr": "Informatique"},
+ "page_title": set_labels_by_language("Computer science"),
"children": [
+ {"page_title": set_labels_by_language("Digital and Technology")},
{
- "page_title": {
- "en": "Digital and Technology",
- "fr": "Numérique et Technologie",
- }
+ "page_title": set_labels_by_language(
+ "Telecommunication and Networks"
+ )
},
- {
- "page_title": {
- "en": "Telecommunication and Networks",
- "fr": "Télécommunications et Réseaux",
- }
- },
- {"page_title": {"en": "Coding", "fr": "Programmation"}},
+ {"page_title": set_labels_by_language("Coding")},
],
},
- {"page_title": {"en": "Languages", "fr": "Langues"}},
- {"page_title": {"en": "Education and career guidance", "fr": "Orientation"}},
- {"page_title": {"en": "Health", "fr": "Santé"}},
+ {"page_title": set_labels_by_language("Languages")},
+ {"page_title": set_labels_by_language("Education and career guidance")},
+ {"page_title": set_labels_by_language("Health")},
],
"page_reverse_id": "subjects",
}
SUBJECTS_INFO.update(getattr(settings, "RICHIE_DEMO_SUBJECTS_INFO", {}))
ICONS_INFO = {
- "page_title": {"en": "Icons", "fr": "Icônes"},
+ "page_title": set_labels_by_language("Icons"),
"children": [
{
- "page_title": {"en": "Academic", "fr": "Diplomant"},
+ "page_title": set_labels_by_language("Academic"),
"color": "#005c08",
"fill_icon": pick_image("icons")("academic.png"),
},
{
- "page_title": {"en": "Accessible", "fr": "Accessible"},
+ "page_title": set_labels_by_language("Accessible"),
"color": "#00a1d6",
"fill_icon": pick_image("icons")("accessible.png"),
},
{
- "page_title": {"en": "Closed caption", "fr": "Malentendants"},
+ "page_title": set_labels_by_language("Closed caption"),
"color": "#a11000",
"fill_icon": pick_image("icons")("cc.png"),
},
{
- "page_title": {"en": "Certificate", "fr": "Certifiant"},
+ "page_title": set_labels_by_language("Certificate"),
"color": "#ffc400",
"fill_icon": pick_image("icons")("certificate.png"),
},
{
- "page_title": {"en": "Subtitles", "fr": "Sous-titres"},
+ "page_title": set_labels_by_language("Subtitles"),
"color": "#6d00ba",
"fill_icon": pick_image("icons")("subtitles.png"),
},
@@ -302,113 +256,68 @@
ICONS_INFO.update(getattr(settings, "RICHIE_DEMO_ICONS_INFO", {}))
HOMEPAGE_CONTENT = {
- "en": {
- "banner_title": "Welcome to Richie",
+ str(code): {
+ "banner_title": translate_message(str(code), "Welcome to Richie"),
"banner_content": (
- """
It works! This is the default homepage for the Richie CMS.
""" + f'{translate_message(str(code), "It works! This is the default" "homepage for the Richie CMS.")}
' ), "banner_template": "richie/large_banner/hero-intro.html", "button_template_name": "button-caesura", "section_template": "richie/section/section.html", - "blogposts_title": "Last news", - "blogposts_button_title": "More news", - "courses_title": "Popular courses", - "courses_button_title": "More courses", - "organizations_title": "Universities", - "organizations_button_title": "More universities", - "persons_title": "Persons", - "persons_button_title": "More persons", - "programs_title": "Programs", - "programs_button_title": "More programs", - "subjects_title": "Subjects", - "subjects_button_title": "More subjects", - }, - "fr": { - "banner_title": "Bienvenue sur Richie", - "banner_content": ( - """Ça marche ! Ceci est la page d'accueil par défaut du CMS Richie.
""" - ), - "banner_template": "richie/large_banner/hero-intro.html", - "button_template_name": "button-caesura", - "section_template": "richie/section/section.html", - "blogposts_title": "Actualités récentes", - "blogposts_button_title": "Plus d'actualités", - "courses_title": "Cours à la une", - "courses_button_title": "Plus de cours", - "organizations_title": "Universités", - "organizations_button_title": "Plus d'universités", - "subjects_title": "Thématiques", - "subjects_button_title": "Plus de thématiques", - "persons_title": "Personnes", - "persons_button_title": "Plus de personnes", - "programs_title": "Parcours", - "programs_button_title": "Plus de parcours", - }, + "blogposts_title": translate_message(str(code), "Last news"), + "blogposts_button_title": translate_message(str(code), "More news"), + "courses_title": translate_message(str(code), "Popular courses"), + "courses_button_title": translate_message(str(code), "More courses"), + "organizations_title": translate_message(str(code), "Universities"), + "organizations_button_title": translate_message(str(code), "More universities"), + "persons_title": translate_message(str(code), "Persons"), + "persons_button_title": translate_message(str(code), "More persons"), + "programs_title": translate_message(str(code), "Programs"), + "programs_button_title": translate_message(str(code), "More programs"), + "subjects_title": translate_message(str(code), "Subjects"), + "subjects_button_title": translate_message(str(code), "More subjects"), + } + for code, _ in languages } HOMEPAGE_CONTENT.update(getattr(settings, "RICHIE_DEMO_HOMEPAGE_CONTENT", {})) SINGLECOLUMN_CONTENT = { - "en": { - "banner_title": "Single column template sample", - "banner_content": "It works! This is a single column page.", - "banner_template": "richie/large_banner/hero-intro.html", - "button_template_name": "button-caesura", - "section_sample_title": "A sample section", - "section_sample_button_title": "More!", - "section_sample_template": "richie/section/section.html", - }, - "fr": { - "banner_title": "Exemple de template avec une colonne unique", - "banner_content": "Ça marche ! Ceci est une page d'une colonne.", + str(code): { + "banner_title": translate_message(str(code), "Single column template sample"), + "banner_content": translate_message( + str(code), "It works! This is a single column page." + ), "banner_template": "richie/large_banner/hero-intro.html", "button_template_name": "button-caesura", - "section_sample_title": "Une section d'exemple", - "section_sample_button_title": "Plus !", + "section_sample_title": translate_message(str(code), "A sample section"), + "section_sample_button_title": translate_message(str(code), "More"), "section_sample_template": "richie/section/section.html", - }, + } + for code, _ in languages } SINGLECOLUMN_CONTENT.update(getattr(settings, "RICHIE_DEMO_SINGLECOLUMN_CONTENT", {})) FOOTER_CONTENT = { - "en": [ - {"name": "About", "link": {"internal_link": "annex__about"}}, - {"name": "Sitemap", "link": {"internal_link": "annex__sitemap"}}, - {"name": "Style guide", "link": {"external_link": "/styleguide/"}}, + str(code): [ { - "title": "Richie community", - "items": [ - { - "name": "Website", - "link": {"external_link": "https://richie.education"}, - }, - { - "name": "Github", - "link": {"external_link": "https://github.com/openfun/richie"}, - }, - { - "name": "Site factory", - "link": { - "external_link": "https://github.com/openfun/richie-site-factory" - }, - }, - { - "name": "Example site", - "link": {"external_link": "https://www.fun-campus.fr"}, - }, - ], + "name": translate_message(str(code), "About"), + "link": {"internal_link": "annex__about"}, + }, + { + "name": translate_message(str(code), "Sitemap"), + "link": {"internal_link": "annex__sitemap"}, + }, + { + "name": translate_message(str(code), "Style guide"), + "link": {"external_link": "/styleguide/"}, }, - ], - "fr": [ - {"name": "A propos", "link": {"internal_link": "annex__about"}}, - {"name": "Plan du site", "link": {"internal_link": "annex__sitemap"}}, - {"name": "Style guide", "link": {"external_link": "/styleguide/"}}, { - "title": "Communauté Richie", + "title": translate_message(str(code), "Richie community"), "items": [ { - "name": "Site web", + "name": translate_message(str(code), "Website"), "link": {"external_link": "https://richie.education"}, }, { @@ -416,24 +325,28 @@ "link": {"external_link": "https://github.com/openfun/richie"}, }, { - "name": "Usine à sites", + "name": translate_message(str(code), "Site factory"), "link": { "external_link": "https://github.com/openfun/richie-site-factory" }, }, { - "name": "Site exemple", + "name": translate_message(str(code), "Example site"), "link": {"external_link": "https://www.fun-campus.fr"}, }, ], }, - ], + ] + for code, _ in languages } FOOTER_CONTENT.update(getattr(settings, "RICHIE_DEMO_FOOTER_CONTENT", {})) COURSE_CONTENT = { - "en": {"partners_title": "Partners", "sponsors_title": "Sponsors"}, - "fr": {"partners_title": "Partenaires", "sponsors_title": "Sponsors"}, + str(code): { + "partners_title": translate_message(str(code), "Partners"), + "sponsors_title": translate_message(str(code), "Sponsors"), + } + for code, _ in languages } COURSE_CONTENT.update(getattr(settings, "RICHIE_DEMO_COURSE_CONTENT", {})) diff --git a/src/richie/apps/demo/management/commands/create_demo_site.py b/src/richie/apps/demo/management/commands/create_demo_site.py index c55e28cd13..87a95c151b 100755 --- a/src/richie/apps/demo/management/commands/create_demo_site.py +++ b/src/richie/apps/demo/management/commands/create_demo_site.py @@ -18,13 +18,12 @@ from richie.apps.core.factories import create_text_plugin, image_getter from richie.apps.core.helpers import recursive_page_creation from richie.apps.courses import factories, models +from richie.apps.demo import defaults +from richie.apps.demo.helpers import create_categories +from richie.apps.demo.utils import pick_image from richie.plugins.glimpse import defaults as glimpse_defaults from richie.plugins.glimpse.factories import GlimpseFactory -from ... import defaults -from ...helpers import create_categories -from ...utils import pick_image - logger = logging.getLogger("richie.commands.demo.create_demo_site") @@ -73,6 +72,9 @@ def create_demo_site(): site.name = "Richie demonstration" site.save() + languages = getattr(settings, "LANGUAGES", ()) + languages = [language_code for language_code, _ in languages] + lms_endpoint = ( getattr(settings, "RICHIE_LMS_BACKENDS", None) or [{"BASE_URL": defaults.DEFAULT_LMS_ENDPOINT}] @@ -179,12 +181,14 @@ def create_footer_link(**link_info): # Create organizations under the `Organizations` page organizations = [] + for i in range(defaults.NB_OBJECTS["organizations"]): # Randomly assign each organization to a partnership level category + organizations.append( factories.OrganizationFactory( page_in_navigation=True, - page_languages=["en", "fr"], + page_languages=languages, page_parent=pages_created["organizations"], fill_banner=pick_image("banner"), fill_categories=( @@ -206,9 +210,10 @@ def create_footer_link(**link_info): organizations, random.randint(1, defaults.NB_OBJECTS["person_organizations"]), # nosec ) + person = factories.PersonFactory( page_in_navigation=True, - page_languages=["en", "fr"], + page_languages=languages, page_parent=pages_created["persons"], fill_categories=random.sample( subjects, @@ -255,10 +260,9 @@ def create_footer_link(**link_info): if licences else [] ) - course = factories.CourseFactory( page_in_navigation=True, - page_languages=["en", "fr"], + page_languages=languages, page_parent=pages_created["courses"], fill_licences=course_licences, fill_team=random.sample( @@ -367,17 +371,12 @@ def create_footer_link(**link_info): # Add a random number of course runs to the course nb_course_runs = get_number_of_course_runs() - # pick a subset of languages for this course (otherwise all courses will have more or - # less all the languages across their course runs!) - languages_subset = random.sample( - ["de", "en", "es", "fr", "it", "nl"], random.randint(1, 4) # nosec - ) # only half the courses have an enrollment count defined for i in range(nb_course_runs): course_run = factories.CourseRunFactory( __sequence=i, languages=random.sample( - languages_subset, random.randint(1, len(languages_subset)) # nosec + languages, random.randint(1, len(languages)) # nosec ), direct_course=course, resource_link=f"{lms_endpoint}/courses/course-v1:edX+DemoX+Demo_Course/info", @@ -400,7 +399,7 @@ def create_footer_link(**link_info): for _i in range(defaults.NB_OBJECTS["blogposts"]): post = factories.BlogPostFactory.create( page_in_navigation=True, - page_languages=["en", "fr"], + page_languages=languages, page_parent=pages_created["blogposts"], fill_cover=pick_image("cover"), fill_excerpt=True, @@ -416,10 +415,11 @@ def create_footer_link(**link_info): # Create programs under the `Programs` page programs = [] + for _i in range(defaults.NB_OBJECTS["programs"]): program = factories.ProgramFactory.create( page_in_navigation=True, - page_languages=["en", "fr"], + page_languages=languages, page_parent=pages_created["programs"], fill_cover=pick_image("cover"), fill_excerpt=True,