diff --git a/.github/ISSUE_TEMPLATE/issue_template_bug.md b/.github/ISSUE_TEMPLATE/issue_template_bug.md new file mode 100644 index 000000000..9e3b8099c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue_template_bug.md @@ -0,0 +1,12 @@ +--- +name: Bug +about: Report a bug +title: "bug: set me please" +--- + +## Description: + +Add a detailed description of the bug and how to reproduce it. Include a screenshot if helpful + +## Related PRs: +* to be filled by the SE diff --git a/.github/ISSUE_TEMPLATE/issue_template_feature.md b/.github/ISSUE_TEMPLATE/issue_template_feature.md new file mode 100644 index 000000000..da6272c39 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue_template_feature.md @@ -0,0 +1,12 @@ +--- +name: Feature +about: Request a new feature, a change to an existing feature, or a refactor +title: "feat: set me please" +--- + +## Description: + +Add a detailed description of the feature/change/refactor. Include user stories, if possible. + +## Related PRs: +* to be filled by the SE diff --git a/.github/ISSUE_TEMPLATE/issue_template_task.md b/.github/ISSUE_TEMPLATE/issue_template_task.md new file mode 100644 index 000000000..ecf97ccf8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue_template_task.md @@ -0,0 +1,9 @@ +--- +name: Task +about: Request for a task that most likely will not require a PR +title: "task: set me please" +--- + +## Description: + +Add a detailed description of the required task diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..974cd818b --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,5 @@ +## Description: + +Add a brief description of the changes made in this PR. + +### Related Issue: diff --git a/tutorindigo/plugin.py b/tutorindigo/plugin.py index 1a3311dd4..e20ea63f0 100644 --- a/tutorindigo/plugin.py +++ b/tutorindigo/plugin.py @@ -6,6 +6,7 @@ import importlib_resources from tutor import hooks from tutor.__about__ import __version_suffix__ +from tutormfe.hooks import MFE_APPS from .__about__ import __version__ @@ -20,7 +21,7 @@ "defaults": { "VERSION": __version__, "WELCOME_MESSAGE": "The place for all your online learning", - "PRIMARY_COLOR": "#15376D", # Indigo + "PRIMARY_COLOR": "#4600c7", # Indigo "ENABLE_DARK_TOGGLE": True, # Footer links are dictionaries with a "title" and "url" # To remove all links, run: @@ -109,7 +110,7 @@ def _override_openedx_docker_image( ( "mfe-dockerfile-post-npm-install-learning", """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' +RUN npm install '@edx/brand@https://github.com/MubeenFayyaz-Arbisoft/brand-openedx.git#v1.0.2' RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^3.1.3' RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 @@ -119,7 +120,7 @@ def _override_openedx_docker_image( ( "mfe-dockerfile-post-npm-install-authn", """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' +RUN npm install '@edx/brand@https://github.com/MubeenFayyaz-Arbisoft/brand-openedx.git#v1.0.2' """, ), # Tutor-Indigo v2.1 targets the styling updates in discussions and learner-dashboard MFE @@ -127,7 +128,7 @@ def _override_openedx_docker_image( ( "mfe-dockerfile-post-npm-install-discussions", """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' +RUN npm install '@edx/brand@https://github.com/MubeenFayyaz-Arbisoft/brand-openedx.git#v1.0.2' RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^3.1.3' RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 @@ -137,7 +138,7 @@ def _override_openedx_docker_image( ( "mfe-dockerfile-post-npm-install-learner-dashboard", """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' +RUN npm install '@edx/brand@https://github.com/MubeenFayyaz-Arbisoft/brand-openedx.git#v1.0.2' RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 COPY indigo/env.config.jsx /openedx/app/ @@ -146,7 +147,7 @@ def _override_openedx_docker_image( ( "mfe-dockerfile-post-npm-install-profile", """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' +RUN npm install '@edx/brand@https://github.com/MubeenFayyaz-Arbisoft/brand-openedx.git#v1.0.2' RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^3.1.3' RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 @@ -156,7 +157,7 @@ def _override_openedx_docker_image( ( "mfe-dockerfile-post-npm-install-account", """ -RUN npm install '@edx/brand@npm:@edly-io/indigo-brand-openedx@^2.1.1' +RUN npm install '@edx/brand@https://github.com/MubeenFayyaz-Arbisoft/brand-openedx.git#v1.0.2' RUN npm install '@edx/frontend-component-header@npm:@edly-io/indigo-frontend-component-header@^3.1.3' RUN npm install @edly-io/indigo-frontend-component-footer@^2.0.0 @@ -204,3 +205,27 @@ def _override_openedx_docker_image( ), ] ) + +@MFE_APPS.add() +def _add_my_mfe(mfes): + mfes["authn"] = { + "repository": "https://github.com/edly-io/frontend-app-authn.git", + "port": 1999, + "version": "nelc-v1.0.1", # optional, will default to the Open edX current tag. + } + mfes["learning"] = { + "repository": "https://github.com/edly-io/frontend-app-learning.git", + "port": 2000, + "version": "nelc-v1.0.1", # optional, will default to the Open edX current tag. + } + mfes["discussions"] = { + "repository": "https://github.com/edly-io/frontend-app-discussions.git", + "port": 2002, + "version": "nelc-v1.0.1", # optional, will default to the Open edX current tag. + } + mfes["learner-dashboard"] = { + "repository": "https://github.com/edly-io/frontend-app-learner-dashboard.git", + "port": 1996, + "version": "nelc-v1.0.1", # optional, will default to the Open edX current tag. + } + return mfes diff --git a/tutorindigo/templates/indigo/.gitignore b/tutorindigo/templates/indigo/.gitignore new file mode 100644 index 000000000..a75e41459 --- /dev/null +++ b/tutorindigo/templates/indigo/.gitignore @@ -0,0 +1,8 @@ +.*.swp +!.gitignore +TODO +__pycache__ +*.egg-info/ +/build/ +/dist/ +.venv diff --git a/tutorindigo/templates/indigo/Makefile b/tutorindigo/templates/indigo/Makefile new file mode 100644 index 000000000..dae3514e8 --- /dev/null +++ b/tutorindigo/templates/indigo/Makefile @@ -0,0 +1,17 @@ +SHELL := /bin/bash + +SRC=source ./.venv/bin/activate && + +translation.requirements: + rm -rf .venv + python3.11 -m venv .venv + $(SRC) pip install -r requirements.txt + +translation.extract: + $(SRC) PYTHONPATH=. DJANGO_SETTINGS_MODULE=translation_settings i18n_tool extract --no-segment + $(SRC) cd ./conf/locale/en/LC_MESSAGES && \ + msgcat django.po mako.po underscore.po -o django.po && \ + rm mako.po underscore.po + +translation.compile: + $(SRC) PYTHONPATH=. DJANGO_SETTINGS_MODULE=translation_settings i18n_tool generate diff --git a/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables.scss b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables.scss index 888b6611a..31c427c71 100644 --- a/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables.scss +++ b/tutorindigo/templates/indigo/cms/static/sass/partials/cms/theme/_variables.scss @@ -1,4 +1,4 @@ -$primary: {{ INDIGO_PRIMARY_COLOR }}; +$primary: #3b85ff; $secondary: #F2F7F8; $blue: $primary !default; diff --git a/tutorindigo/templates/indigo/conf/locale/ar/LC_MESSAGES/django.mo b/tutorindigo/templates/indigo/conf/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 000000000..5571b8db5 Binary files /dev/null and b/tutorindigo/templates/indigo/conf/locale/ar/LC_MESSAGES/django.mo differ diff --git a/tutorindigo/templates/indigo/conf/locale/ar/LC_MESSAGES/django.po b/tutorindigo/templates/indigo/conf/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 000000000..19143c2a8 --- /dev/null +++ b/tutorindigo/templates/indigo/conf/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,685 @@ +# #-#-#-#-# django.po (0.1a) #-#-#-#-# +# edX translation file. +# Copyright (C) 2025 EdX +# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE. +# EdX Team , 2025. +# +# #-#-#-#-# mako.po (PROJECT VERSION) #-#-#-#-# +# Translations template for PROJECT. +# Copyright (C) 2025 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2025. +# +# #-#-#-#-# underscore.po (PROJECT VERSION) #-#-#-#-# +# Translations template for PROJECT. +# Copyright (C) 2025 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# django.po (0.1a) #-#-#-#-#\n" +"Project-Id-Version: 0.1a\n" +"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" +"POT-Creation-Date: 2023-06-13 08:00+0000\n" +"PO-Revision-Date: 2023-06-13 09:00+0000\n" +"Last-Translator: \n" +"Language-Team: openedx-translation \n" +"Language: en\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" +"#-#-#-#-# mako.po (PROJECT VERSION) #-#-#-#-#\n" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2025-07-29 17:30+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" +"#-#-#-#-# underscore.po (PROJECT VERSION) #-#-#-#-#\n" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2025-07-29 17:30+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: lms/templates/wiki/base.html:8 +msgid "Wiki" +msgstr "" + +#: lms/templates/course.html:31 +msgid "LEARN MORE" +msgstr "" + +#: lms/templates/course.html:37 lms/templates/course.html:39 +#: lms/templates/course.html:48 lms/templates/course.html:50 +#: lms/templates/course.html:72 lms/templates/course.html:74 +#: lms/templates/discovery/course_card.underscore:29 +msgid "Starts" +msgstr "" + +#: lms/templates/course.html:66 +msgid "officeBuilding" +msgstr "" + +#: lms/templates/course.html:70 +msgid "book" +msgstr "" + +#: lms/templates/course.html:79 +msgid "More " +msgstr "المزيد " + +#: lms/templates/courses_list.html:19 +msgid "There are no courses available at this time!" +msgstr "لا توجد مقررات متاحة في الوقت الحالي!" + +#: lms/templates/courses_list.html:28 +msgid "Browse all courses" +msgstr "استعراض جميع المقررات" + +#: lms/templates/courseware/course_about.html:44 +msgid "An error occurred. Please try again later." +msgstr "" + +#: lms/templates/courseware/course_about.html:94 +msgid "Already Enrolled" +msgstr "ملتحق بالمقرر" + +#: lms/templates/courseware/course_about.html:97 +#: lms/templates/courseware/course_about.html:115 +msgid "View Course" +msgstr "" + +#: lms/templates/courseware/course_about.html:103 +msgid "Course is full" +msgstr "" + +#: lms/templates/courseware/course_about.html:106 +msgid "Enrollment in this course is by invitation only" +msgstr "" + +#: lms/templates/courseware/course_about.html:111 +msgid "Enrollment is Closed" +msgstr "" + +#: lms/templates/courseware/course_about.html:130 +msgid "Enroll Now" +msgstr "" + +#: lms/templates/courseware/course_about.html:145 +msgid "View About Page in studio" +msgstr "" + +#: lms/templates/courseware/course_about.html:159 +msgid "Course Summary" +msgstr "ملخص المقرر" + +#: lms/templates/courseware/course_about.html:168 +msgid "Course Number" +msgstr "" + +#: lms/templates/courseware/course_about.html:184 +msgid "Classes Start" +msgstr "" + +#: lms/templates/courseware/course_about.html:212 +msgid "Classes End" +msgstr "" + +#: lms/templates/courseware/course_about.html:225 +msgid "Estimated Effort" +msgstr "" + +#: lms/templates/courseware/course_about.html:233 +msgid "Price" +msgstr "" + +#: lms/templates/courseware/course_about.html:242 +msgid "Prerequisites" +msgstr "" + +#: lms/templates/courseware/course_about.html:246 +#, python-brace-format +msgid "" +"You must successfully complete {link_start}{prc_display}{link_end} before " +"you begin this course." +msgstr "" + +#: lms/templates/courseware/course_about.html:256 +msgid "Requirements" +msgstr "" + +#: lms/templates/courseware/course_about.html:267 +msgid "Additional Resources" +msgstr "" + +#: lms/templates/courseware/course_about.html:297 +msgctxt "self" +msgid "Enroll" +msgstr "" + +#: lms/templates/courseware/course_about.html:302 +msgctxt "self" +msgid "enroll" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:14 +msgid "Share with friends and family!" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:27 +#, python-brace-format +msgid "I just enrolled in {number} {title} through {account} {url}" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:38 +#, python-brace-format +msgid "I just enrolled in {number} {title} through {platform} {url}" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:45 +#, python-brace-format +msgid "Take a course with {platform} online" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:57 +msgid "Tweet that you've enrolled in this course" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:65 +msgid "Post a Facebook message to say you've enrolled in this course" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:72 +msgid "Email someone to say you've enrolled in this course" +msgstr "" + +#: lms/templates/courseware/courses.html:34 +#: lms/templates/header/navbar-not-authenticated.html:35 +msgid "Courses" +msgstr "" + +#: lms/templates/courseware/courses.html:58 +#: lms/templates/courseware/courses.html:59 +msgid "Refine Your Search" +msgstr "" + +#: lms/templates/courseware/courses.html:68 +msgid "Search for a course" +msgstr "" + +#: lms/templates/courseware/courses.html:70 +#: lms/templates/courseware/courses.html:71 +msgid "Search" +msgstr "" + +#: lms/templates/courseware/courses.html:78 +msgid "Explore course" +msgstr "استكشاف المقررات" + +#: lms/templates/courseware/courses.html:89 +msgid "List of Courses" +msgstr "" + +#: lms/templates/fx_templates/fx_language_selector.html:37 +#: lms/templates/widgets/footer-language-selector.html:24 +msgid "Choose Language" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:5 +msgid "The Most Trusted Cryptocurrency Platform " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:8 +msgid "Here are some reasons why you should choose Flowbite " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:14 +msgid "fingerprint" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:15 +msgid "Secure storage " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:17 +msgid "We store the vast majority of digital assets in secure offline storage." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:23 +msgid "insurance" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:24 +msgid "Insurance " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:26 +msgid "" +"Flowbite keeps cryptocurrencies secure and covers all cash balances in USD " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:32 +msgid "bestPractise" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:33 +msgid "Best practices " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:35 +msgid "" +"The Flowbite Market supports a variety of the most popular cryptocurrencies." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:44 +msgid "Our partners " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:47 +msgid "" +"We use a flexible approach to test assumptions and communicate your
" +"audience's needs early and often. " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:70 +msgid "Contact Us" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:73 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:168 +msgid "" +"Stay up to date with the roadmap progress, announcements and
" +"exclusive discounts feel free to sign up with your email." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:80 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:83 +msgid "company information" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:86 +msgid "Themesberg LLC
Tax id: USXXXXXX" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:93 +msgid "Address" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:95 +msgid "Address " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:97 +msgid "" +"SILVER LAKE, United States
1941 Late Avenue
Zip Code/Postal " +"code: 03875 " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:104 +msgid "Contact us" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:106 +msgid "Contact us: " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:108 +msgid "" +"Email us for general queries including marketing and partnership " +"opportunities" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:108 +msgid "hello@company.com" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:118 +msgid "Your name" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:120 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:127 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:134 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:141 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:148 +msgid "Enter Your Name" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:125 +msgid "Last name" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:132 +msgid "Email" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:139 +msgid "Phone number" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:146 +msgid "Your message" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:154 +msgid "" +"By submitting this form, you confirm that you have read and agree to Flowbite's Terms of Service and Privacy " +"Statement" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:158 +msgid "Send message" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:165 +msgid "Sign up for our newsletter " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:174 +msgid "person" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:178 +msgid "Subscribe" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:182 +msgid "" +"We care about the protection of your data. Read our Privacy " +"Policy." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:188 +msgid "404" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:192 +msgid "Something's missing." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:195 +msgid "" +"Sorry, we can't find that page. You'll find lots to explore on the home page." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:199 +msgid "Back to Homepage" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:205 +msgid "Testimonials" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:208 +msgid "" +"Explore the whole collection of open-source web components and
" +"elements built with the utility classes from Tailwind" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:215 +msgid "Solid foundation for any project" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:218 +msgid "" +"This is a very complex and beautiful set of elements. Under the hood it " +"comes with the best things from 2 different worlds: Figma and Tailwind." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:224 +msgid "Bonnie Green" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:227 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:246 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:265 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:284 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:303 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:324 +msgid "Web developer @themesberg" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:236 +msgid "Advanced features for designers" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:238 +msgid "" +"FlowBite provides a robust set of design tokens and components based on the " +"popular Tailwind CSS framework. From the most used UI components like forms " +"and navigation bars to the whole app screens designed both for desktop and " +"mobile, this UI kit provides a solid foundation for any project." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:243 +msgid "Micheal Gough" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:255 +msgid "Best tool for designers" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:257 +msgid "" +"I recently got my hands on Flowbite Pro, and holy crap, I'm speechless with " +"how easy this was to integrate within my application. Most templates are a " +"pain, code is scattered, and near impossible to theme." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:262 +msgid "Roberta Casas" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:274 +msgid "Efficient Collaborating" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:276 +msgid "" +"This is a very complex and beautiful set of elements that are super easy to " +"use and customize. I've been using it for a while now and I have to say that " +"it's one of the best UI kits I've ever used." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:281 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:292 +msgid "Thomas Lean" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:294 +msgid "" +"Using FlowBite has been fantastic for my workflow. It made it really easy to " +"create a very good looking project in no time. Every designer should have " +"this in their toolbox!" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:300 +msgid "Neil Sims" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:312 +msgid "Perfect choice for a SaaS application" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:315 +msgid "" +"Flowbite is just awesome. It contains tons of predesigned components and " +"pages starting from login screen to complex dashboard. Perfect choice for " +"your next SaaS application." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:321 +msgid "Robert Brown" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_section_invalid.html:12 +msgid "" +">. the administrator should be able to fix this error from the theme designer" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_section_side_image_v1.html:32 +msgid "move beyond" +msgstr "" + +#: lms/templates/header/brand.html:19 +#: lms/templates/header/navbar-logo-header.html:33 +#, python-brace-format +msgid "{platform_name} Home Page" +msgstr "" + +#: lms/templates/header/header.html:59 +#: lms/templates/header/user_dropdown.html:32 +msgid "Options Menu" +msgstr "" + +#: lms/templates/header/header.html:72 +#: lms/templates/header/user_dropdown.html:35 +msgid "More Options" +msgstr "" + +#: lms/templates/header/header.html:80 +#, python-brace-format +msgid "" +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." +msgstr "" + +#: lms/templates/header/navbar-logo-header.html:25 +#, python-brace-format +msgid "{name} Dashboard" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:27 +msgid "Supplemental Links" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:31 +msgid "How it Works" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:39 +msgid "Schools" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:51 +msgid "Register for free" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:55 +msgid "Sign in" +msgstr "" + +#: lms/templates/header/user_dropdown.html:37 +#: lms/templates/header/user_dropdown.html:39 +msgid "Dashboard" +msgstr "" + +#: lms/templates/header/user_dropdown.html:42 +msgid "Profile" +msgstr "" + +#: lms/templates/header/user_dropdown.html:43 +msgid "Account" +msgstr "" + +#: lms/templates/header/user_dropdown.html:45 +msgid "Order History" +msgstr "" + +#: lms/templates/header/user_dropdown.html:47 +msgid "Sign Out" +msgstr "" + +#: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html:29 +#: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html:118 +msgid "Instructor Dashboard" +msgstr "" + +#: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html:121 +msgid "View Course in Studio" +msgstr "" + +#: lms/templates/teams/teams.html:16 +msgid "Teams" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:17 +msgid "View" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:18 +#: lms/templates/wiki/includes/article_menu.html:32 +#: lms/templates/wiki/includes/article_menu.html:48 +#: lms/templates/wiki/includes/article_menu.html:62 +#, python-brace-format +msgid "{span_start}(active){span_end}" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:31 +msgid "Edit" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:47 +msgid "Changes" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:80 +msgid "Settings" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:81 +#, python-brace-format +msgid "{span_start}active{span_end}" +msgstr "" + +#: lms/templates/discovery/course_card.underscore:14 +msgid "Learn More" +msgstr "" + +#: lms/templates/discovery/course_card.underscore:20 +#, python-format +msgid "Starts: %(start_date)s" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:16 +#: lms/templates/learner_dashboard/program_card.underscore:24 +#: lms/templates/learner_dashboard/program_card.underscore:32 +msgid "Course" +msgid_plural "Courses" +msgstr[0] "" +msgstr[1] "" + +#: lms/templates/learner_dashboard/program_card.underscore:18 +msgid "Completed" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:26 +msgid "In Progress" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:34 +msgid "Remaining" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:62 +#, python-format +msgid "%(programName)s Home Page." +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:68 +msgid "Subscribed" +msgstr "" diff --git a/tutorindigo/templates/indigo/conf/locale/babel_mako.cfg b/tutorindigo/templates/indigo/conf/locale/babel_mako.cfg new file mode 100644 index 000000000..a24709119 --- /dev/null +++ b/tutorindigo/templates/indigo/conf/locale/babel_mako.cfg @@ -0,0 +1,2 @@ +[mako: **.html] +input_encoding = utf-8 diff --git a/tutorindigo/templates/indigo/conf/locale/babel_underscore.cfg b/tutorindigo/templates/indigo/conf/locale/babel_underscore.cfg new file mode 100644 index 000000000..3eb0ac986 --- /dev/null +++ b/tutorindigo/templates/indigo/conf/locale/babel_underscore.cfg @@ -0,0 +1,5 @@ +[underscore: **.underscore] +input_encoding = utf-8 + +[extractors] +underscore = enmerkar_underscore:extract diff --git a/tutorindigo/templates/indigo/conf/locale/config.yaml b/tutorindigo/templates/indigo/conf/locale/config.yaml new file mode 100644 index 000000000..1d5be3d36 --- /dev/null +++ b/tutorindigo/templates/indigo/conf/locale/config.yaml @@ -0,0 +1,7 @@ +locales: + - en + - ar + - fr + +dummy_locales: + - eo diff --git a/tutorindigo/templates/indigo/conf/locale/en/LC_MESSAGES/django.mo b/tutorindigo/templates/indigo/conf/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 000000000..4147b3e74 Binary files /dev/null and b/tutorindigo/templates/indigo/conf/locale/en/LC_MESSAGES/django.mo differ diff --git a/tutorindigo/templates/indigo/conf/locale/en/LC_MESSAGES/django.po b/tutorindigo/templates/indigo/conf/locale/en/LC_MESSAGES/django.po new file mode 100644 index 000000000..593aae3bd --- /dev/null +++ b/tutorindigo/templates/indigo/conf/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,685 @@ +# #-#-#-#-# django.po (0.1a) #-#-#-#-# +# edX translation file. +# Copyright (C) 2025 EdX +# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE. +# EdX Team , 2025. +# +# #-#-#-#-# mako.po (PROJECT VERSION) #-#-#-#-# +# Translations template for PROJECT. +# Copyright (C) 2025 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2025. +# +# #-#-#-#-# underscore.po (PROJECT VERSION) #-#-#-#-# +# Translations template for PROJECT. +# Copyright (C) 2025 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# django.po (0.1a) #-#-#-#-#\n" +"Project-Id-Version: 0.1a\n" +"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" +"POT-Creation-Date: 2023-06-13 08:00+0000\n" +"PO-Revision-Date: 2023-06-13 09:00+0000\n" +"Last-Translator: \n" +"Language-Team: openedx-translation \n" +"Language: en\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" +"#-#-#-#-# mako.po (PROJECT VERSION) #-#-#-#-#\n" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2025-07-30 15:34+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" +"#-#-#-#-# underscore.po (PROJECT VERSION) #-#-#-#-#\n" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2025-07-30 15:34+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: lms/templates/wiki/base.html:8 +msgid "Wiki" +msgstr "" + +#: lms/templates/course.html:31 +msgid "LEARN MORE" +msgstr "" + +#: lms/templates/course.html:37 lms/templates/course.html:39 +#: lms/templates/course.html:48 lms/templates/course.html:50 +#: lms/templates/course.html:72 lms/templates/course.html:74 +#: lms/templates/discovery/course_card.underscore:29 +msgid "Starts" +msgstr "" + +#: lms/templates/course.html:66 +msgid "officeBuilding" +msgstr "" + +#: lms/templates/course.html:70 +msgid "book" +msgstr "" + +#: lms/templates/course.html:79 +msgid "More " +msgstr "" + +#: lms/templates/courses_list.html:19 +msgid "There are no courses available at this time!" +msgstr "" + +#: lms/templates/courses_list.html:28 +msgid "Browse all courses" +msgstr "" + +#: lms/templates/courseware/course_about.html:44 +msgid "An error occurred. Please try again later." +msgstr "" + +#: lms/templates/courseware/course_about.html:94 +msgid "Already Enrolled" +msgstr "" + +#: lms/templates/courseware/course_about.html:97 +#: lms/templates/courseware/course_about.html:115 +msgid "View Course" +msgstr "" + +#: lms/templates/courseware/course_about.html:103 +msgid "Course is full" +msgstr "" + +#: lms/templates/courseware/course_about.html:106 +msgid "Enrollment in this course is by invitation only" +msgstr "" + +#: lms/templates/courseware/course_about.html:111 +msgid "Enrollment is Closed" +msgstr "" + +#: lms/templates/courseware/course_about.html:130 +msgid "Enroll Now" +msgstr "" + +#: lms/templates/courseware/course_about.html:145 +msgid "View About Page in studio" +msgstr "" + +#: lms/templates/courseware/course_about.html:159 +msgid "Course Summary" +msgstr "" + +#: lms/templates/courseware/course_about.html:168 +msgid "Course Number" +msgstr "" + +#: lms/templates/courseware/course_about.html:184 +msgid "Classes Start" +msgstr "" + +#: lms/templates/courseware/course_about.html:212 +msgid "Classes End" +msgstr "" + +#: lms/templates/courseware/course_about.html:225 +msgid "Estimated Effort" +msgstr "" + +#: lms/templates/courseware/course_about.html:233 +msgid "Price" +msgstr "" + +#: lms/templates/courseware/course_about.html:242 +msgid "Prerequisites" +msgstr "" + +#: lms/templates/courseware/course_about.html:246 +#, python-brace-format +msgid "" +"You must successfully complete {link_start}{prc_display}{link_end} before " +"you begin this course." +msgstr "" + +#: lms/templates/courseware/course_about.html:256 +msgid "Requirements" +msgstr "" + +#: lms/templates/courseware/course_about.html:267 +msgid "Additional Resources" +msgstr "" + +#: lms/templates/courseware/course_about.html:297 +msgctxt "self" +msgid "Enroll" +msgstr "" + +#: lms/templates/courseware/course_about.html:302 +msgctxt "self" +msgid "enroll" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:14 +msgid "Share with friends and family!" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:27 +#, python-brace-format +msgid "I just enrolled in {number} {title} through {account} {url}" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:38 +#, python-brace-format +msgid "I just enrolled in {number} {title} through {platform} {url}" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:45 +#, python-brace-format +msgid "Take a course with {platform} online" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:57 +msgid "Tweet that you've enrolled in this course" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:65 +msgid "Post a Facebook message to say you've enrolled in this course" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:72 +msgid "Email someone to say you've enrolled in this course" +msgstr "" + +#: lms/templates/courseware/courses.html:34 +#: lms/templates/header/navbar-not-authenticated.html:35 +msgid "Courses" +msgstr "" + +#: lms/templates/courseware/courses.html:58 +#: lms/templates/courseware/courses.html:59 +msgid "Refine Your Search" +msgstr "" + +#: lms/templates/courseware/courses.html:68 +msgid "Search for a course" +msgstr "" + +#: lms/templates/courseware/courses.html:70 +#: lms/templates/courseware/courses.html:71 +msgid "Search" +msgstr "" + +#: lms/templates/courseware/courses.html:78 +msgid "Explore course" +msgstr "" + +#: lms/templates/courseware/courses.html:89 +msgid "List of Courses" +msgstr "" + +#: lms/templates/fx_templates/fx_language_selector.html:37 +#: lms/templates/widgets/footer-language-selector.html:24 +msgid "Choose Language" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:5 +msgid "The Most Trusted Cryptocurrency Platform " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:8 +msgid "Here are some reasons why you should choose Flowbite " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:14 +msgid "fingerprint" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:15 +msgid "Secure storage " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:17 +msgid "We store the vast majority of digital assets in secure offline storage." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:23 +msgid "insurance" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:24 +msgid "Insurance " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:26 +msgid "" +"Flowbite keeps cryptocurrencies secure and covers all cash balances in USD " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:32 +msgid "bestPractise" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:33 +msgid "Best practices " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:35 +msgid "" +"The Flowbite Market supports a variety of the most popular cryptocurrencies." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:44 +msgid "Our partners " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:47 +msgid "" +"We use a flexible approach to test assumptions and communicate your
" +"audience's needs early and often. " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:70 +msgid "Contact Us" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:73 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:168 +msgid "" +"Stay up to date with the roadmap progress, announcements and
" +"exclusive discounts feel free to sign up with your email." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:80 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:83 +msgid "company information" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:86 +msgid "Themesberg LLC
Tax id: USXXXXXX" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:93 +msgid "Address" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:95 +msgid "Address " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:97 +msgid "" +"SILVER LAKE, United States
1941 Late Avenue
Zip Code/Postal " +"code: 03875 " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:104 +msgid "Contact us" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:106 +msgid "Contact us: " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:108 +msgid "" +"Email us for general queries including marketing and partnership " +"opportunities" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:108 +msgid "hello@company.com" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:118 +msgid "Your name" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:120 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:127 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:134 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:141 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:148 +msgid "Enter Your Name" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:125 +msgid "Last name" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:132 +msgid "Email" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:139 +msgid "Phone number" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:146 +msgid "Your message" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:154 +msgid "" +"By submitting this form, you confirm that you have read and agree to Flowbite's Terms of Service and Privacy " +"Statement" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:158 +msgid "Send message" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:165 +msgid "Sign up for our newsletter " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:174 +msgid "person" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:178 +msgid "Subscribe" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:182 +msgid "" +"We care about the protection of your data. Read our Privacy " +"Policy." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:188 +msgid "404" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:192 +msgid "Something's missing." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:195 +msgid "" +"Sorry, we can't find that page. You'll find lots to explore on the home page." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:199 +msgid "Back to Homepage" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:205 +msgid "Testimonials" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:208 +msgid "" +"Explore the whole collection of open-source web components and
" +"elements built with the utility classes from Tailwind" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:215 +msgid "Solid foundation for any project" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:218 +msgid "" +"This is a very complex and beautiful set of elements. Under the hood it " +"comes with the best things from 2 different worlds: Figma and Tailwind." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:224 +msgid "Bonnie Green" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:227 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:246 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:265 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:284 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:303 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:324 +msgid "Web developer @themesberg" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:236 +msgid "Advanced features for designers" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:238 +msgid "" +"FlowBite provides a robust set of design tokens and components based on the " +"popular Tailwind CSS framework. From the most used UI components like forms " +"and navigation bars to the whole app screens designed both for desktop and " +"mobile, this UI kit provides a solid foundation for any project." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:243 +msgid "Micheal Gough" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:255 +msgid "Best tool for designers" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:257 +msgid "" +"I recently got my hands on Flowbite Pro, and holy crap, I'm speechless with " +"how easy this was to integrate within my application. Most templates are a " +"pain, code is scattered, and near impossible to theme." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:262 +msgid "Roberta Casas" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:274 +msgid "Efficient Collaborating" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:276 +msgid "" +"This is a very complex and beautiful set of elements that are super easy to " +"use and customize. I've been using it for a while now and I have to say that " +"it's one of the best UI kits I've ever used." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:281 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:292 +msgid "Thomas Lean" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:294 +msgid "" +"Using FlowBite has been fantastic for my workflow. It made it really easy to " +"create a very good looking project in no time. Every designer should have " +"this in their toolbox!" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:300 +msgid "Neil Sims" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:312 +msgid "Perfect choice for a SaaS application" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:315 +msgid "" +"Flowbite is just awesome. It contains tons of predesigned components and " +"pages starting from login screen to complex dashboard. Perfect choice for " +"your next SaaS application." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:321 +msgid "Robert Brown" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_section_invalid.html:12 +msgid "" +">. the administrator should be able to fix this error from the theme designer" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_section_side_image_v1.html:32 +msgid "move beyond" +msgstr "" + +#: lms/templates/header/brand.html:19 +#: lms/templates/header/navbar-logo-header.html:33 +#, python-brace-format +msgid "{platform_name} Home Page" +msgstr "" + +#: lms/templates/header/header.html:59 +#: lms/templates/header/user_dropdown.html:32 +msgid "Options Menu" +msgstr "" + +#: lms/templates/header/header.html:72 +#: lms/templates/header/user_dropdown.html:35 +msgid "More Options" +msgstr "" + +#: lms/templates/header/header.html:80 +#, python-brace-format +msgid "" +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." +msgstr "" + +#: lms/templates/header/navbar-logo-header.html:25 +#, python-brace-format +msgid "{name} Dashboard" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:27 +msgid "Supplemental Links" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:31 +msgid "How it Works" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:39 +msgid "Schools" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:51 +msgid "Register for free" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:55 +msgid "Sign in" +msgstr "" + +#: lms/templates/header/user_dropdown.html:37 +#: lms/templates/header/user_dropdown.html:39 +msgid "Dashboard" +msgstr "" + +#: lms/templates/header/user_dropdown.html:42 +msgid "Profile" +msgstr "" + +#: lms/templates/header/user_dropdown.html:43 +msgid "Account" +msgstr "" + +#: lms/templates/header/user_dropdown.html:45 +msgid "Order History" +msgstr "" + +#: lms/templates/header/user_dropdown.html:47 +msgid "Sign Out" +msgstr "" + +#: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html:29 +#: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html:118 +msgid "Instructor Dashboard" +msgstr "" + +#: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html:121 +msgid "View Course in Studio" +msgstr "" + +#: lms/templates/teams/teams.html:16 +msgid "Teams" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:17 +msgid "View" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:18 +#: lms/templates/wiki/includes/article_menu.html:32 +#: lms/templates/wiki/includes/article_menu.html:48 +#: lms/templates/wiki/includes/article_menu.html:62 +#, python-brace-format +msgid "{span_start}(active){span_end}" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:31 +msgid "Edit" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:47 +msgid "Changes" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:80 +msgid "Settings" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:81 +#, python-brace-format +msgid "{span_start}active{span_end}" +msgstr "" + +#: lms/templates/discovery/course_card.underscore:14 +msgid "Learn More" +msgstr "" + +#: lms/templates/discovery/course_card.underscore:20 +#, python-format +msgid "Starts: %(start_date)s" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:16 +#: lms/templates/learner_dashboard/program_card.underscore:24 +#: lms/templates/learner_dashboard/program_card.underscore:32 +msgid "Course" +msgid_plural "Courses" +msgstr[0] "" +msgstr[1] "" + +#: lms/templates/learner_dashboard/program_card.underscore:18 +msgid "Completed" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:26 +msgid "In Progress" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:34 +msgid "Remaining" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:62 +#, python-format +msgid "%(programName)s Home Page." +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:68 +msgid "Subscribed" +msgstr "" diff --git a/tutorindigo/templates/indigo/conf/locale/fr/LC_MESSAGES/django.mo b/tutorindigo/templates/indigo/conf/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 000000000..1cabded4b Binary files /dev/null and b/tutorindigo/templates/indigo/conf/locale/fr/LC_MESSAGES/django.mo differ diff --git a/tutorindigo/templates/indigo/conf/locale/fr/LC_MESSAGES/django.po b/tutorindigo/templates/indigo/conf/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 000000000..db6f0c7e9 --- /dev/null +++ b/tutorindigo/templates/indigo/conf/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,685 @@ +# #-#-#-#-# django.po (0.1a) #-#-#-#-# +# edX translation file. +# Copyright (C) 2025 EdX +# This file is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE. +# EdX Team , 2025. +# +# #-#-#-#-# mako.po (PROJECT VERSION) #-#-#-#-# +# Translations template for PROJECT. +# Copyright (C) 2025 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2025. +# +# #-#-#-#-# underscore.po (PROJECT VERSION) #-#-#-#-# +# Translations template for PROJECT. +# Copyright (C) 2025 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"#-#-#-#-# django.po (0.1a) #-#-#-#-#\n" +"Project-Id-Version: 0.1a\n" +"Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" +"POT-Creation-Date: 2023-06-13 08:00+0000\n" +"PO-Revision-Date: 2023-06-13 09:00+0000\n" +"Last-Translator: \n" +"Language-Team: openedx-translation \n" +"Language: en\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" +"#-#-#-#-# mako.po (PROJECT VERSION) #-#-#-#-#\n" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2025-07-29 17:30+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" +"#-#-#-#-# underscore.po (PROJECT VERSION) #-#-#-#-#\n" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2025-07-29 17:30+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: lms/templates/wiki/base.html:8 +msgid "Wiki" +msgstr "" + +#: lms/templates/course.html:31 +msgid "LEARN MORE" +msgstr "" + +#: lms/templates/course.html:37 lms/templates/course.html:39 +#: lms/templates/course.html:48 lms/templates/course.html:50 +#: lms/templates/course.html:72 lms/templates/course.html:74 +#: lms/templates/discovery/course_card.underscore:29 +msgid "Starts" +msgstr "" + +#: lms/templates/course.html:66 +msgid "officeBuilding" +msgstr "" + +#: lms/templates/course.html:70 +msgid "book" +msgstr "" + +#: lms/templates/course.html:79 +msgid "More " +msgstr "Plus " + +#: lms/templates/courses_list.html:19 +msgid "There are no courses available at this time!" +msgstr "Il n'y a pas de cours disponibles pour le moment !" + +#: lms/templates/courses_list.html:28 +msgid "Browse all courses" +msgstr "Parcourir tous les cours" + +#: lms/templates/courseware/course_about.html:44 +msgid "An error occurred. Please try again later." +msgstr "" + +#: lms/templates/courseware/course_about.html:94 +msgid "Already Enrolled" +msgstr "Déjà inscrit" + +#: lms/templates/courseware/course_about.html:97 +#: lms/templates/courseware/course_about.html:115 +msgid "View Course" +msgstr "" + +#: lms/templates/courseware/course_about.html:103 +msgid "Course is full" +msgstr "" + +#: lms/templates/courseware/course_about.html:106 +msgid "Enrollment in this course is by invitation only" +msgstr "" + +#: lms/templates/courseware/course_about.html:111 +msgid "Enrollment is Closed" +msgstr "" + +#: lms/templates/courseware/course_about.html:130 +msgid "Enroll Now" +msgstr "" + +#: lms/templates/courseware/course_about.html:145 +msgid "View About Page in studio" +msgstr "" + +#: lms/templates/courseware/course_about.html:159 +msgid "Course Summary" +msgstr "Résumé du cours" + +#: lms/templates/courseware/course_about.html:168 +msgid "Course Number" +msgstr "" + +#: lms/templates/courseware/course_about.html:184 +msgid "Classes Start" +msgstr "" + +#: lms/templates/courseware/course_about.html:212 +msgid "Classes End" +msgstr "" + +#: lms/templates/courseware/course_about.html:225 +msgid "Estimated Effort" +msgstr "" + +#: lms/templates/courseware/course_about.html:233 +msgid "Price" +msgstr "" + +#: lms/templates/courseware/course_about.html:242 +msgid "Prerequisites" +msgstr "" + +#: lms/templates/courseware/course_about.html:246 +#, python-brace-format +msgid "" +"You must successfully complete {link_start}{prc_display}{link_end} before " +"you begin this course." +msgstr "" + +#: lms/templates/courseware/course_about.html:256 +msgid "Requirements" +msgstr "" + +#: lms/templates/courseware/course_about.html:267 +msgid "Additional Resources" +msgstr "" + +#: lms/templates/courseware/course_about.html:297 +msgctxt "self" +msgid "Enroll" +msgstr "" + +#: lms/templates/courseware/course_about.html:302 +msgctxt "self" +msgid "enroll" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:14 +msgid "Share with friends and family!" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:27 +#, python-brace-format +msgid "I just enrolled in {number} {title} through {account} {url}" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:38 +#, python-brace-format +msgid "I just enrolled in {number} {title} through {platform} {url}" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:45 +#, python-brace-format +msgid "Take a course with {platform} online" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:57 +msgid "Tweet that you've enrolled in this course" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:65 +msgid "Post a Facebook message to say you've enrolled in this course" +msgstr "" + +#: lms/templates/courseware/course_about_sidebar_header.html:72 +msgid "Email someone to say you've enrolled in this course" +msgstr "" + +#: lms/templates/courseware/courses.html:34 +#: lms/templates/header/navbar-not-authenticated.html:35 +msgid "Courses" +msgstr "" + +#: lms/templates/courseware/courses.html:58 +#: lms/templates/courseware/courses.html:59 +msgid "Refine Your Search" +msgstr "" + +#: lms/templates/courseware/courses.html:68 +msgid "Search for a course" +msgstr "" + +#: lms/templates/courseware/courses.html:70 +#: lms/templates/courseware/courses.html:71 +msgid "Search" +msgstr "" + +#: lms/templates/courseware/courses.html:78 +msgid "Explore course" +msgstr "Explorer le cours" + +#: lms/templates/courseware/courses.html:89 +msgid "List of Courses" +msgstr "" + +#: lms/templates/fx_templates/fx_language_selector.html:37 +#: lms/templates/widgets/footer-language-selector.html:24 +msgid "Choose Language" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:5 +msgid "The Most Trusted Cryptocurrency Platform " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:8 +msgid "Here are some reasons why you should choose Flowbite " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:14 +msgid "fingerprint" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:15 +msgid "Secure storage " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:17 +msgid "We store the vast majority of digital assets in secure offline storage." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:23 +msgid "insurance" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:24 +msgid "Insurance " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:26 +msgid "" +"Flowbite keeps cryptocurrencies secure and covers all cash balances in USD " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:32 +msgid "bestPractise" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:33 +msgid "Best practices " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:35 +msgid "" +"The Flowbite Market supports a variety of the most popular cryptocurrencies." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:44 +msgid "Our partners " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:47 +msgid "" +"We use a flexible approach to test assumptions and communicate your
" +"audience's needs early and often. " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:70 +msgid "Contact Us" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:73 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:168 +msgid "" +"Stay up to date with the roadmap progress, announcements and
" +"exclusive discounts feel free to sign up with your email." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:80 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:83 +msgid "company information" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:86 +msgid "Themesberg LLC
Tax id: USXXXXXX" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:93 +msgid "Address" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:95 +msgid "Address " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:97 +msgid "" +"SILVER LAKE, United States
1941 Late Avenue
Zip Code/Postal " +"code: 03875 " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:104 +msgid "Contact us" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:106 +msgid "Contact us: " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:108 +msgid "" +"Email us for general queries including marketing and partnership " +"opportunities" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:108 +msgid "hello@company.com" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:118 +msgid "Your name" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:120 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:127 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:134 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:141 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:148 +msgid "Enter Your Name" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:125 +msgid "Last name" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:132 +msgid "Email" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:139 +msgid "Phone number" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:146 +msgid "Your message" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:154 +msgid "" +"By submitting this form, you confirm that you have read and agree to Flowbite's Terms of Service and Privacy " +"Statement" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:158 +msgid "Send message" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:165 +msgid "Sign up for our newsletter " +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:174 +msgid "person" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:178 +msgid "Subscribe" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:182 +msgid "" +"We care about the protection of your data. Read our Privacy " +"Policy." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:188 +msgid "404" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:192 +msgid "Something's missing." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:195 +msgid "" +"Sorry, we can't find that page. You'll find lots to explore on the home page." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:199 +msgid "Back to Homepage" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:205 +msgid "Testimonials" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:208 +msgid "" +"Explore the whole collection of open-source web components and
" +"elements built with the utility classes from Tailwind" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:215 +msgid "Solid foundation for any project" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:218 +msgid "" +"This is a very complex and beautiful set of elements. Under the hood it " +"comes with the best things from 2 different worlds: Figma and Tailwind." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:224 +msgid "Bonnie Green" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:227 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:246 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:265 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:284 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:303 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:324 +msgid "Web developer @themesberg" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:236 +msgid "Advanced features for designers" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:238 +msgid "" +"FlowBite provides a robust set of design tokens and components based on the " +"popular Tailwind CSS framework. From the most used UI components like forms " +"and navigation bars to the whole app screens designed both for desktop and " +"mobile, this UI kit provides a solid foundation for any project." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:243 +msgid "Micheal Gough" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:255 +msgid "Best tool for designers" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:257 +msgid "" +"I recently got my hands on Flowbite Pro, and holy crap, I'm speechless with " +"how easy this was to integrate within my application. Most templates are a " +"pain, code is scattered, and near impossible to theme." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:262 +msgid "Roberta Casas" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:274 +msgid "Efficient Collaborating" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:276 +msgid "" +"This is a very complex and beautiful set of elements that are super easy to " +"use and customize. I've been using it for a while now and I have to say that " +"it's one of the best UI kits I've ever used." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:281 +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:292 +msgid "Thomas Lean" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:294 +msgid "" +"Using FlowBite has been fantastic for my workflow. It made it really easy to " +"create a very good looking project in no time. Every designer should have " +"this in their toolbox!" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:300 +msgid "Neil Sims" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:312 +msgid "Perfect choice for a SaaS application" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:315 +msgid "" +"Flowbite is just awesome. It contains tons of predesigned components and " +"pages starting from login screen to complex dashboard. Perfect choice for " +"your next SaaS application." +msgstr "" + +#: lms/templates/fx_templates/fx_page/_remaining_unimplemented_sections.html:321 +msgid "Robert Brown" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_section_invalid.html:12 +msgid "" +">. the administrator should be able to fix this error from the theme designer" +msgstr "" + +#: lms/templates/fx_templates/fx_page/_section_side_image_v1.html:32 +msgid "move beyond" +msgstr "" + +#: lms/templates/header/brand.html:19 +#: lms/templates/header/navbar-logo-header.html:33 +#, python-brace-format +msgid "{platform_name} Home Page" +msgstr "" + +#: lms/templates/header/header.html:59 +#: lms/templates/header/user_dropdown.html:32 +msgid "Options Menu" +msgstr "" + +#: lms/templates/header/header.html:72 +#: lms/templates/header/user_dropdown.html:35 +msgid "More Options" +msgstr "" + +#: lms/templates/header/header.html:80 +#, python-brace-format +msgid "" +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." +msgstr "" + +#: lms/templates/header/navbar-logo-header.html:25 +#, python-brace-format +msgid "{name} Dashboard" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:27 +msgid "Supplemental Links" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:31 +msgid "How it Works" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:39 +msgid "Schools" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:51 +msgid "Register for free" +msgstr "" + +#: lms/templates/header/navbar-not-authenticated.html:55 +msgid "Sign in" +msgstr "" + +#: lms/templates/header/user_dropdown.html:37 +#: lms/templates/header/user_dropdown.html:39 +msgid "Dashboard" +msgstr "" + +#: lms/templates/header/user_dropdown.html:42 +msgid "Profile" +msgstr "" + +#: lms/templates/header/user_dropdown.html:43 +msgid "Account" +msgstr "" + +#: lms/templates/header/user_dropdown.html:45 +msgid "Order History" +msgstr "" + +#: lms/templates/header/user_dropdown.html:47 +msgid "Sign Out" +msgstr "" + +#: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html:29 +#: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html:118 +msgid "Instructor Dashboard" +msgstr "" + +#: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html:121 +msgid "View Course in Studio" +msgstr "" + +#: lms/templates/teams/teams.html:16 +msgid "Teams" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:17 +msgid "View" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:18 +#: lms/templates/wiki/includes/article_menu.html:32 +#: lms/templates/wiki/includes/article_menu.html:48 +#: lms/templates/wiki/includes/article_menu.html:62 +#, python-brace-format +msgid "{span_start}(active){span_end}" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:31 +msgid "Edit" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:47 +msgid "Changes" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:80 +msgid "Settings" +msgstr "" + +#: lms/templates/wiki/includes/article_menu.html:81 +#, python-brace-format +msgid "{span_start}active{span_end}" +msgstr "" + +#: lms/templates/discovery/course_card.underscore:14 +msgid "Learn More" +msgstr "" + +#: lms/templates/discovery/course_card.underscore:20 +#, python-format +msgid "Starts: %(start_date)s" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:16 +#: lms/templates/learner_dashboard/program_card.underscore:24 +#: lms/templates/learner_dashboard/program_card.underscore:32 +msgid "Course" +msgid_plural "Courses" +msgstr[0] "" +msgstr[1] "" + +#: lms/templates/learner_dashboard/program_card.underscore:18 +msgid "Completed" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:26 +msgid "In Progress" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:34 +msgid "Remaining" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:62 +#, python-format +msgid "%(programName)s Home Page." +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore:68 +msgid "Subscribed" +msgstr "" diff --git a/tutorindigo/templates/indigo/env.config.jsx b/tutorindigo/templates/indigo/env.config.jsx index ca3b70448..93e7a446b 100644 --- a/tutorindigo/templates/indigo/env.config.jsx +++ b/tutorindigo/templates/indigo/env.config.jsx @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; import Cookies from 'universal-cookie'; -import Footer from '@edly-io/indigo-frontend-component-footer'; +// import Footer from '@edly-io/indigo-frontend-component-footer'; import { getConfig } from '@edx/frontend-platform'; import { DIRECT_PLUGIN, PLUGIN_OPERATIONS } from '@openedx/frontend-plugin-framework'; @@ -10,7 +10,7 @@ let themeCookieExpiry = 90; // days const AddDarkTheme = () => { const cookies = new Cookies(); - const isThemeToggleEnabled = getConfig().INDIGO_ENABLE_DARK_TOGGLE; + const isThemeToggleEnabled = true; const getCookieExpiry = () => { const today = new Date(); @@ -71,6 +71,43 @@ const AddDarkTheme = () => { return (
); }; +const NewFooter = () => { + return (
); +}; + const themePluginSlot = { keepDefault: false, plugins: [ @@ -80,7 +117,7 @@ const themePluginSlot = { id: 'default_contents', type: DIRECT_PLUGIN, priority: 1, - RenderWidget:
, + RenderWidget: , }, }, { diff --git a/tutorindigo/templates/indigo/lms/static/images/avatar.jpg b/tutorindigo/templates/indigo/lms/static/images/avatar.jpg new file mode 100644 index 000000000..efe6d1afb Binary files /dev/null and b/tutorindigo/templates/indigo/lms/static/images/avatar.jpg differ diff --git a/tutorindigo/templates/indigo/lms/static/images/best-practise.svg b/tutorindigo/templates/indigo/lms/static/images/best-practise.svg new file mode 100644 index 000000000..054257582 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/best-practise.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/book-cloud.svg b/tutorindigo/templates/indigo/lms/static/images/book-cloud.svg new file mode 100644 index 000000000..4c9730a6a --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/book-cloud.svg @@ -0,0 +1,4 @@ + + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/building-office.svg b/tutorindigo/templates/indigo/lms/static/images/building-office.svg new file mode 100644 index 000000000..3817a4812 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/building-office.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/cell-icon.svg b/tutorindigo/templates/indigo/lms/static/images/cell-icon.svg new file mode 100644 index 000000000..12f0ee164 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/cell-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/changing-icon.svg b/tutorindigo/templates/indigo/lms/static/images/changing-icon.svg new file mode 100644 index 000000000..b06fe7440 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/changing-icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/eye-icon.svg b/tutorindigo/templates/indigo/lms/static/images/eye-icon.svg new file mode 100644 index 000000000..bb426e0ac --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/eye-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/fingerprint.svg b/tutorindigo/templates/indigo/lms/static/images/fingerprint.svg new file mode 100644 index 000000000..45f6340b3 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/fingerprint.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/future-x-logo.png b/tutorindigo/templates/indigo/lms/static/images/future-x-logo.png new file mode 100644 index 000000000..7281758a7 Binary files /dev/null and b/tutorindigo/templates/indigo/lms/static/images/future-x-logo.png differ diff --git a/tutorindigo/templates/indigo/lms/static/images/future-x-logo.svg b/tutorindigo/templates/indigo/lms/static/images/future-x-logo.svg new file mode 100644 index 000000000..c62c80647 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/future-x-logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/google.svg b/tutorindigo/templates/indigo/lms/static/images/google.svg new file mode 100644 index 000000000..6433bad8d --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/google.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/house-icon.svg b/tutorindigo/templates/indigo/lms/static/images/house-icon.svg new file mode 100644 index 000000000..cbacbb5d9 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/house-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/insurance.svg b/tutorindigo/templates/indigo/lms/static/images/insurance.svg new file mode 100644 index 000000000..cf6b36db7 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/insurance.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/location-icon.svg b/tutorindigo/templates/indigo/lms/static/images/location-icon.svg new file mode 100644 index 000000000..7c9bf764a --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/location-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/logo.png b/tutorindigo/templates/indigo/lms/static/images/logo.png index a503186e2..85a65accf 100644 Binary files a/tutorindigo/templates/indigo/lms/static/images/logo.png and b/tutorindigo/templates/indigo/lms/static/images/logo.png differ diff --git a/tutorindigo/templates/indigo/lms/static/images/mailchamp.svg b/tutorindigo/templates/indigo/lms/static/images/mailchamp.svg new file mode 100644 index 000000000..12cfdd89f --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/mailchamp.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/main-banner.jpg b/tutorindigo/templates/indigo/lms/static/images/main-banner.jpg new file mode 100644 index 000000000..b2c19e5e6 Binary files /dev/null and b/tutorindigo/templates/indigo/lms/static/images/main-banner.jpg differ diff --git a/tutorindigo/templates/indigo/lms/static/images/message-icon.svg b/tutorindigo/templates/indigo/lms/static/images/message-icon.svg new file mode 100644 index 000000000..d8516e007 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/message-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/microsoft.svg b/tutorindigo/templates/indigo/lms/static/images/microsoft.svg new file mode 100644 index 000000000..6c0dccd00 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/microsoft.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/move-beyond.png b/tutorindigo/templates/indigo/lms/static/images/move-beyond.png new file mode 100644 index 000000000..e22dbe5d3 Binary files /dev/null and b/tutorindigo/templates/indigo/lms/static/images/move-beyond.png differ diff --git a/tutorindigo/templates/indigo/lms/static/images/person.svg b/tutorindigo/templates/indigo/lms/static/images/person.svg new file mode 100644 index 000000000..cd7c1ffe3 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/person.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/spotify.svg b/tutorindigo/templates/indigo/lms/static/images/spotify.svg new file mode 100644 index 000000000..a4ab2fb3e --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/spotify.svg @@ -0,0 +1,3 @@ + + + diff --git a/tutorindigo/templates/indigo/lms/static/images/team-design.png b/tutorindigo/templates/indigo/lms/static/images/team-design.png new file mode 100644 index 000000000..970396245 Binary files /dev/null and b/tutorindigo/templates/indigo/lms/static/images/team-design.png differ diff --git a/tutorindigo/templates/indigo/lms/static/images/tick-mark.png b/tutorindigo/templates/indigo/lms/static/images/tick-mark.png new file mode 100644 index 000000000..1a364f7c7 Binary files /dev/null and b/tutorindigo/templates/indigo/lms/static/images/tick-mark.png differ diff --git a/tutorindigo/templates/indigo/lms/static/images/traning-course-icon.png b/tutorindigo/templates/indigo/lms/static/images/traning-course-icon.png new file mode 100644 index 000000000..e77f5e3f1 Binary files /dev/null and b/tutorindigo/templates/indigo/lms/static/images/traning-course-icon.png differ diff --git a/tutorindigo/templates/indigo/lms/static/js/conditional-registration-fields.js b/tutorindigo/templates/indigo/lms/static/js/conditional-registration-fields.js new file mode 100644 index 000000000..dd92bf5fc --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/js/conditional-registration-fields.js @@ -0,0 +1,357 @@ +/** + * Copies all attributes from a source DOM element to a target DOM element. + * + * This function iterates over all attributes of the source element + * and sets them on the target element, preserving names and values. + * + * @param {HTMLElement} source - The element from which to copy attributes. + * @param {HTMLElement} target - The element to which attributes will be copied. + */ +function copyAttributes(source, target) { + Array.from(source.attributes).forEach(attr => { + target.setAttribute(attr.name, attr.value); + }); +} + +/** + * Converts an `` element into a `` element. + * - Copies all attributes from the `` element to the new ``. + * - Populates the `` with the newly created `` element to be converted. + * @param {Array} options - The list of options to populate the `` element into an `` field while preserving attributes and value. + * + * This function: + * - Creates a new `` element. + * - Copies all attributes from the ``. + * - Sets the input's value to match the currently selected value of the `` with the new `` element. + * - Reattaches event listeners for dependent fields. + * + * @param {HTMLSelectElement} selectElement - The ` + + +
+ + +
+ % endif + + <%block name="skip_links"> + % if settings.FEATURES.get('ENABLE_ANNOUNCEMENTS'): + ${_("Skip to list of announcements")} + % endif + + % if settings.FEATURES.get('ENABLE_ANNOUNCEMENTS'): + <%include file='dashboard/_dashboard_announcements.html' /> + % endif + + + + + +%if show_account_activation_popup: + +%endif + + + + + +<%include file="dashboard/_dashboard_entitlement_unenrollment_modal.html"/> diff --git a/tutorindigo/templates/indigo/lms/templates/footer.html b/tutorindigo/templates/indigo/lms/templates/footer.html index 9bb2593e5..ec99fa637 100644 --- a/tutorindigo/templates/indigo/lms/templates/footer.html +++ b/tutorindigo/templates/indigo/lms/templates/footer.html @@ -5,14 +5,22 @@ from django.urls import reverse from django.utils.translation import gettext as _ from lms.djangoapps.branding.api import get_footer - from openedx.core.djangoapps.lang_pref.api import footer_language_selector_is_enabled %> <% footer = get_footer(is_secure=is_secure) %> <% icp_license_info = getattr(settings, 'ICP_LICENSE_INFO', {})%> <%namespace name='static' file='static_content.html'/> +<%namespace name='fx_static' file='fx_templates/fx_static_content.html'/> + +<% +fx_footer = fx_static.get_fx_config_value('footer', default_value={}) +declared_footer_sections = fx_footer.get('sections', []) +declared_social_media_links = fx_footer.get('social_media_links', []) +fx_copyrights_text = fx_static.t(fx_footer.get('copyrights_text', '')) or '' +%> + -% if uses_bootstrap: - diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_faq_section_v1.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_faq_section_v1.html new file mode 100644 index 000000000..69a36d2df --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_faq_section_v1.html @@ -0,0 +1,58 @@ +<%page args="page_contents"/> + +<%namespace name='fx_static' file='../fx_static_content.html'/> + +<% +id_tag = page_contents.get('div_id') +if id_tag: + id_tag = f'id="{id_tag}"' + +fx_title = fx_static.t(page_contents.get('title')) +declared_faq_items = page_contents.get('faq_items', []) + +fx_faq_items = [] +for faq_item in declared_faq_items: + question = fx_static.t(faq_item.get('question')) + answer = fx_static.t(faq_item.get('answer')) + if not question or not answer: + continue + + fx_faq_items.append({ + 'question': question, + 'answer': answer, + 'item_id': fx_static.fx_random_string(), + }) + +background_color = page_contents.get('background_color', 'transparent') +style = f"background-color: {background_color};" +%> + +
+
+

+ ${fx_title | fx_static.br} +

+
+
+
+ % for faq_item in fx_faq_items: +
+
+

+ +

+
+
+ ${faq_item['answer'] | fx_static.br} +
+
+
+
+ % endfor +
+
+
diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_featured_courses_v1.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_featured_courses_v1.html new file mode 100644 index 000000000..3dc67b940 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_featured_courses_v1.html @@ -0,0 +1,32 @@ +<%page args="page_contents"/> + +<%namespace name='fx_static' file='../fx_static_content.html'/> + +<% +id_tag = page_contents.get('div_id') +if id_tag: + id_tag = f'id="{id_tag}"' + +fx_title = fx_static.t(page_contents.get('title')) +fx_description = fx_static.t(page_contents.get('description')) +fx_grid_type = page_contents.get('grid_type', '') +if fx_grid_type not in ['max-3', 'max-6', 'max-9', 'all', 'categorised']: + fx_grid_type = 'max-9' + +background_color = page_contents.get('background_color', 'transparent') +style = f"background-color: {background_color};" +%> + + +
+
+

+ ${fx_title | fx_static.br} +

+

+ ${fx_description | fx_static.br} +

+
+ <%include file="../../courses_list.html" args="fx_grid_type=fx_grid_type"/> + +
diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_hero_section_v1.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_hero_section_v1.html new file mode 100644 index 000000000..05b347b10 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_hero_section_v1.html @@ -0,0 +1,29 @@ +<%page args="page_contents"/> + +<%namespace name='fx_static' file='../fx_static_content.html'/> + +<% +id_tag = page_contents.get('div_id') +if id_tag: + id_tag = f'id="{id_tag}"' + +fx_title = fx_static.t(page_contents.get('title')) +fx_description = fx_static.t(page_contents.get('description')) +image_url = page_contents.get('hero_image') +background_color = page_contents.get('background_color', 'transparent') + +if image_url: + style = f"background-image: url({image_url}); background-repeat: no-repeat; background-color: {background_color};" +else: + style = f"background-color: {background_color if background_color != 'transparent' else 'black'};" +%> + +
+ +

+ ${fx_title | fx_static.br} +

+

+ ${fx_description | fx_static.br} +

+
diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_invalid.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_invalid.html new file mode 100644 index 000000000..ecaa3aca0 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_invalid.html @@ -0,0 +1,12 @@ +<%page args="page_contents"/> + +<%! +from django.utils.translation import gettext as _ +%> +<%namespace name='fx_static' file='../fx_static_content.html'/> + +<% +fx_type = page_contents.get('type') +%> + + diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_live_metrics_section_v1.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_live_metrics_section_v1.html new file mode 100644 index 000000000..06850b305 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_live_metrics_section_v1.html @@ -0,0 +1,98 @@ +<%page args="page_contents"/> + +<%namespace name='fx_static' file='../fx_static_content.html'/> + +<% +id_tag = page_contents.get('div_id') +if id_tag: + id_tag = f'id="{id_tag}"' + +from crum import get_current_request +from futurex_openedx_extensions.helpers.tenants import get_all_tenants_info +from futurex_openedx_extensions.dashboard.statistics.live import get_live_statistics +fx_title = fx_static.t(page_contents.get('title')) +fx_description = fx_static.t(page_contents.get('description')) + +declared_list_of_live_metrics = page_contents.get('options') +fx_list_of_live_metrics = [] +allowed_statistics = { + 'courses': { + 'ar': 'مقررات', + 'en': 'Course', + 'fr': 'Cours', + }, + 'learners': { + 'ar': 'متعلّمون', + 'en': 'Learners', + 'fr': 'Apprenants', + }, + 'certificates': { + 'ar': 'شهادات', + 'en': 'Certificates', + 'fr': 'Certificats', + }, + 'enrollments': { + 'ar': 'تسجيل في المقررات', + 'en': 'Enrollments', + 'fr': 'Inscriptions', + }, + 'learning_hours': { + 'ar': 'ساعات تعلّم', + 'en': 'Learning Hours', + 'fr': 'Heures d’apprentissage', + }, +} + +live_statistics = {} + +for declared_live_metric in declared_list_of_live_metrics: + allowed_check = allowed_statistics.get(declared_live_metric.get('key', '').lower()) + if allowed_check and declared_live_metric.get('is_checked'): + declared_live_metric['key'] = declared_live_metric['key'].lower() + declared_live_metric['api_key'] = declared_live_metric['key'] + '_count' + title = fx_static.t(declared_live_metric['title']) + if not title: + title = fx_static.t(allowed_statistics[declared_live_metric['key']]) + declared_live_metric['title'] = title + declared_live_metric['hint'] = fx_static.t(declared_live_metric.get('hint', {})) + fx_list_of_live_metrics.append(declared_live_metric) + +if fx_list_of_live_metrics: + tenant_id = get_all_tenants_info()['tenant_by_site'].get(get_current_request().site.domain) + live_statistics = get_live_statistics(tenant_id) + +alignment = page_contents.get('alignment') +alignment = alignment if alignment in ['start', 'end'] else 'center' + +background_color = page_contents.get('background_color', 'transparent') +style = f"background-color: {background_color};" +%> + +
+ % if fx_title or fx_description: +
+ % if fx_title: +

+ ${fx_title | fx_static.br} +

+ % endif + % if fx_description: +

+ ${fx_description | fx_static.br} +

+ % endif +
+ % endif + % if fx_list_of_live_metrics: +
+ % for live_metric in fx_list_of_live_metrics: +
+
+

${live_statistics[live_metric['api_key']]}

+

${live_metric['title'] | fx_static.br}

+
+
+ % endfor +
+ % endif +
diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_paragraph_section_v1.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_paragraph_section_v1.html new file mode 100644 index 000000000..27af5166b --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_paragraph_section_v1.html @@ -0,0 +1,20 @@ +<%page args="page_contents"/> + +<%namespace name='fx_static' file='../fx_static_content.html'/> + +<% +id_tag = page_contents.get('div_id') +if id_tag: + id_tag = f'id="{id_tag}"' + +fx_html_content = fx_static.t(page_contents.get('paragraph')) + +background_color = page_contents.get('background_color', 'transparent') +style = f"background-color: {background_color};" +%> + +
+ + ${fx_html_content | n} + +
diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_side_image_v1.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_side_image_v1.html new file mode 100644 index 000000000..f50425306 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_side_image_v1.html @@ -0,0 +1,40 @@ +<%page args="page_contents"/> + +<%! +from django.utils.translation import gettext as _ +%> +<%namespace name='fx_static' file='../fx_static_content.html'/> + +<% +id_tag = page_contents.get('div_id') +if id_tag: + id_tag = f'id="{id_tag}"' + +fx_title = fx_static.t(page_contents.get('title')) +fx_description = fx_static.t(page_contents.get('description')) +fx_image_url = page_contents.get('side_image') +is_reversed = page_contents.get('reversed', False) +if isinstance(is_reversed, str): + is_reversed = is_reversed.lower() == 'yes' +fx_style = f'flex-direction: row-reverse' if is_reversed else '' + +background_color = page_contents.get('background_color', 'transparent') +if fx_style: + fx_style = f"{fx_style}; background-color: {background_color};" +else: + fx_style = f"background-color: {background_color};" +%> + +
+
+

+ ${fx_title | fx_static.br} +

+

+ ${fx_description | fx_static.br} +

+
+
+ ${_('move beyond')} +
+
diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_static_metrics_section_v1.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_static_metrics_section_v1.html new file mode 100644 index 000000000..54de5e6de --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_static_metrics_section_v1.html @@ -0,0 +1,48 @@ +<%page args="page_contents"/> + +<%namespace name='fx_static' file='../fx_static_content.html'/> + +<% +id_tag = page_contents.get('div_id') +if id_tag: + id_tag = f'id="{id_tag}"' + +fx_title = fx_static.t(page_contents.get('title')) +fx_description = fx_static.t(page_contents.get('description')) +fx_list_of_static_metrics = page_contents.get('list_of_static_metrics') + +alignment = page_contents.get('alignment') +alignment = alignment if alignment in ['start', 'end'] else 'center' + +background_color = page_contents.get('background_color', 'transparent') +style = f"background-color: {background_color};" +%> + +
+ % if fx_title or fx_description: +
+ % if fx_title: +

+ ${fx_title | fx_static.br} +

+ % endif + % if fx_description: +

+ ${fx_description | fx_static.br} +

+ % endif +
+ % endif + % if fx_list_of_static_metrics: +
+ % for static_metric in fx_list_of_static_metrics: +
+
+

${fx_static.t(static_metric.get('title')) | fx_static.br}

+

${fx_static.t(static_metric.get('description')) | fx_static.br}

+
+
+ % endfor +
+ % endif +
diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_two_columns_v1.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_two_columns_v1.html new file mode 100644 index 000000000..5f99dbd01 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/_section_two_columns_v1.html @@ -0,0 +1,48 @@ +<%page args="page_contents"/> + +<%namespace name='fx_static' file='../fx_static_content.html'/> + +<% +id_tag = page_contents.get('div_id') +if id_tag: + id_tag = f'id="{id_tag}"' + +fx_title = fx_static.t(page_contents.get('title')) +fx_description = fx_static.t(page_contents.get('description')) +declared_columns_section = page_contents.get('columns_section', []) + +columns_sections = [] +for i in range(min(3, len(declared_columns_section))): + columns_sections.append(declared_columns_section[i]) + +background_color = page_contents.get('background_color', 'transparent') +style = f"background-color: {background_color};" +%> + +
+ % if fx_title: +

+ ${fx_title | fx_static.br} +

+ % endif + % if fx_description: +

+ ${fx_description | fx_static.br} +

+ % endif +
+ % for columns_section in columns_sections: +
+
+
+ +
+

${fx_static.t(columns_section.get('title')) | fx_static.br}

+

+ ${fx_static.t(columns_section.get('description')) | fx_static.br} +

+
+
+ % endfor +
+
diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/page.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/page.html new file mode 100644 index 000000000..5c4a751e3 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_page/page.html @@ -0,0 +1,26 @@ +<%page args="page_name, allowed_sections"/> + +<%namespace name='fx_static' file='../fx_static_content.html'/> + + + +<% +the_page = fx_static.get_fx_config_value(page_name, default_value={}) +%> + +
+
+ + % if the_page and the_page.get('sections'): + % for section in the_page.get('sections'): + % if section.get('type') and section.get('visible') is True: + % if section.get('type') in allowed_sections: + <%include file="_section_${section.get('type')}.html" args="page_contents=section"/> + % else: + <%include file="_section_invalid.html" args="page_contents=section"/> + % endif + % endif + % endfor + % endif +
+
diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_static_content.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_static_content.html new file mode 100644 index 000000000..a43dd5f1b --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/fx_static_content.html @@ -0,0 +1,146 @@ +<%page expression_filter="h"/> +<%! +from futurex_openedx_extensions.helpers.tenants import get_config_current_request +from django.utils.translation import get_language +from django.conf import settings +from lms.djangoapps.branding import api as branding_api +%> + +<%def name="br(text)" buffered="True"><% + # Escape angle brackets for HTML except for
tags + return text.replace('<', '<').replace('>', '>').replace('<br>', '
').replace('<strong>', '').replace('</strong>', '') +%> + +<%def name="get_fx_config_value(key, default_value='')" buffered="True"><% + config_value = get_config_current_request([key]) + if not config_value: + return default_value + result = config_value['values'].get(key, default_value) + if result is None: + result = default_value + return result +%> + +<%def name="fx_supported_languages()" buffered="True"><% + allowed_languages = getattr(settings, 'FX_THEME_ALLOWED_LANGUAGES', None) + if not allowed_languages or not isinstance(allowed_languages, dict): + allowed_languages = { + 'ar': 'العربية', + 'en': 'English', + 'fr': 'Français', + } + return allowed_languages +%> + +<%def name="t(config_dict_by_lang)" buffered="True"><% + if not config_dict_by_lang or not isinstance(config_dict_by_lang, dict): + return '' + + allowed_languages = list(fx_supported_languages().keys()) + language_code = get_language() + if language_code in allowed_languages: + selected_language = [language_code] + allowed_languages + else: + selected_language = allowed_languages + for lang_code in selected_language: + result = config_dict_by_lang.get(lang_code, '') + if result: + return result + return '' +%> + +<%def name="get_all_fx_section_names()" buffered="True"><% + return [ + 'hero_section_v1', + 'two_columns_v1', + 'side_image_v1', + 'featured_courses_v1', + 'static_metrics_section_v1', + 'live_metrics_section_v1', + 'faq_section_v1', + 'paragraph_section_v1', + ] +%> + +<%def name="get_all_fx_page_names()" buffered="True"><% + return { + 'home': '', + 'courses': 'courses', + 'about-us': 'about', + 'contact-us': 'contact', + 'blog': 'blog', + 'donate': 'donate', + 'terms': 'tos', + 'privacy': 'privacy', + 'help': 'help', + 'faq': 'faq', + 'jobs': 'jobs', + 'news': 'news', + 'press': 'press', + 'media-kit': 'media-kit', + } +%> + +<%def name="get_fx_link_sections(declared_link_sections)" buffered="True"><% + link_sections = [] + + valid_pages = get_all_fx_page_names() + declared_valid_custom_pages = get_fx_config_value('custom_pages', default_value=[]) + valid_custom_pages = { + _page['key']: _page['url_slug'] for _page in declared_valid_custom_pages if _page.get('key') and _page.get('url_slug') + } + + for link_section in declared_link_sections: + page = link_section.get('page', '') + if page in valid_pages: + page_type = 'page' + elif page == 'external_link' and link_section.get('custom_url'): + page_type = 'url' + elif page.replace('-', '_') in valid_custom_pages: + page_type = 'custom' + else: + page_type = 'invalid' + + if page_type == 'page': + link_section['link'] = f'/{valid_pages[page]}' + elif page_type == 'url': + link_section['link'] = link_section['custom_url'] + elif page_type == 'custom': + url_slug = valid_custom_pages[page.replace('-', '_')] + link_section['link'] = f'/p/{url_slug}' + else: + page_type = 'invalid' + + if page_type != 'invalid': + link_section['new_tab'] = 'target="_blank" rel="noopener"' if link_section.get('new_tab') else '' + link_sections.append(link_section) + + return link_sections +%> + + +<%def name="get_fx_social_media_links(declared_social_media_links)" buffered="True"><% + social_media_links = [] + + for f_link in declared_social_media_links: + if f_link.get('value') and f_link.get('provider'): + social_media_links.append(f_link) + + return social_media_links +%> + + +<%def name="fx_get_logo_image_url()" buffered="True"><% + logo_image_url = get_fx_config_value('logo_image_url', default_value='') + if not logo_image_url: + logo_image_url = branding_api.get_logo_url(is_secure) + + return logo_image_url +%> + + +<%def name="fx_random_string(length=8)" buffered="True"><% + import random + import string + return ''.join(random.choices(string.ascii_letters + string.digits, k=length)) +%> diff --git a/tutorindigo/templates/indigo/lms/templates/fx_templates/temporary_paragon_fix.html b/tutorindigo/templates/indigo/lms/templates/fx_templates/temporary_paragon_fix.html new file mode 100644 index 000000000..fafe5463e --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/fx_templates/temporary_paragon_fix.html @@ -0,0 +1,1626 @@ + \ No newline at end of file diff --git a/tutorindigo/templates/indigo/lms/templates/head-extra.html b/tutorindigo/templates/indigo/lms/templates/head-extra.html new file mode 100644 index 000000000..721e4230e --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/head-extra.html @@ -0,0 +1,11 @@ +## mako +<%namespace name='static' file='static_content.html'/> +<% style_overrides_file = static.get_value('css_overrides_file') %> + +<%include file="fx_templates/fx_head_extra.html" /> + +% if style_overrides_file: + +% endif + +<%include file="fx_templates/fx_css_override.html" /> diff --git a/tutorindigo/templates/indigo/lms/templates/header/_preview_banner.html b/tutorindigo/templates/indigo/lms/templates/header/_preview_banner.html new file mode 100644 index 000000000..27c6bcb25 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/header/_preview_banner.html @@ -0,0 +1,11 @@ + diff --git a/tutorindigo/templates/indigo/lms/templates/header/brand.html b/tutorindigo/templates/indigo/lms/templates/header/brand.html index 28e5f2f67..026111fa8 100644 --- a/tutorindigo/templates/indigo/lms/templates/header/brand.html +++ b/tutorindigo/templates/indigo/lms/templates/header/brand.html @@ -15,8 +15,8 @@

% if course and not disable_courseware_header: diff --git a/tutorindigo/templates/indigo/lms/templates/header/header.html b/tutorindigo/templates/indigo/lms/templates/header/header.html index 4a066563b..0e30a3d1c 100644 --- a/tutorindigo/templates/indigo/lms/templates/header/header.html +++ b/tutorindigo/templates/indigo/lms/templates/header/header.html @@ -42,8 +42,11 @@ % endif - % if course: @@ -83,28 +89,3 @@ % if settings.FEATURES.get('ENABLE_COOKIE_CONSENT', False): <%include file="../widgets/cookie-consent.html" /> % endif - -% if header_language_selector_is_enabled(): - <% languages = released_languages() %> - % if len(languages) > 1: -
- - % if user.is_authenticated: - - % else: - - % endif - -
- % endif -% endif diff --git a/tutorindigo/templates/indigo/lms/templates/header/navbar-authenticated.html b/tutorindigo/templates/indigo/lms/templates/header/navbar-authenticated.html index abfb69ef5..da7a56dee 100644 --- a/tutorindigo/templates/indigo/lms/templates/header/navbar-authenticated.html +++ b/tutorindigo/templates/indigo/lms/templates/header/navbar-authenticated.html @@ -27,34 +27,8 @@ %> diff --git a/tutorindigo/templates/indigo/lms/templates/header/navbar-logo-header.html b/tutorindigo/templates/indigo/lms/templates/header/navbar-logo-header.html index adb12deec..0344e651c 100644 --- a/tutorindigo/templates/indigo/lms/templates/header/navbar-logo-header.html +++ b/tutorindigo/templates/indigo/lms/templates/header/navbar-logo-header.html @@ -3,6 +3,7 @@ <%page expression_filter="h" args="online_help_token"/> <%namespace name='static' file='../static_content.html'/> +<%namespace name='fx_static' file='../fx_templates/fx_static_content.html'/> <%! from django.urls import reverse from django.utils.translation import gettext as _ @@ -27,9 +28,9 @@

% endif % else: - + <%block name="navigation_logo"> - + % if settings.LOGO_IMAGE_EXTRA_TEXT == 'edge': | EDGE diff --git a/tutorindigo/templates/indigo/lms/templates/header/navbar-not-authenticated.html b/tutorindigo/templates/indigo/lms/templates/header/navbar-not-authenticated.html index 10dca56fc..1d7b20a8c 100644 --- a/tutorindigo/templates/indigo/lms/templates/header/navbar-not-authenticated.html +++ b/tutorindigo/templates/indigo/lms/templates/header/navbar-not-authenticated.html @@ -3,6 +3,7 @@ <%page expression_filter="h"/> <%namespace name='static' file='../static_content.html'/> +<%namespace name='fx_static' file='../fx_templates/fx_static_content.html'/> <%namespace file='../main.html' import="login_query"/> <%! @@ -13,11 +14,15 @@ <% mktg_site_enabled = static.get_value('ENABLE_MKTG_SITE', settings.FEATURES.get('ENABLE_MKTG_SITE', False)) + mktg_site_enabled = False # disable it for now until we figure out a design for it courses_are_browsable = settings.FEATURES.get('COURSES_ARE_BROWSABLE') allows_login = not settings.FEATURES['DISABLE_LOGIN_BUTTON'] and not combined_login_and_register can_discover_courses = settings.FEATURES.get('ENABLE_COURSE_DISCOVERY') allow_public_account_creation = static.get_value('ALLOW_PUBLIC_ACCOUNT_CREATION', settings.FEATURES.get('ALLOW_PUBLIC_ACCOUNT_CREATION')) and settings.FEATURES.get('SHOW_REGISTRATION_LINKS', True) + + combined_login = fx_static.get_fx_config_value('header_combined_login', default_value=False) %> +