Compare commits
117 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34548b93f4 | ||
|
|
f438d33f75 | ||
|
|
be1c0de4c6 | ||
|
|
ae5ea9a8aa | ||
|
|
eeb7fb1f78 | ||
|
|
3f32d5bb3b | ||
|
|
12019ca37d | ||
|
|
4d133b2f99 | ||
|
|
e733226b0c | ||
|
|
2ed583a0c3 | ||
|
|
048cee654e | ||
|
|
1293294593 | ||
|
|
a1947a3106 | ||
|
|
eff6cd6bbe | ||
|
|
d784ac5699 | ||
|
|
9acad5157b | ||
|
|
94459efa3f | ||
|
|
e88bc6a5ce | ||
|
|
55a7ab54e9 | ||
|
|
0c324c87cc | ||
|
|
31e8befa11 | ||
|
|
86ab7a6d97 | ||
|
|
14bdfb2d98 | ||
|
|
0036e585da | ||
|
|
cba2343fc0 | ||
|
|
864eebce2f | ||
|
|
156d36fb5e | ||
|
|
068718aa8a | ||
|
|
10219abfd6 | ||
|
|
2ec231a3d0 | ||
|
|
78f29b3aff | ||
|
|
7f768e81f4 | ||
|
|
aa1460eda1 | ||
|
|
85f85063ac | ||
|
|
0a7ce3c5d8 | ||
|
|
8468d0e3db | ||
|
|
059ac27f0b | ||
|
|
a96f8836b1 | ||
|
|
4018116136 | ||
|
|
aa083c8a40 | ||
|
|
8752243e9c | ||
|
|
1d028e81c4 | ||
|
|
2752d3e42c | ||
|
|
aa074ef762 | ||
|
|
bae75cd2f6 | ||
|
|
81a714b5a2 | ||
|
|
10cd44c22f | ||
|
|
a44f59c362 | ||
|
|
8d372fcab4 | ||
|
|
97d6c518b5 | ||
|
|
f331c48e1d | ||
|
|
9d0b10058d | ||
|
|
4ccd3ba71e | ||
|
|
7a6f5a868c | ||
|
|
0fae11d031 | ||
|
|
8a9725c990 | ||
|
|
d0189b0e3a | ||
|
|
c6853cc95e | ||
|
|
f28f37fb2c | ||
|
|
7dbbe9dba4 | ||
|
|
b625d9b099 | ||
|
|
a85c81a4b4 | ||
|
|
1677a4a32b | ||
|
|
776d46f5a2 | ||
|
|
6384eeaa13 | ||
|
|
fdc0befcee | ||
|
|
f2c28eb695 | ||
|
|
4095916991 | ||
|
|
551703364a | ||
|
|
4a2fae023c | ||
|
|
fca206120e | ||
|
|
65b2199065 | ||
|
|
9d03a52bf9 | ||
|
|
c8aa44dfcb | ||
|
|
7fcbe85ab9 | ||
|
|
de0dea7df8 | ||
|
|
43cf7d04b8 | ||
|
|
4d18580482 | ||
|
|
b48e007ea8 | ||
|
|
d5e8973866 | ||
|
|
a8c530f98c | ||
|
|
47769ccd62 | ||
|
|
bfc1d9a0a8 | ||
|
|
824484e608 | ||
|
|
d3f7baae4c | ||
|
|
8d961e9b71 | ||
|
|
f22855920c | ||
|
|
18728e3519 | ||
|
|
65dc2838d3 | ||
|
|
be930ce076 | ||
|
|
1ea47a008c | ||
|
|
e0169cff79 | ||
|
|
7c53ac10e2 | ||
|
|
212e0de6e9 | ||
|
|
8e74384b5a | ||
|
|
86e7e68ce1 | ||
|
|
a77999dbb6 | ||
|
|
3288fb0f06 | ||
|
|
a81b384f90 | ||
|
|
75c11d3fcc | ||
|
|
51a6cc035c | ||
|
|
ae8008d05c | ||
|
|
7f44177986 | ||
|
|
d88aaedf3f | ||
|
|
802d4ccb0b | ||
|
|
76a84c7f5d | ||
|
|
40aefba203 | ||
|
|
6cdfb822b4 | ||
|
|
fdacab66f7 | ||
|
|
5cc12e71df | ||
|
|
f5e5fa2f36 | ||
|
|
6022b83b8c | ||
|
|
a01b1657cc | ||
|
|
6b785bd0e6 | ||
|
|
0beffc3083 | ||
|
|
d345d09b13 | ||
|
|
38e1eb8fc7 |
BIN
.github/batch.png
vendored
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
.github/batches.png
vendored
|
Before Width: | Height: | Size: 572 KiB |
BIN
.github/certificate.png
vendored
|
Before Width: | Height: | Size: 307 KiB After Width: | Height: | Size: 912 KiB |
2
.github/helper/install_dependencies.sh
vendored
@@ -5,7 +5,7 @@ echo "Setting Up System Dependencies..."
|
||||
|
||||
sudo apt update
|
||||
sudo apt remove mysql-server mysql-client
|
||||
sudo apt install libcups2-dev redis-server mariadb-client-10.6
|
||||
sudo apt-get install libcups2-dev redis-server mariadb-client
|
||||
|
||||
install_wkhtmltopdf() {
|
||||
wget -q https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
|
||||
|
||||
BIN
.github/hero.png
vendored
|
Before Width: | Height: | Size: 842 KiB After Width: | Height: | Size: 2.0 MiB |
BIN
.github/quiz.png
vendored
|
Before Width: | Height: | Size: 578 KiB After Width: | Height: | Size: 1.0 MiB |
64
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
name: Build Container Image
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
tags:
|
||||
- "*"
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64, arm64]
|
||||
|
||||
permissions:
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: Checkout Entire Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
platforms: linux/${{ matrix.arch }}
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set Branch
|
||||
run: |
|
||||
export APPS_JSON='[{"url": "https://github.com/frappe/lms","branch": "main"}]'
|
||||
echo "APPS_JSON_BASE64=$(echo $APPS_JSON | base64 -w 0)" >> $GITHUB_ENV
|
||||
echo "FRAPPE_BRANCH=version-15" >> $GITHUB_ENV
|
||||
|
||||
- name: Set Image Tag
|
||||
run: |
|
||||
echo "IMAGE_TAG=stable" >> $GITHUB_ENV
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
repository: frappe/frappe_docker
|
||||
path: builds
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
push: true
|
||||
context: builds
|
||||
file: builds/images/layered/Containerfile
|
||||
tags: >
|
||||
ghcr.io/${{ github.repository }}:${{ github.ref_name }},
|
||||
ghcr.io/${{ github.repository }}:${{ env.IMAGE_TAG }}
|
||||
build-args: |
|
||||
"FRAPPE_BRANCH=${{ env.FRAPPE_BRANCH }}"
|
||||
"APPS_JSON_BASE64=${{ env.APPS_JSON_BASE64 }}"
|
||||
2
.github/workflows/ui-tests.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
|
||||
services:
|
||||
mariadb:
|
||||
image: mariadb:10.6
|
||||
image: mariadb:10.8
|
||||
env:
|
||||
MARIADB_ROOT_PASSWORD: 123
|
||||
ports:
|
||||
|
||||
56
README.md
@@ -1,11 +1,10 @@
|
||||
<div align="center" markdown="1">
|
||||
|
||||
<img src=".github/lms-logo.png" alt="Frappe Learning logo" width="100"/>
|
||||
<img src=".github/lms-logo.png" alt="Frappe Learning logo" width="80" height="80"/>
|
||||
<h1>Frappe Learning</h1>
|
||||
|
||||
**Easy to use, open source, Learning Management System**
|
||||
|
||||

|
||||

|
||||
|
||||
</div>
|
||||
@@ -24,10 +23,10 @@
|
||||
## Frappe Learning
|
||||
Frappe Learning is an easy-to-use learning system that helps you bring structure to your content.
|
||||
|
||||
## Motivation
|
||||
### Motivation
|
||||
In 2021, we were looking for a Learning Management System to launch [Mon.School](https://mon.school) for FOSS United. We checked out Moodle, but it didn’t feel right. The forms were unnecessarily lengthy and the UI was confusing. It shouldn't be this hard to create a course right? So I started making a learning system for Mon.School which soon became a product in itself. The aim is to have a simple platform that anyone can use to launch a course of their own and make knowledge sharing easier.
|
||||
|
||||
## Key Features
|
||||
### Key Features
|
||||
|
||||
- **Structured Learning**: Design a course with a 3-level hierarchy, where your courses have chapters and you can group your lessons within these chapters. This ensures that the context of the lesson is set by the chapter.
|
||||
|
||||
@@ -37,24 +36,42 @@ In 2021, we were looking for a Learning Management System to launch [Mon.School]
|
||||
|
||||
- **Getting Certified**: Once a learner has completed the course or batch, you can grant them a certificate. The app provides an inbuilt certificate template. You can use this or else create a template of your own and use that instead.
|
||||
|
||||
### Batches to group learners
|
||||
<details>
|
||||
<summary>View Screenshots</summary>
|
||||
|
||||

|
||||
|
||||
### Quiz to evaluate them
|
||||

|
||||
<div align="center">
|
||||
<sub>
|
||||
Create batches to group your learners
|
||||
</sub>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
|
||||

|
||||
<div align="center">
|
||||
<sub>
|
||||
Evaluate their knowledge by quizzes
|
||||
</sub>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
### Certificate to authenticate their knowledge
|
||||
|
||||

|
||||
<div align="center">
|
||||
<sub>
|
||||
Autenticate their work with certification
|
||||
</sub>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
## Under the Hood
|
||||
|
||||
- [**Frappe Framework**](https://github.com/frappe/frappe): A full-stack web application framework written in Python and Javascript. The framework provides a robust foundation for building web applications, including a database abstraction layer, user authentication, and a REST API.
|
||||
### Under the Hood
|
||||
|
||||
- [**Frappe UI**](https://github.com/frappe/frappe-ui): A Vue-based UI library, to provide a modern user interface. The Frappe UI library provides a variety of components that can be used to build single-page applications on top of the Frappe Framework.
|
||||
- [**Frappe Framework**](https://github.com/frappe/frappe): A full-stack web application framework.
|
||||
|
||||
- [**Frappe UI**](https://github.com/frappe/frappe-ui): A Vue-based UI library, to provide a modern user interface.
|
||||
|
||||
## Production Setup
|
||||
|
||||
@@ -89,15 +106,15 @@ wget https://frappe.io/easy-install.py
|
||||
python3 ./easy-install.py deploy \
|
||||
--project=learning_prod_setup \
|
||||
--email=your_email.example.com \
|
||||
--image=ghcr.io/frappe/learning \
|
||||
--image=ghcr.io/frappe/lms \
|
||||
--version=stable \
|
||||
--app=learning \
|
||||
--app=lms \
|
||||
--sitename subdomain.domain.tld
|
||||
```
|
||||
|
||||
Replace the following parameters with your values:
|
||||
- `your_email.example.com`: Your email address
|
||||
- `subdomain.domain.tld`: Your domain name where Insights will be hosted
|
||||
- `subdomain.domain.tld`: Your domain name where Learning will be hosted
|
||||
|
||||
The script will set up a production-ready instance of Frappe Learning with all the necessary configurations in about 5 minutes.
|
||||
|
||||
@@ -113,16 +130,16 @@ You need Docker, docker-compose and git setup on your machine. Refer [Docker doc
|
||||
cd frappe-learning
|
||||
|
||||
# Download the docker-compose file
|
||||
wget -O docker-compose.yml https://raw.githubusercontent.com/frappe/insights/develop/docker/docker-compose.yml
|
||||
wget -O docker-compose.yml https://raw.githubusercontent.com/frappe/lms/develop/docker/docker-compose.yml
|
||||
|
||||
# Download the setup script
|
||||
wget -O init.sh https://raw.githubusercontent.com/frappe/insights/develop/docker/init.sh
|
||||
wget -O init.sh https://raw.githubusercontent.com/frappe/lms/develop/docker/init.sh
|
||||
|
||||
**Step 2**: Run the container and daemonize it
|
||||
|
||||
docker compose up -d
|
||||
|
||||
**Step 3**: The site [http://lms.localhost:8000/insights](http://lms.localhost:8000/lms) should now be available. The default credentials are:
|
||||
**Step 3**: The site [http://lms.localhost:8000/lms](http://lms.localhost:8000/lms) should now be available. The default credentials are:
|
||||
- Username: Administrator
|
||||
- Password: admin
|
||||
|
||||
@@ -134,7 +151,7 @@ To setup the repository locally follow the steps mentioned below:
|
||||
1. Start the server by running `bench start`
|
||||
1. In a separate terminal window, create a new site by running `bench new-site learning.test`
|
||||
1. Map your site to localhost with the command `bench --site learning.test add-to-hosts`
|
||||
1. Get the Insights app. Run `bench get-app https://github.com/frappe/lms`
|
||||
1. Get the Learning app. Run `bench get-app https://github.com/frappe/lms`
|
||||
1. Run `bench --site learning.test install-app lms`.
|
||||
1. Now open the URL `http://learning.test:8000/lms` in your browser, you should see the app running
|
||||
|
||||
@@ -145,7 +162,8 @@ To setup the repository locally follow the steps mentioned below:
|
||||
- [Documentation](https://docs.frappe.io/learning)
|
||||
- [YouTube](https://www.youtube.com/channel/UCn3bV5kx77HsVwtnlCeEi_A)
|
||||
|
||||
<h2></h2>
|
||||
<br>
|
||||
<br>
|
||||
<div align="center" style="padding-top: 0.75rem;">
|
||||
<a href="https://frappe.io" target="_blank">
|
||||
<picture>
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
name: lms
|
||||
services:
|
||||
mariadb:
|
||||
image: mariadb:10.6
|
||||
image: mariadb:10.8
|
||||
command:
|
||||
- --character-set-server=utf8mb4
|
||||
- --collation-server=utf8mb4_unicode_ci
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
"@editorjs/simple-image": "^1.6.0",
|
||||
"@editorjs/table": "^2.4.2",
|
||||
"ace-builds": "^1.36.2",
|
||||
"apexcharts": "^4.3.0",
|
||||
"chart.js": "^4.4.1",
|
||||
"codemirror-editor-vue3": "^2.8.0",
|
||||
"dayjs": "^1.11.6",
|
||||
@@ -35,6 +36,7 @@
|
||||
"vue-chartjs": "^5.3.0",
|
||||
"vue-draggable-next": "^2.2.1",
|
||||
"vue-router": "^4.0.12",
|
||||
"vue3-apexcharts": "^1.8.0",
|
||||
"vuedraggable": "4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -185,6 +185,17 @@ const addQuizzes = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const addAssignments = () => {
|
||||
if (isInstructor.value || isModerator.value) {
|
||||
sidebarLinks.value.push({
|
||||
label: 'Assignments',
|
||||
icon: 'Pencil',
|
||||
to: 'Assignments',
|
||||
activeFor: ['Assignments', 'AssignmentForm'],
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const addPrograms = () => {
|
||||
let activeFor = ['Programs', 'ProgramForm']
|
||||
let index = 1
|
||||
@@ -247,8 +258,9 @@ watch(userResource, () => {
|
||||
if (userResource.data) {
|
||||
isModerator.value = userResource.data.is_moderator
|
||||
isInstructor.value = userResource.data.is_instructor
|
||||
addQuizzes()
|
||||
addPrograms()
|
||||
addQuizzes()
|
||||
addAssignments()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
75
frontend/src/components/AssessmentPlugin.vue
Normal file
@@ -0,0 +1,75 @@
|
||||
<template>
|
||||
<Dialog
|
||||
v-model="show"
|
||||
:options="{
|
||||
size: 'xl',
|
||||
}"
|
||||
>
|
||||
<template #body>
|
||||
<div class="p-5 space-y-4">
|
||||
<div v-if="type == 'quiz'" class="text-lg font-semibold">
|
||||
{{ __('Add a quiz to your lesson') }}
|
||||
</div>
|
||||
<div v-else class="text-lg font-semibold">
|
||||
{{ __('Add an assignment to your lesson') }}
|
||||
</div>
|
||||
<div>
|
||||
<Link
|
||||
v-if="type == 'quiz'"
|
||||
v-model="quiz"
|
||||
doctype="LMS Quiz"
|
||||
:label="__('Select a quiz')"
|
||||
:onCreate="(value, close) => redirectToForm()"
|
||||
/>
|
||||
<Link
|
||||
v-else
|
||||
v-model="assignment"
|
||||
doctype="LMS Assignment"
|
||||
:label="__('Select an assignment')"
|
||||
:onCreate="(value, close) => redirectToForm()"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex justify-end space-x-2">
|
||||
<Button variant="solid" @click="addAssessment()">
|
||||
{{ __('Save') }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { Dialog, Button } from 'frappe-ui'
|
||||
import { onMounted, ref, nextTick } from 'vue'
|
||||
import Link from '@/components/Controls/Link.vue'
|
||||
|
||||
const show = ref(false)
|
||||
const quiz = ref(null)
|
||||
const assignment = ref(null)
|
||||
|
||||
const props = defineProps({
|
||||
type: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
onAddition: {
|
||||
type: Function,
|
||||
required: true,
|
||||
},
|
||||
})
|
||||
|
||||
onMounted(async () => {
|
||||
await nextTick()
|
||||
show.value = true
|
||||
})
|
||||
|
||||
const addAssessment = () => {
|
||||
props.onAddition(props.type == 'quiz' ? quiz.value : assignment.value)
|
||||
show.value = false
|
||||
}
|
||||
|
||||
const redirectToForm = () => {
|
||||
if (props.type == 'quiz') window.open('/lms/quizzes/new', '_blank')
|
||||
else window.open('/lms/assignments/new', '_blank')
|
||||
}
|
||||
</script>
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="text-lg font-semibold mb-4">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<div class="text-lg font-semibold">
|
||||
{{ __('Assessments') }}
|
||||
</div>
|
||||
<Button v-if="canSeeAddButton()" @click="showModal = true">
|
||||
@@ -19,6 +19,7 @@
|
||||
:options="{
|
||||
showTooltip: false,
|
||||
getRowRoute: (row) => getRowRoute(row),
|
||||
selectable: user.data?.is_student ? false : true,
|
||||
}"
|
||||
>
|
||||
<ListHeader
|
||||
@@ -38,7 +39,18 @@
|
||||
<ListRow :row="row" v-for="row in assessments.data">
|
||||
<template #default="{ column, item }">
|
||||
<ListRowItem :item="row[column.key]" :align="column.align">
|
||||
<div>
|
||||
<div v-if="column.key == 'assessment_type'">
|
||||
{{ row[column.key] == 'LMS Quiz' ? 'Quiz' : 'Assignment' }}
|
||||
</div>
|
||||
<div v-else-if="column.key == 'title'">
|
||||
{{ row[column.key] }}
|
||||
</div>
|
||||
<div v-else-if="isNaN(row[column.key])">
|
||||
<Badge :theme="getStatusTheme(row[column.key])">
|
||||
{{ row[column.key] }}
|
||||
</Badge>
|
||||
</div>
|
||||
<div v-else>
|
||||
{{ row[column.key] }}
|
||||
</div>
|
||||
</ListRowItem>
|
||||
@@ -80,6 +92,7 @@ import {
|
||||
ListSelectBanner,
|
||||
createResource,
|
||||
Button,
|
||||
Badge,
|
||||
} from 'frappe-ui'
|
||||
import { inject, ref } from 'vue'
|
||||
import AssessmentModal from '@/components/Modals/AssessmentModal.vue'
|
||||
@@ -145,7 +158,7 @@ const getRowRoute = (row) => {
|
||||
return {
|
||||
name: 'AssignmentSubmission',
|
||||
params: {
|
||||
assignmentName: row.assessment_name,
|
||||
assignmentID: row.assessment_name,
|
||||
submissionName: row.submission.name,
|
||||
},
|
||||
}
|
||||
@@ -153,7 +166,7 @@ const getRowRoute = (row) => {
|
||||
return {
|
||||
name: 'AssignmentSubmission',
|
||||
params: {
|
||||
assignmentName: row.assessment_name,
|
||||
assignmentID: row.assessment_name,
|
||||
submissionName: 'new',
|
||||
},
|
||||
}
|
||||
@@ -177,20 +190,33 @@ const getAssessmentColumns = () => {
|
||||
{
|
||||
label: 'Assessment',
|
||||
key: 'title',
|
||||
width: '25rem',
|
||||
},
|
||||
{
|
||||
label: 'Type',
|
||||
key: 'assessment_type',
|
||||
width: '15rem',
|
||||
},
|
||||
]
|
||||
|
||||
if (!user.data?.is_moderator) {
|
||||
columns.push({
|
||||
label: 'Status/Score',
|
||||
label: 'Status/Percentage',
|
||||
key: 'status',
|
||||
align: 'center',
|
||||
align: 'left',
|
||||
width: '10rem',
|
||||
})
|
||||
}
|
||||
return columns
|
||||
}
|
||||
|
||||
const getStatusTheme = (status) => {
|
||||
if (status === 'Pass') {
|
||||
return 'green'
|
||||
} else if (status === 'Not Graded') {
|
||||
return 'orange'
|
||||
} else {
|
||||
return 'red'
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
448
frontend/src/components/Assignment.vue
Normal file
@@ -0,0 +1,448 @@
|
||||
<template>
|
||||
<div
|
||||
v-if="assignment.data"
|
||||
class="grid grid-cols-[68%,32%] h-full"
|
||||
:class="{ 'border rounded-lg': !showTitle }"
|
||||
>
|
||||
<div class="border-r p-5 overflow-y-auto h-[calc(100vh-3.2rem)]">
|
||||
<div v-if="showTitle" class="text-lg font-semibold mb-5">
|
||||
<div v-if="submissionName === 'new'">
|
||||
{{ __('Submission by') }} {{ user.data?.full_name }}
|
||||
</div>
|
||||
<div v-else>
|
||||
{{ __('Submission by') }} {{ submissionResource.doc?.member_name }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-sm text-gray-600 font-medium mb-2">
|
||||
{{ __('Question') }}:
|
||||
</div>
|
||||
<div
|
||||
v-html="assignment.data.question"
|
||||
class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-gray-300 prose-th:border-gray-300 prose-td:relative prose-th:relative prose-th:bg-gray-100 prose-sm max-w-none !whitespace-normal"
|
||||
></div>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col">
|
||||
<div class="p-5">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<div class="font-semibold">
|
||||
{{ __('Submission') }}
|
||||
</div>
|
||||
<div class="flex items-center space-x-2">
|
||||
<Badge v-if="isDirty" theme="orange">
|
||||
{{ __('Not Saved') }}
|
||||
</Badge>
|
||||
<Badge
|
||||
v-else-if="submissionResource.doc?.status"
|
||||
:theme="statusTheme"
|
||||
size="lg"
|
||||
>
|
||||
{{ submissionResource.doc?.status }}
|
||||
</Badge>
|
||||
<Button variant="solid" @click="submitAssignment()">
|
||||
{{ __('Save') }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
submissionName != 'new' &&
|
||||
!['Pass', 'Fail'].includes(submissionResource.doc?.status) &&
|
||||
submissionResource.doc?.owner == user.data?.name
|
||||
"
|
||||
class="bg-blue-100 p-3 rounded-md leading-5 text-sm mb-4"
|
||||
>
|
||||
{{ __("You've successfully submitted the assignment.") }}
|
||||
{{
|
||||
__(
|
||||
"Once the moderator grades your submission, you'll find the details here."
|
||||
)
|
||||
}}
|
||||
{{ __('Feel free to make edits to your submission if needed.') }}
|
||||
</div>
|
||||
<div v-if="showUploader()">
|
||||
<div class="text-xs text-gray-600 mt-1 mb-2">
|
||||
{{ __('Add your assignment as {0}').format(assignment.data.type) }}
|
||||
</div>
|
||||
<FileUploader
|
||||
v-if="!submissionFile"
|
||||
:fileTypes="getType()"
|
||||
:validateFile="validateFile"
|
||||
@success="(file) => saveSubmission(file)"
|
||||
>
|
||||
<template #default="{ uploading, progress, openFileSelector }">
|
||||
<Button @click="openFileSelector" :loading="uploading">
|
||||
{{
|
||||
uploading
|
||||
? __('Uploading {0}%').format(progress)
|
||||
: __('Upload File')
|
||||
}}
|
||||
</Button>
|
||||
</template>
|
||||
</FileUploader>
|
||||
<div v-else>
|
||||
<div class="flex items-center">
|
||||
<div class="border rounded-md p-2 mr-2">
|
||||
<FileText class="h-5 w-5 stroke-1.5 text-gray-700" />
|
||||
</div>
|
||||
<a
|
||||
:href="submissionFile.file_url"
|
||||
target="_blank"
|
||||
class="flex flex-col cursor-pointer !no-underline"
|
||||
>
|
||||
<span>
|
||||
{{ submissionFile.file_name }}
|
||||
</span>
|
||||
<span class="text-sm text-gray-500 mt-1">
|
||||
{{ getFileSize(submissionFile.file_size) }}
|
||||
</span>
|
||||
</a>
|
||||
<X
|
||||
v-if="canModifyAssignment"
|
||||
@click="removeSubmission()"
|
||||
class="bg-gray-200 rounded-md cursor-pointer stroke-1.5 w-5 h-5 p-1 ml-4"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="assignment.data.type == 'URL'">
|
||||
<div class="text-xs text-gray-600 mb-1">
|
||||
{{ __('Enter a URL') }}
|
||||
</div>
|
||||
<FormControl
|
||||
v-model="answer"
|
||||
type="text"
|
||||
:readonly="!canModifyAssignment"
|
||||
/>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div class="text-sm mb-4">
|
||||
{{ __('Write your answer here') }}
|
||||
</div>
|
||||
<TextEditor
|
||||
:content="answer"
|
||||
@change="(val) => (answer = val)"
|
||||
:editable="true"
|
||||
:fixedMenu="true"
|
||||
editorClass="prose-sm max-w-none border-b border-x bg-gray-100 rounded-b-md py-1 px-2 min-h-[7rem]"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="
|
||||
user.data?.name == submissionResource.doc?.owner &&
|
||||
submissionResource.doc?.comments
|
||||
"
|
||||
class="mt-8 p-3 bg-blue-100 rounded-md"
|
||||
>
|
||||
<div class="text-sm text-gray-600 font-medium mb-2">
|
||||
{{ __('Comments by Evaluator') }}:
|
||||
</div>
|
||||
<div class="leading-5">
|
||||
{{ submissionResource.doc.comments }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Grading -->
|
||||
<div v-if="canGradeSubmission" class="mt-8 space-y-4">
|
||||
<div class="font-semibold mb-2">
|
||||
{{ __('Grading') }}
|
||||
</div>
|
||||
<FormControl
|
||||
v-if="submissionResource.doc"
|
||||
v-model="submissionResource.doc.status"
|
||||
:label="__('Grade')"
|
||||
type="select"
|
||||
:options="submissionStatusOptions"
|
||||
/>
|
||||
<FormControl
|
||||
v-if="submissionResource.doc"
|
||||
v-model="submissionResource.doc.comments"
|
||||
:label="__('Comments')"
|
||||
type="textarea"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
Badge,
|
||||
Button,
|
||||
call,
|
||||
createResource,
|
||||
createDocumentResource,
|
||||
FileUploader,
|
||||
FormControl,
|
||||
TextEditor,
|
||||
} from 'frappe-ui'
|
||||
import { computed, inject, onMounted, onBeforeUnmount, ref, watch } from 'vue'
|
||||
import { FileText, X } from 'lucide-vue-next'
|
||||
import { showToast, getFileSize } from '@/utils'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const submissionFile = ref(null)
|
||||
const answer = ref(null)
|
||||
const router = useRouter()
|
||||
const user = inject('$user')
|
||||
const showTitle = router.currentRoute.value.name == 'AssignmentSubmission'
|
||||
const isDirty = ref(false)
|
||||
|
||||
const props = defineProps({
|
||||
assignmentID: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
submissionName: {
|
||||
type: String,
|
||||
default: 'new',
|
||||
},
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
window.addEventListener('keydown', keyboardShortcut)
|
||||
})
|
||||
|
||||
const keyboardShortcut = (e) => {
|
||||
if (e.key === 's' && (e.ctrlKey || e.metaKey)) {
|
||||
submitAssignment()
|
||||
e.preventDefault()
|
||||
}
|
||||
}
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
window.removeEventListener('keydown', keyboardShortcut)
|
||||
})
|
||||
|
||||
const assignment = createResource({
|
||||
url: 'frappe.client.get',
|
||||
params: {
|
||||
doctype: 'LMS Assignment',
|
||||
name: props.assignmentID,
|
||||
},
|
||||
auto: true,
|
||||
onSuccess(data) {
|
||||
if (props.submissionName != 'new') {
|
||||
submissionResource.reload()
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
const newSubmission = createResource({
|
||||
url: 'frappe.client.insert',
|
||||
makeParams(values) {
|
||||
let doc = {
|
||||
doctype: 'LMS Assignment Submission',
|
||||
assignment: props.assignmentID,
|
||||
member: user.data?.name,
|
||||
}
|
||||
if (showUploader()) {
|
||||
doc.assignment_attachment = submissionFile.value.file_url
|
||||
} else {
|
||||
doc.answer = answer.value
|
||||
}
|
||||
return {
|
||||
doc: doc,
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
const imageResource = createResource({
|
||||
url: 'lms.lms.api.get_file_info',
|
||||
makeParams(values) {
|
||||
return {
|
||||
file_url: values.image,
|
||||
}
|
||||
},
|
||||
auto: false,
|
||||
onSuccess(data) {
|
||||
submissionFile.value = data
|
||||
},
|
||||
})
|
||||
|
||||
const submissionResource = createDocumentResource({
|
||||
doctype: 'LMS Assignment Submission',
|
||||
name: props.submissionName,
|
||||
onError(err) {
|
||||
showToast(__('Error'), __(err.messages?.[0] || err), 'x')
|
||||
},
|
||||
auto: false,
|
||||
cache: [user.data?.name, props.assignmentID],
|
||||
})
|
||||
|
||||
watch(submissionResource, () => {
|
||||
if (submissionResource.doc) {
|
||||
if (submissionResource.doc.assignment_attachment) {
|
||||
imageResource.reload({
|
||||
image: submissionResource.doc.assignment_attachment,
|
||||
})
|
||||
}
|
||||
if (submissionResource.doc.answer) {
|
||||
answer.value = submissionResource.doc.answer
|
||||
}
|
||||
|
||||
if (submissionResource.isDirty) {
|
||||
isDirty.value = true
|
||||
} else if (showUploader() && !submissionFile.value) {
|
||||
isDirty.value = true
|
||||
} else if (!showUploader() && !answer.value) {
|
||||
isDirty.value = true
|
||||
} else {
|
||||
isDirty.value = false
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
watch(submissionFile, () => {
|
||||
if (props.submissionName == 'new' && submissionFile.value) {
|
||||
isDirty.value = true
|
||||
}
|
||||
})
|
||||
|
||||
const submitAssignment = () => {
|
||||
if (props.submissionName != 'new') {
|
||||
let evaluator =
|
||||
submissionResource.doc && submissionResource.doc.owner != user.data?.name
|
||||
? user.data?.name
|
||||
: null
|
||||
submissionResource.setValue.submit(
|
||||
{
|
||||
...submissionResource.doc,
|
||||
evaluator: evaluator,
|
||||
},
|
||||
{
|
||||
onSuccess(data) {
|
||||
showToast(__('Success'), __('Changes saved successfully'), 'check')
|
||||
},
|
||||
}
|
||||
)
|
||||
} else {
|
||||
addNewSubmission()
|
||||
}
|
||||
}
|
||||
|
||||
const addNewSubmission = () => {
|
||||
newSubmission.submit(
|
||||
{},
|
||||
{
|
||||
onSuccess(data) {
|
||||
showToast('Success', 'Assignment submitted successfully.', 'check')
|
||||
if (router.currentRoute.value.name == 'AssignmentSubmission') {
|
||||
router.push({
|
||||
name: 'AssignmentSubmission',
|
||||
params: {
|
||||
assignmentID: props.assignmentID,
|
||||
submissionName: data.name,
|
||||
},
|
||||
})
|
||||
} else {
|
||||
markLessonProgress()
|
||||
router.go()
|
||||
}
|
||||
submissionResource.name = data.name
|
||||
submissionResource.reload()
|
||||
},
|
||||
onError(err) {
|
||||
showToast('Error', err.messages?.[0] || err, 'x')
|
||||
},
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
const saveSubmission = (file) => {
|
||||
submissionFile.value = file
|
||||
}
|
||||
|
||||
const markLessonProgress = () => {
|
||||
if (router.currentRoute.value.name == 'Lesson') {
|
||||
let courseName = router.currentRoute.value.params.courseName
|
||||
let chapterNumber = router.currentRoute.value.params.chapterNumber
|
||||
let lessonNumber = router.currentRoute.value.params.lessonNumber
|
||||
|
||||
call('lms.lms.api.mark_lesson_progress', {
|
||||
course: courseName,
|
||||
chapter_number: chapterNumber,
|
||||
lesson_number: lessonNumber,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const getType = () => {
|
||||
const type = assignment.data?.type
|
||||
if (type == 'Image') {
|
||||
return ['image/*']
|
||||
} else if (type == 'Document') {
|
||||
return [
|
||||
'.doc',
|
||||
'.docx',
|
||||
'.xml',
|
||||
'application/msword',
|
||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||
]
|
||||
} else if (type == 'PDF') {
|
||||
return ['.pdf']
|
||||
}
|
||||
}
|
||||
|
||||
const validateFile = (file) => {
|
||||
let type = assignment.data?.type
|
||||
let extension = file.name.split('.').pop().toLowerCase()
|
||||
if (type == 'Image' && !['jpg', 'jpeg', 'png'].includes(extension)) {
|
||||
return 'Only image file is allowed.'
|
||||
} else if (
|
||||
type == 'Document' &&
|
||||
!['doc', 'docx', 'xml'].includes(extension)
|
||||
) {
|
||||
return 'Only document file is allowed.'
|
||||
} else if (type == 'PDF' && !['pdf'].includes(extension)) {
|
||||
return 'Only PDF file is allowed.'
|
||||
}
|
||||
}
|
||||
|
||||
const removeSubmission = () => {
|
||||
submissionFile.value = null
|
||||
}
|
||||
|
||||
const canGradeSubmission = computed(() => {
|
||||
return (
|
||||
(user.data?.is_moderator ||
|
||||
user.data?.is_evaluator ||
|
||||
user.data?.is_instructor) &&
|
||||
props.submissionName != 'new' &&
|
||||
router.currentRoute.value.name == 'AssignmentSubmission'
|
||||
)
|
||||
})
|
||||
|
||||
const canModifyAssignment = computed(() => {
|
||||
return (
|
||||
!submissionResource.doc ||
|
||||
(submissionResource.doc?.owner == user.data?.name &&
|
||||
submissionResource.doc?.status == 'Not Graded')
|
||||
)
|
||||
})
|
||||
|
||||
const submissionStatusOptions = computed(() => {
|
||||
return [
|
||||
{ label: 'Not Graded', value: 'Not Graded' },
|
||||
{ label: 'Pass', value: 'Pass' },
|
||||
{ label: 'Fail', value: 'Fail' },
|
||||
]
|
||||
})
|
||||
|
||||
const statusTheme = computed(() => {
|
||||
if (!submissionResource.doc) {
|
||||
return 'orange'
|
||||
} else if (submissionResource.doc.status == 'Pass') {
|
||||
return 'green'
|
||||
} else if (submissionResource.doc.status == 'Not Graded') {
|
||||
return 'blue'
|
||||
} else {
|
||||
return 'red'
|
||||
}
|
||||
})
|
||||
|
||||
const showUploader = () => {
|
||||
return ['PDF', 'Image', 'Document'].includes(assignment.data?.type)
|
||||
}
|
||||
</script>
|
||||
46
frontend/src/components/AssignmentBlock.vue
Normal file
@@ -0,0 +1,46 @@
|
||||
<template>
|
||||
<Assignment
|
||||
v-if="user.data && submission.data"
|
||||
:assignmentID="assignmentID"
|
||||
:submissionName="submission.data?.name || 'new'"
|
||||
/>
|
||||
<div v-else class="border rounded-md text-center py-20">
|
||||
<div>
|
||||
{{ __('Please login to access the assignment.') }}
|
||||
</div>
|
||||
<Button @click="redirectToLogin()" class="mt-2">
|
||||
<span>
|
||||
{{ __('Login') }}
|
||||
</span>
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { inject, watch } from 'vue'
|
||||
import { Button, createResource } from 'frappe-ui'
|
||||
import Assignment from '@/components/Assignment.vue'
|
||||
|
||||
const user = inject('$user')
|
||||
|
||||
const props = defineProps({
|
||||
assignmentID: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
})
|
||||
|
||||
const submission = createResource({
|
||||
url: 'frappe.client.get_value',
|
||||
makeParams(values) {
|
||||
return {
|
||||
doctype: 'LMS Assignment Submission',
|
||||
fieldname: 'name',
|
||||
filters: {
|
||||
assignment: props.assignmentID,
|
||||
member: user.data?.name,
|
||||
},
|
||||
}
|
||||
},
|
||||
auto: true,
|
||||
})
|
||||
</script>
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<div class="text-xl font-semibold">
|
||||
<div class="text-lg font-semibold">
|
||||
{{ __('Courses') }}
|
||||
</div>
|
||||
<Button v-if="canSeeAddButton()" @click="openCourseModal()">
|
||||
@@ -118,13 +118,13 @@ const getCoursesColumns = () => {
|
||||
},
|
||||
{
|
||||
label: 'Lessons',
|
||||
key: 'lesson_count',
|
||||
key: 'lessons',
|
||||
align: 'right',
|
||||
},
|
||||
{
|
||||
label: 'Enrollments',
|
||||
align: 'right',
|
||||
key: 'enrollment_count',
|
||||
key: 'enrollments',
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,80 +1,199 @@
|
||||
<template>
|
||||
<Button class="float-right mb-3" @click="openStudentModal()">
|
||||
<template #prefix>
|
||||
<Plus class="h-4 w-4" />
|
||||
</template>
|
||||
{{ __('Add') }}
|
||||
</Button>
|
||||
<div class="text-lg font-semibold mb-4">
|
||||
{{ __('Students') }}
|
||||
</div>
|
||||
<div v-if="students.data?.length">
|
||||
<ListView
|
||||
:columns="getStudentColumns()"
|
||||
:rows="students.data"
|
||||
row-key="name"
|
||||
:options="{ showTooltip: false }"
|
||||
>
|
||||
<ListHeader
|
||||
class="mb-2 grid items-center space-x-4 rounded bg-gray-100 p-2"
|
||||
<div class="">
|
||||
<div class="w-full flex items-center justify-between pb-4">
|
||||
<div class="font-medium text-gray-600">
|
||||
{{ __('Statistics') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-3 gap-5 mb-8">
|
||||
<div class="flex items-center shadow py-2 px-3 rounded-md">
|
||||
<div class="p-2 rounded-md bg-gray-100 mr-3">
|
||||
<User class="w-18 h-18 stroke-1.5 text-gray-700" />
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<span class="text-xl font-semibold mb-1">
|
||||
{{ students.data?.length }}
|
||||
</span>
|
||||
<span class="text-gray-700">
|
||||
{{ __('Students') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center shadow py-2 px-3 rounded-md">
|
||||
<div class="p-2 rounded-md bg-gray-100 mr-3">
|
||||
<BookOpen class="w-18 h-18 stroke-1.5 text-gray-700" />
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<span class="text-xl font-semibold mb-1">
|
||||
{{ batch.courses?.length }}
|
||||
</span>
|
||||
<span class="text-gray-700">
|
||||
{{ __('Courses') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center shadow py-2 px-3 rounded-md">
|
||||
<div class="p-2 rounded-md bg-gray-100 mr-3">
|
||||
<ShieldCheck class="w-18 h-18 stroke-1.5 text-gray-700" />
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<span class="text-xl font-semibold mb-1">
|
||||
{{ assessmentCount }}
|
||||
</span>
|
||||
<span class="text-gray-700">
|
||||
{{ __('Assessments') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-8">
|
||||
<div class="text-gray-600 font-medium">
|
||||
{{ __('Progress') }}
|
||||
</div>
|
||||
<ApexChart
|
||||
v-if="showProgressChart"
|
||||
:options="chartOptions"
|
||||
:series="chartData"
|
||||
type="bar"
|
||||
height="350"
|
||||
/>
|
||||
<div
|
||||
class="flex items-center justify-center text-sm text-gray-700 space-x-4"
|
||||
>
|
||||
<ListHeaderItem :item="item" v-for="item in getStudentColumns()">
|
||||
<template #prefix="{ item }">
|
||||
<component
|
||||
v-if="item.icon"
|
||||
:is="item.icon"
|
||||
class="h-4 w-4 stroke-1.5 ml-4"
|
||||
/>
|
||||
</template>
|
||||
</ListHeaderItem>
|
||||
</ListHeader>
|
||||
<ListRows>
|
||||
<ListRow :row="row" v-for="row in students.data">
|
||||
<template #default="{ column, item }">
|
||||
<ListRowItem :item="row[column.key]" :align="column.align">
|
||||
<template #prefix>
|
||||
<div v-if="column.key == 'full_name'">
|
||||
<Avatar
|
||||
class="flex items-center"
|
||||
:image="row['user_image']"
|
||||
:label="item"
|
||||
size="sm"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<div>
|
||||
{{ row[column.key] }}
|
||||
</div>
|
||||
</ListRowItem>
|
||||
</template>
|
||||
</ListRow>
|
||||
</ListRows>
|
||||
<ListSelectBanner>
|
||||
<template #actions="{ unselectAll, selections }">
|
||||
<div class="flex gap-2">
|
||||
<Button
|
||||
variant="ghost"
|
||||
@click="removeStudents(selections, unselectAll)"
|
||||
>
|
||||
<Trash2 class="h-4 w-4 stroke-1.5" />
|
||||
</Button>
|
||||
<div class="flex items-center space-x-2">
|
||||
<div class="w-3 h-3" style="background-color: #0f736b"></div>
|
||||
<div>
|
||||
{{ __('Courses') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center space-x-2">
|
||||
<div class="w-3 h-3" style="background-color: #0070cc"></div>
|
||||
<div>
|
||||
{{ __('Assessments') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<div class="text-gray-600 font-medium">
|
||||
{{ __('Students') }}
|
||||
</div>
|
||||
<Button @click="openStudentModal()">
|
||||
<template #prefix>
|
||||
<Plus class="h-4 w-4" />
|
||||
</template>
|
||||
</ListSelectBanner>
|
||||
</ListView>
|
||||
</div>
|
||||
<div v-else class="text-sm italic text-gray-600">
|
||||
{{ __('There are no students in this batch.') }}
|
||||
{{ __('Add') }}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div v-if="students.data?.length">
|
||||
<ListView
|
||||
:columns="getStudentColumns()"
|
||||
:rows="students.data"
|
||||
row-key="name"
|
||||
:options="{
|
||||
showTooltip: false,
|
||||
}"
|
||||
>
|
||||
<ListHeader
|
||||
class="mb-2 grid items-center space-x-4 rounded bg-gray-100 p-2"
|
||||
>
|
||||
<ListHeaderItem
|
||||
:item="item"
|
||||
v-for="item in getStudentColumns()"
|
||||
:title="item.label"
|
||||
>
|
||||
<template #prefix="{ item }">
|
||||
<FeatherIcon
|
||||
v-if="item.icon"
|
||||
:name="item.icon"
|
||||
class="h-4 w-4 stroke-1.5"
|
||||
/>
|
||||
</template>
|
||||
</ListHeaderItem>
|
||||
</ListHeader>
|
||||
<ListRows>
|
||||
<ListRow
|
||||
:row="row"
|
||||
v-for="row in students.data"
|
||||
class="group cursor-pointer"
|
||||
@click="openStudentProgressModal(row)"
|
||||
>
|
||||
<template #default="{ column, item }">
|
||||
<ListRowItem :item="row[column.key]" :align="column.align">
|
||||
<template #prefix>
|
||||
<div v-if="column.key == 'full_name'">
|
||||
<Avatar
|
||||
class="flex items-center"
|
||||
:image="row['user_image']"
|
||||
:label="item"
|
||||
size="sm"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<div
|
||||
v-if="column.key == 'progress'"
|
||||
class="flex items-center space-x-4 w-full"
|
||||
>
|
||||
<ProgressBar :progress="row[column.key]" size="sm" />
|
||||
</div>
|
||||
<div
|
||||
v-else-if="column.key == 'copy'"
|
||||
class="invisible group-hover:visible"
|
||||
>
|
||||
<Button variant="ghost" @click="copyEmail(row)">
|
||||
<template #icon>
|
||||
<Clipboard class="h-4 w-4 stroke-1.5" />
|
||||
</template>
|
||||
</Button>
|
||||
</div>
|
||||
<div v-else>
|
||||
{{ row[column.key] }}
|
||||
</div>
|
||||
</ListRowItem>
|
||||
</template>
|
||||
</ListRow>
|
||||
</ListRows>
|
||||
<ListSelectBanner>
|
||||
<template #actions="{ unselectAll, selections }">
|
||||
<div class="flex gap-2">
|
||||
<Button
|
||||
variant="ghost"
|
||||
@click="removeStudents(selections, unselectAll)"
|
||||
>
|
||||
<Trash2 class="h-4 w-4 stroke-1.5" />
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</ListSelectBanner>
|
||||
</ListView>
|
||||
</div>
|
||||
<div v-else class="text-sm italic text-gray-600">
|
||||
{{ __('There are no students in this batch.') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<StudentModal
|
||||
:batch="props.batch"
|
||||
:batch="props.batch.name"
|
||||
v-model="showStudentModal"
|
||||
v-model:reloadStudents="students"
|
||||
/>
|
||||
<BatchStudentProgress
|
||||
:student="selectedStudent"
|
||||
v-model="showStudentProgressModal"
|
||||
/>
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
Avatar,
|
||||
Button,
|
||||
createResource,
|
||||
FeatherIcon,
|
||||
ListHeader,
|
||||
ListHeaderItem,
|
||||
ListSelectBanner,
|
||||
@@ -82,60 +201,89 @@ import {
|
||||
ListRows,
|
||||
ListView,
|
||||
ListRowItem,
|
||||
Avatar,
|
||||
Button,
|
||||
} from 'frappe-ui'
|
||||
import { Trash2, Plus } from 'lucide-vue-next'
|
||||
import { ref } from 'vue'
|
||||
import {
|
||||
BookOpen,
|
||||
Clipboard,
|
||||
Plus,
|
||||
ShieldCheck,
|
||||
Trash2,
|
||||
User,
|
||||
} from 'lucide-vue-next'
|
||||
import { ref, watch } from 'vue'
|
||||
import StudentModal from '@/components/Modals/StudentModal.vue'
|
||||
import { showToast } from '@/utils'
|
||||
import ProgressBar from '@/components/ProgressBar.vue'
|
||||
import BatchStudentProgress from '@/components/Modals/BatchStudentProgress.vue'
|
||||
import ApexChart from 'vue3-apexcharts'
|
||||
|
||||
const showStudentModal = ref(false)
|
||||
const showStudentProgressModal = ref(false)
|
||||
const selectedStudent = ref(null)
|
||||
const chartData = ref(null)
|
||||
const chartOptions = ref(null)
|
||||
const showProgressChart = ref(false)
|
||||
const assessmentCount = ref(0)
|
||||
|
||||
const props = defineProps({
|
||||
batch: {
|
||||
type: String,
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
})
|
||||
|
||||
const students = createResource({
|
||||
url: 'lms.lms.utils.get_batch_students',
|
||||
cache: ['students', props.batch],
|
||||
cache: ['students', props.batch.name],
|
||||
params: {
|
||||
batch: props.batch,
|
||||
batch: props.batch?.name,
|
||||
},
|
||||
auto: true,
|
||||
onSuccess(data) {
|
||||
chartData.value = getChartData()
|
||||
showProgressChart.value = true
|
||||
},
|
||||
})
|
||||
|
||||
const getStudentColumns = () => {
|
||||
return [
|
||||
let columns = [
|
||||
{
|
||||
label: 'Full Name',
|
||||
key: 'full_name',
|
||||
width: 2,
|
||||
width: '20rem',
|
||||
icon: 'user',
|
||||
},
|
||||
{
|
||||
label: 'Courses Done',
|
||||
key: 'courses_completed',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
label: 'Assessments Done',
|
||||
key: 'assessments_completed',
|
||||
align: 'center',
|
||||
label: 'Progress',
|
||||
key: 'progress',
|
||||
width: '10rem',
|
||||
icon: 'activity',
|
||||
},
|
||||
{
|
||||
label: 'Last Active',
|
||||
key: 'last_active',
|
||||
width: '15rem',
|
||||
align: 'center',
|
||||
icon: 'clock',
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
key: 'copy',
|
||||
},
|
||||
]
|
||||
|
||||
return columns
|
||||
}
|
||||
|
||||
const openStudentModal = () => {
|
||||
showStudentModal.value = true
|
||||
}
|
||||
|
||||
const openStudentProgressModal = (row) => {
|
||||
showStudentProgressModal.value = true
|
||||
selectedStudent.value = row
|
||||
}
|
||||
|
||||
const deleteStudents = createResource({
|
||||
url: 'lms.lms.api.delete_documents',
|
||||
makeParams(values) {
|
||||
@@ -160,4 +308,110 @@ const removeStudents = (selections, unselectAll) => {
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
const getChartData = () => {
|
||||
let categories = {}
|
||||
|
||||
Object.keys(students.data?.[0].courses).forEach((course) => {
|
||||
categories[course] = {
|
||||
value: 0,
|
||||
type: 'course',
|
||||
label: course,
|
||||
}
|
||||
})
|
||||
|
||||
Object.keys(students.data?.[0].assessments).forEach((assessment) => {
|
||||
categories[assessment] = {
|
||||
value: 0,
|
||||
type: 'assessment',
|
||||
label: assessment,
|
||||
}
|
||||
})
|
||||
|
||||
students.data.forEach((student) => {
|
||||
Object.keys(student.courses).forEach((course) => {
|
||||
if (student.courses[course] === 100) {
|
||||
categories[course].value += 1
|
||||
}
|
||||
})
|
||||
|
||||
Object.keys(student.assessments).forEach((assessment) => {
|
||||
if (student.assessments[assessment] === 100) {
|
||||
categories[assessment].value += 1
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
chartOptions.value = getChartOptions(categories)
|
||||
return [
|
||||
{
|
||||
name: __('Completed by Students'),
|
||||
data: Object.values(categories).map((item) => item.value),
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
const getChartOptions = (categories) => {
|
||||
const courseColor = '#0F736B'
|
||||
const assessmentColor = '#0070CC'
|
||||
const maxY =
|
||||
students.data?.length % 5
|
||||
? students.data?.length + (5 - (students.data?.length % 5))
|
||||
: students.data?.length
|
||||
|
||||
return {
|
||||
chart: {
|
||||
type: 'bar',
|
||||
height: 50,
|
||||
toolbar: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
plotOptions: {
|
||||
bar: {
|
||||
distributed: true,
|
||||
borderRadius: 0,
|
||||
horizontal: true,
|
||||
barHeight: '30%',
|
||||
},
|
||||
},
|
||||
colors: Object.values(categories).map((item) =>
|
||||
item.type === 'course' ? courseColor : assessmentColor
|
||||
),
|
||||
xaxis: {
|
||||
categories: Object.values(categories).map((item) => item.label),
|
||||
labels: {
|
||||
style: {
|
||||
fontSize: '10px',
|
||||
},
|
||||
rotate: 0,
|
||||
formatter: function (value) {
|
||||
return value.length > 20 ? `${value.substring(0, 20)}...` : value // Trim long labels
|
||||
},
|
||||
},
|
||||
},
|
||||
yaxis: {
|
||||
max: maxY,
|
||||
min: 0,
|
||||
stepSize: 10,
|
||||
tickAmount: maxY / 5,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
const copyEmail = (row) => {
|
||||
navigator.clipboard.writeText(row.email)
|
||||
showToast(__('Success'), __('Email copied to clipboard'), 'check')
|
||||
}
|
||||
|
||||
watch(students, () => {
|
||||
if (students.data?.length) {
|
||||
assessmentCount.value = Object.keys(students.data?.[0].assessments).length
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<style>
|
||||
.apexcharts-legend {
|
||||
display: none !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
<slot name="item-label" v-bind="{ active, selected, option }" />
|
||||
</template>
|
||||
|
||||
<template v-if="attrs.onCreate" #footer="{ value, close }">
|
||||
<div>
|
||||
<template #footer="{ value, close }">
|
||||
<div v-if="attrs.onCreate">
|
||||
<Button
|
||||
variant="ghost"
|
||||
class="w-full !justify-start"
|
||||
@@ -42,6 +42,18 @@
|
||||
</template>
|
||||
</Button>
|
||||
</div>
|
||||
<div>
|
||||
<Button
|
||||
variant="ghost"
|
||||
class="w-full !justify-start"
|
||||
:label="__('Clear')"
|
||||
@click="() => clearValue(close)"
|
||||
>
|
||||
<template #prefix>
|
||||
<X class="h-4 w-4 stroke-1.5" />
|
||||
</template>
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</Autocomplete>
|
||||
<p v-if="description" class="text-sm text-gray-600">{{ description }}</p>
|
||||
@@ -52,7 +64,7 @@
|
||||
import Autocomplete from '@/components/Controls/Autocomplete.vue'
|
||||
import { watchDebounced } from '@vueuse/core'
|
||||
import { createResource, Button } from 'frappe-ui'
|
||||
import { Plus } from 'lucide-vue-next'
|
||||
import { Plus, X } from 'lucide-vue-next'
|
||||
import { useAttrs, computed, ref } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
@@ -75,9 +87,7 @@ const props = defineProps({
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:modelValue', 'change'])
|
||||
|
||||
const attrs = useAttrs()
|
||||
|
||||
const valuePropPassed = computed(() => 'value' in attrs)
|
||||
|
||||
const value = computed({
|
||||
@@ -131,7 +141,7 @@ const options = createResource({
|
||||
},
|
||||
})
|
||||
|
||||
function reload(val) {
|
||||
const reload = (val) => {
|
||||
options.update({
|
||||
params: {
|
||||
txt: val,
|
||||
@@ -142,6 +152,11 @@ function reload(val) {
|
||||
options.reload()
|
||||
}
|
||||
|
||||
const clearValue = (close) => {
|
||||
emit(valuePropPassed.value ? 'change' : 'update:modelValue', '')
|
||||
close()
|
||||
}
|
||||
|
||||
const labelClasses = computed(() => {
|
||||
return [
|
||||
{
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
|
||||
<div v-if="course.status != 'Approved'">
|
||||
<Badge
|
||||
variant="solid"
|
||||
variant="subtle"
|
||||
:theme="course.status === 'Under Review' ? 'orange' : 'blue'"
|
||||
size="sm"
|
||||
>
|
||||
|
||||
@@ -87,25 +87,29 @@
|
||||
</span>
|
||||
</Button>
|
||||
</router-link>
|
||||
<div class="mt-8 mb-4 font-medium">
|
||||
{{ __('This course has:') }}
|
||||
</div>
|
||||
<div class="flex items-center mb-3">
|
||||
<BookOpen class="h-5 w-5 stroke-1.5 text-gray-600" />
|
||||
<span class="ml-2">
|
||||
{{ course.data.lessons }} {{ __('Lessons') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex items-center mb-3">
|
||||
<Users class="h-5 w-5 stroke-1.5 text-gray-600" />
|
||||
<span class="ml-2">
|
||||
{{ formatAmount(course.data.enrollments) }}
|
||||
{{ __('Enrolled Students') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<Star class="h-5 w-5 stroke-1.5 fill-orange-500 text-gray-50" />
|
||||
<span class="ml-2"> {{ course.data.rating }} {{ __('Rating') }} </span>
|
||||
<div class="space-y-4">
|
||||
<div class="mt-8 font-medium">
|
||||
{{ __('This course has:') }}
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<BookOpen class="h-4 w-4 stroke-1.5 text-gray-600" />
|
||||
<span class="ml-2">
|
||||
{{ course.data.lessons }} {{ __('Lessons') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<Users class="h-4 w-4 stroke-1.5 text-gray-600" />
|
||||
<span class="ml-2">
|
||||
{{ formatAmount(course.data.enrollments) }}
|
||||
{{ __('Enrolled Students') }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="parseInt(course.data.rating) > 0" class="flex items-center">
|
||||
<Star class="h-4 w-4 stroke-1.5 fill-orange-500 text-gray-50" />
|
||||
<span class="ml-2">
|
||||
{{ course.data.rating }} {{ __('Rating') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
<template>
|
||||
<div class="space-y-5">
|
||||
<div class="space-y-2">
|
||||
<div class="flex items-center text-sm font-medium space-x-2">
|
||||
<span>
|
||||
{{ __('What does include in preview mean?') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-xs text-gray-600 mb-1 leading-5">
|
||||
{{
|
||||
__(
|
||||
'If Include in Preview is enabled for a lesson then the lesson will also be accessible to non logged in users.'
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="space-y-2">
|
||||
<div
|
||||
class="flex items-center text-sm font-medium space-x-2 cursor-pointer"
|
||||
@@ -56,21 +71,6 @@
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="space-y-2">
|
||||
<div class="flex items-center text-sm font-medium space-x-2">
|
||||
<span>
|
||||
{{ __('What does include in preview mean?') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-xs text-gray-600 mb-1 leading-5">
|
||||
{{
|
||||
__(
|
||||
'If Include in Preview is enabled for a lesson then the lesson will also be accessible to non logged in users.'
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ExplanationVideos v-model="showExplanation" :title="title" :type="type" />
|
||||
</template>
|
||||
|
||||
113
frontend/src/components/Modals/BatchStudentProgress.vue
Normal file
@@ -0,0 +1,113 @@
|
||||
<template>
|
||||
<Dialog v-model="show" :options="{}">
|
||||
<template #body>
|
||||
<div class="p-5 space-y-8 text-base">
|
||||
<div class="flex items-center space-x-2">
|
||||
<Avatar :image="student.user_image" size="3xl" />
|
||||
<div class="space-y-1">
|
||||
<div class="flex items-center space-x-2">
|
||||
<div class="text-xl font-semibold">
|
||||
{{ student.full_name }}
|
||||
</div>
|
||||
<Badge :theme="student.progress === 100 ? 'green' : 'red'">
|
||||
{{ student.progress }}% {{ __('Complete') }}
|
||||
</Badge>
|
||||
</div>
|
||||
<div class="text-sm text-gray-700">
|
||||
{{ student.email }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Assessments -->
|
||||
<div>
|
||||
<div>
|
||||
<div
|
||||
class="grid grid-cols-[70%,30%] border-b pl-2 pb-1 mb-2 text-xs text-gray-700 font-medium"
|
||||
>
|
||||
<span>
|
||||
{{ __('Assessment') }}
|
||||
</span>
|
||||
<span>
|
||||
{{ __('Progress') }}
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
v-for="assessment in Object.keys(student.assessments)"
|
||||
class="grid grid-cols-[70%,30%] pl-2 mb-2 text-gray-700 font-medium"
|
||||
>
|
||||
<span>
|
||||
{{ assessment }}
|
||||
</span>
|
||||
<span v-if="isAssignment(student.assessments[assessment])">
|
||||
<Badge :theme="getStatusTheme(student.assessments[assessment])">
|
||||
{{ student.assessments[assessment] }}
|
||||
</Badge>
|
||||
</span>
|
||||
<span v-else>
|
||||
{{ student.assessments[assessment] }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Courses -->
|
||||
<div>
|
||||
<div>
|
||||
<div
|
||||
class="grid grid-cols-[70%,30%] mb-2 text-xs text-gray-700 border-b pl-2 pb-1 font-medium"
|
||||
>
|
||||
<span>
|
||||
{{ __('Courses') }}
|
||||
</span>
|
||||
<span>
|
||||
{{ __('Progress') }}
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
v-for="course in Object.keys(student.courses)"
|
||||
class="grid grid-cols-[70%,30%] pl-2 mb-2 text-gray-700 font-medium"
|
||||
>
|
||||
<span>
|
||||
{{ course }}
|
||||
</span>
|
||||
<span>
|
||||
{{ Math.floor(student.courses[course]) }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <span class="mt-4">
|
||||
{{ student }}
|
||||
</span> -->
|
||||
</div>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { Avatar, Badge, Dialog } from 'frappe-ui'
|
||||
import ProgressBar from '@/components/ProgressBar.vue'
|
||||
|
||||
const show = defineModel()
|
||||
const props = defineProps({
|
||||
student: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
})
|
||||
|
||||
const isAssignment = (value) => {
|
||||
return isNaN(value)
|
||||
}
|
||||
|
||||
const getStatusTheme = (status) => {
|
||||
if (status === 'Pass') {
|
||||
return 'green'
|
||||
} else if (status == 'Not Graded') {
|
||||
return 'orange'
|
||||
} else {
|
||||
return 'red'
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -26,7 +26,7 @@ const props = defineProps({
|
||||
required: true,
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
type: [String, null],
|
||||
required: true,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
import { Dialog, createResource } from 'frappe-ui'
|
||||
import { ref } from 'vue'
|
||||
import Link from '@/components/Controls/Link.vue'
|
||||
import { showToast } from '@/utils'
|
||||
|
||||
const students = defineModel('reloadStudents')
|
||||
const student = ref()
|
||||
@@ -61,8 +62,11 @@ const addStudent = (close) => {
|
||||
{
|
||||
onSuccess() {
|
||||
students.value.reload()
|
||||
close()
|
||||
student.value = null
|
||||
close()
|
||||
},
|
||||
onError(err) {
|
||||
showToast(__('Error'), __(err.messages?.[0] || err), 'x')
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,24 +1,44 @@
|
||||
<template>
|
||||
<div class="w-full bg-gray-200 rounded-full h-1 my-2">
|
||||
<div
|
||||
class="bg-gray-900 h-1 rounded-full"
|
||||
:style="{ width: progressBarWidth }"
|
||||
></div>
|
||||
</div>
|
||||
<Tooltip :text="`${props.progress}%`">
|
||||
<div class="w-full bg-gray-200 rounded-full h-1 my-2">
|
||||
<div
|
||||
class="bg-gray-900 rounded-full"
|
||||
:class="progressBarHeight"
|
||||
:style="{ width: progressBarWidth }"
|
||||
></div>
|
||||
</div>
|
||||
</Tooltip>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue'
|
||||
import { Tooltip } from 'frappe-ui'
|
||||
|
||||
const props = defineProps({
|
||||
progress: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'sm',
|
||||
},
|
||||
})
|
||||
|
||||
const progressBarWidth = computed(() => {
|
||||
const formattedPercentage = Math.min(Math.ceil(props.progress), 100)
|
||||
return `${formattedPercentage}%`
|
||||
})
|
||||
|
||||
const progressBarHeight = computed(() => {
|
||||
if (props.size === 'sm') {
|
||||
return 'h-1'
|
||||
}
|
||||
if (props.size === 'md') {
|
||||
return 'h-2'
|
||||
}
|
||||
if (props.size === 'lg') {
|
||||
return 'h-3'
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -118,15 +118,17 @@
|
||||
class="w-3.5 h-3.5 text-gray-900 rounded-sm focus:ring-gray-200"
|
||||
@change="markAnswer(index)"
|
||||
/>
|
||||
|
||||
<div
|
||||
v-else-if="quiz.data.show_answers"
|
||||
v-for="(answer, idx) in showAnswers"
|
||||
>
|
||||
<div v-if="index - 1 == idx">
|
||||
<CheckCircle v-if="answer" class="w-4 h-4 text-green-500" />
|
||||
<CheckCircle
|
||||
v-if="answer == 1"
|
||||
class="w-4 h-4 text-green-500"
|
||||
/>
|
||||
<MinusCircle
|
||||
v-else-if="questionDetails.data[`is_correct_${index}`]"
|
||||
v-else-if="answer == 2"
|
||||
class="w-4 h-4 text-green-500"
|
||||
/>
|
||||
<XCircle
|
||||
@@ -271,6 +273,7 @@
|
||||
import {
|
||||
Badge,
|
||||
Button,
|
||||
call,
|
||||
createResource,
|
||||
ListView,
|
||||
TextEditor,
|
||||
@@ -280,6 +283,7 @@ import { ref, watch, reactive, inject, computed } from 'vue'
|
||||
import { createToast } from '@/utils/'
|
||||
import { CheckCircle, XCircle, MinusCircle } from 'lucide-vue-next'
|
||||
import { timeAgo } from '@/utils'
|
||||
import { useRouter } from 'vue-router'
|
||||
import ProgressBar from '@/components/ProgressBar.vue'
|
||||
|
||||
const user = inject('$user')
|
||||
@@ -291,6 +295,7 @@ let questions = reactive([])
|
||||
const possibleAnswer = ref(null)
|
||||
const timer = ref(0)
|
||||
let timerInterval = null
|
||||
const router = useRouter()
|
||||
|
||||
const props = defineProps({
|
||||
quizName: {
|
||||
@@ -496,8 +501,8 @@ const checkAnswer = () => {
|
||||
selectedOptions.forEach((option, index) => {
|
||||
if (option) {
|
||||
showAnswers[index] = option && data[index]
|
||||
} else if (questionDetails.data[`is_correct_${index + 1}`]) {
|
||||
showAnswers[index] = 0
|
||||
} else if (data[index] == 2) {
|
||||
showAnswers[index] = 2
|
||||
} else {
|
||||
showAnswers[index] = undefined
|
||||
}
|
||||
@@ -560,6 +565,7 @@ const createSubmission = () => {
|
||||
{},
|
||||
{
|
||||
onSuccess(data) {
|
||||
markLessonProgress()
|
||||
if (quiz.data && quiz.data.max_attempts) attempts.reload()
|
||||
if (quiz.data.duration) clearInterval(timerInterval)
|
||||
},
|
||||
@@ -583,6 +589,16 @@ const getInstructions = (question) => {
|
||||
else return __('Type your answer')
|
||||
}
|
||||
|
||||
const markLessonProgress = () => {
|
||||
if (router.currentRoute.value.name == 'Lesson') {
|
||||
call('lms.lms.api.mark_lesson_progress', {
|
||||
course: router.currentRoute.value.params.courseName,
|
||||
chapter_number: router.currentRoute.value.params.chapterNumber,
|
||||
lesson_number: router.currentRoute.value.params.lessonNumber,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const getSubmissionColumns = () => {
|
||||
return [
|
||||
{
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
<template>
|
||||
<Dialog
|
||||
v-model="show"
|
||||
:options="{
|
||||
size: 'xl',
|
||||
}"
|
||||
>
|
||||
<template #body>
|
||||
<div class="p-5 space-y-4">
|
||||
<div class="text-lg font-semibold">
|
||||
{{ __('Add a quiz to your lesson') }}
|
||||
</div>
|
||||
<div>
|
||||
<Link
|
||||
v-model="quiz"
|
||||
doctype="LMS Quiz"
|
||||
:label="__('Select a quiz')"
|
||||
:onCreate="(value, close) => redirectToQuizForm()"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex justify-end space-x-2">
|
||||
<Button variant="solid" @click="addQuiz()">
|
||||
{{ __('Save') }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { Dialog, Button } from 'frappe-ui'
|
||||
import { onMounted, ref, nextTick } from 'vue'
|
||||
import Link from '@/components/Controls/Link.vue'
|
||||
|
||||
const show = ref(false)
|
||||
const quiz = ref(null)
|
||||
|
||||
const props = defineProps({
|
||||
onQuizAddition: {
|
||||
type: Function,
|
||||
required: true,
|
||||
},
|
||||
})
|
||||
|
||||
onMounted(async () => {
|
||||
await nextTick()
|
||||
show.value = true
|
||||
})
|
||||
|
||||
const addQuiz = () => {
|
||||
props.onQuizAddition(quiz.value)
|
||||
show.value = false
|
||||
}
|
||||
|
||||
const redirectToQuizForm = () => {
|
||||
window.open('/lms/quizzes/new', '_blank')
|
||||
}
|
||||
</script>
|
||||
191
frontend/src/pages/AssignmentForm.vue
Normal file
@@ -0,0 +1,191 @@
|
||||
<template>
|
||||
<header
|
||||
class="sticky top-0 z-10 flex items-center justify-between border-b bg-white px-3 py-2.5 sm:px-5"
|
||||
>
|
||||
<Breadcrumbs :items="breadcrumbs" />
|
||||
<div class="space-x-2">
|
||||
<router-link
|
||||
v-if="assignment.doc?.name"
|
||||
:to="{
|
||||
name: 'AssignmentSubmissionList',
|
||||
query: {
|
||||
assignmentID: assignment.doc.name,
|
||||
},
|
||||
}"
|
||||
>
|
||||
<Button>
|
||||
{{ __('Submission List') }}
|
||||
</Button>
|
||||
</router-link>
|
||||
<Button variant="solid" @click="saveAssignment()">
|
||||
{{ __('Save') }}
|
||||
</Button>
|
||||
</div>
|
||||
</header>
|
||||
<div class="w-3/4 mx-auto py-5">
|
||||
<div class="font-semibold mb-4">
|
||||
{{ __('Details') }}
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-5 mt-4 mb-8">
|
||||
<FormControl
|
||||
v-model="model.title"
|
||||
:label="__('Title')"
|
||||
:required="true"
|
||||
/>
|
||||
<FormControl
|
||||
v-model="model.type"
|
||||
type="select"
|
||||
:options="assignmentOptions"
|
||||
:label="__('Type')"
|
||||
:required="true"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-xs text-gray-600 mb-2">
|
||||
{{ __('Question') }}
|
||||
<span class="text-ink-red-3">*</span>
|
||||
</div>
|
||||
<TextEditor
|
||||
:content="model.question"
|
||||
@change="(val) => (model.question = val)"
|
||||
:editable="true"
|
||||
:fixedMenu="true"
|
||||
editorClass="prose-sm max-w-none border-b border-x bg-gray-100 rounded-b-md py-1 px-2 min-h-[7rem]"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
Breadcrumbs,
|
||||
Button,
|
||||
createDocumentResource,
|
||||
createResource,
|
||||
FormControl,
|
||||
TextEditor,
|
||||
} from 'frappe-ui'
|
||||
import {
|
||||
computed,
|
||||
inject,
|
||||
onMounted,
|
||||
onBeforeUnmount,
|
||||
reactive,
|
||||
watch,
|
||||
} from 'vue'
|
||||
import { showToast } from '@/utils'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const user = inject('$user')
|
||||
const router = useRouter()
|
||||
|
||||
const props = defineProps({
|
||||
assignmentID: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
})
|
||||
|
||||
const model = reactive({
|
||||
title: '',
|
||||
type: 'PDF',
|
||||
question: '',
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
if (
|
||||
props.assignmentID == 'new' &&
|
||||
!user.data?.is_moderator &&
|
||||
!user.data?.is_instructor
|
||||
) {
|
||||
router.push({ name: 'Courses' })
|
||||
}
|
||||
if (props.assignmentID !== 'new') {
|
||||
assignment.reload()
|
||||
}
|
||||
window.addEventListener('keydown', keyboardShortcut)
|
||||
})
|
||||
|
||||
const keyboardShortcut = (e) => {
|
||||
if (e.key === 's' && (e.ctrlKey || e.metaKey)) {
|
||||
saveAssignment()
|
||||
e.preventDefault()
|
||||
}
|
||||
}
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
window.removeEventListener('keydown', keyboardShortcut)
|
||||
})
|
||||
|
||||
const assignment = createDocumentResource({
|
||||
doctype: 'LMS Assignment',
|
||||
name: props.assignmentID,
|
||||
auto: false,
|
||||
})
|
||||
|
||||
const newAssignment = createResource({
|
||||
url: 'frappe.client.insert',
|
||||
makeParams(values) {
|
||||
return {
|
||||
doc: {
|
||||
doctype: 'LMS Assignment',
|
||||
...values,
|
||||
},
|
||||
}
|
||||
},
|
||||
onSuccess(data) {
|
||||
router.push({ name: 'AssignmentForm', params: { assignmentID: data.name } })
|
||||
},
|
||||
onError(err) {
|
||||
showToast(__('Error'), __(err.messages?.[0] || err), 'x')
|
||||
},
|
||||
})
|
||||
|
||||
const saveAssignment = () => {
|
||||
if (props.assignmentID == 'new') {
|
||||
newAssignment.submit({
|
||||
...model,
|
||||
})
|
||||
} else {
|
||||
assignment.setValue.submit(
|
||||
{
|
||||
...model,
|
||||
},
|
||||
{
|
||||
onSuccess(data) {
|
||||
showToast(__('Success'), __('Assignment saved successfully'), 'check')
|
||||
assignment.reload()
|
||||
},
|
||||
onError(err) {
|
||||
showToast(__('Error'), __(err.messages?.[0] || err), 'x')
|
||||
},
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
watch(assignment, () => {
|
||||
Object.keys(assignment.doc).forEach((key) => {
|
||||
model[key] = assignment.doc[key]
|
||||
})
|
||||
})
|
||||
|
||||
const breadcrumbs = computed(() => [
|
||||
{
|
||||
label: __('Assignments'),
|
||||
route: { name: 'Assignments' },
|
||||
},
|
||||
{
|
||||
label: assignment.doc ? assignment.doc.title : __('New Assignment'),
|
||||
},
|
||||
])
|
||||
|
||||
const assignmentOptions = computed(() => {
|
||||
return [
|
||||
{ label: 'PDF', value: 'PDF' },
|
||||
{ label: 'Image', value: 'Image' },
|
||||
{ label: 'Document', value: 'Document' },
|
||||
{ label: 'Text', value: 'Text' },
|
||||
{ label: 'URL', value: 'URL' },
|
||||
]
|
||||
})
|
||||
</script>
|
||||
@@ -3,137 +3,20 @@
|
||||
class="flex justify-between sticky top-0 z-10 border-b bg-white px-3 py-2.5 sm:px-5"
|
||||
>
|
||||
<Breadcrumbs :items="breadcrumbs" />
|
||||
<Button variant="solid" @click="submitAssignment()">
|
||||
{{ __('Save') }}
|
||||
</Button>
|
||||
</header>
|
||||
<div class="container py-5">
|
||||
<div
|
||||
v-if="submissionResource.data"
|
||||
class="bg-blue-100 p-2 rounded-md leading-5 text-sm italic"
|
||||
>
|
||||
{{ __("You've successfully submitted the assignment.") }}
|
||||
{{
|
||||
__(
|
||||
"Once the moderator grades your submission, you'll find the details here."
|
||||
)
|
||||
}}
|
||||
{{ __('Feel free to make edits to your submission if needed.') }}
|
||||
</div>
|
||||
<div v-if="assignment.data">
|
||||
<div>
|
||||
<div class="text-xl font-semibold hidden">
|
||||
{{ __('Question') }}
|
||||
</div>
|
||||
<div class="text-sm mt-1 hidden">
|
||||
{{
|
||||
__('Read the question carefully before attempting the assignment.')
|
||||
}}
|
||||
</div>
|
||||
<div
|
||||
v-html="assignment.data.question"
|
||||
class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-gray-300 prose-th:border-gray-300 prose-td:relative prose-th:relative prose-th:bg-gray-100 prose-sm max-w-none !whitespace-normal"
|
||||
></div>
|
||||
</div>
|
||||
<div class="">
|
||||
<div class="text-xl font-semibold mt-10">
|
||||
{{ __('Submission') }}
|
||||
</div>
|
||||
<div v-if="showUploader()">
|
||||
<div class="text-sm mt-1 mb-4">
|
||||
{{ __('Add your assignment as {0}').format(assignment.data.type) }}
|
||||
</div>
|
||||
<FileUploader
|
||||
v-if="!submissionFile"
|
||||
:fileTypes="getType()"
|
||||
:validateFile="validateFile"
|
||||
@success="(file) => saveSubmission(file)"
|
||||
>
|
||||
<template
|
||||
#default="{
|
||||
file,
|
||||
uploading,
|
||||
progress,
|
||||
uploaded,
|
||||
message,
|
||||
error,
|
||||
total,
|
||||
success,
|
||||
openFileSelector,
|
||||
}"
|
||||
>
|
||||
<Button @click="openFileSelector" :loading="uploading">
|
||||
{{
|
||||
uploading
|
||||
? __('Uploading {0}%').format(progress)
|
||||
: __('Upload File')
|
||||
}}
|
||||
</Button>
|
||||
</template>
|
||||
</FileUploader>
|
||||
<div v-else>
|
||||
<div class="flex items-center">
|
||||
<div class="border rounded-md p-2 mr-2">
|
||||
<FileText class="h-5 w-5 stroke-1.5 text-gray-700" />
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<span>
|
||||
{{ submissionFile.file_name }}
|
||||
</span>
|
||||
<span class="text-sm text-gray-500 mt-1">
|
||||
{{ getFileSize(submissionFile.file_size) }}
|
||||
</span>
|
||||
</div>
|
||||
<X
|
||||
@click="removeSubmission()"
|
||||
class="bg-gray-200 rounded-md cursor-pointer stroke-1.5 w-5 h-5 p-1 ml-4"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="assignment.data.type == 'URL'">
|
||||
<div class="text-sm mb-4">
|
||||
{{ __('Enter a URL') }}
|
||||
</div>
|
||||
<FormControl v-model="answer" />
|
||||
</div>
|
||||
<div v-else>
|
||||
<div class="text-sm mb-4">
|
||||
{{ __('Write your answer here') }}
|
||||
</div>
|
||||
<TextEditor
|
||||
:content="answer"
|
||||
@change="(val) => (answer = val)"
|
||||
:editable="true"
|
||||
:fixedMenu="true"
|
||||
editorClass="prose-sm max-w-none border-b border-x bg-gray-100 rounded-b-md py-1 px-2 min-h-[7rem]"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="overflow-hidden h-[calc(100vh-3.2rem)]">
|
||||
<Assignment :assignmentID="assignmentID" :submissionName="submissionName" />
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
Breadcrumbs,
|
||||
createResource,
|
||||
FileUploader,
|
||||
Button,
|
||||
FormControl,
|
||||
TextEditor,
|
||||
} from 'frappe-ui'
|
||||
import { FileText, X } from 'lucide-vue-next'
|
||||
import { computed, inject, onMounted, ref } from 'vue'
|
||||
import { showToast, getFileSize } from '../utils'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { Breadcrumbs, createResource } from 'frappe-ui'
|
||||
import { computed, inject, onMounted } from 'vue'
|
||||
import Assignment from '@/components/Assignment.vue'
|
||||
|
||||
const user = inject('$user')
|
||||
const submissionFile = ref(null)
|
||||
const answer = ref(null)
|
||||
const router = useRouter()
|
||||
|
||||
const props = defineProps({
|
||||
assignmentName: {
|
||||
assignmentID: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
@@ -143,186 +26,40 @@ const props = defineProps({
|
||||
},
|
||||
})
|
||||
|
||||
const assignment = createResource({
|
||||
url: 'frappe.client.get',
|
||||
const title = createResource({
|
||||
url: 'frappe.client.get_value',
|
||||
params: {
|
||||
doctype: 'LMS Assignment',
|
||||
name: props.assignmentName,
|
||||
fieldname: 'title',
|
||||
filters: {
|
||||
name: props.assignmentID,
|
||||
},
|
||||
},
|
||||
auto: true,
|
||||
})
|
||||
|
||||
const showUploader = () => {
|
||||
return ['PDF', 'Image', 'Document'].includes(assignment.data?.type)
|
||||
}
|
||||
|
||||
const updateSubmission = createResource({
|
||||
url: 'frappe.client.set_value',
|
||||
makeParams(values) {
|
||||
let fieldname = {}
|
||||
if (showUploader()) {
|
||||
fieldname.assignment_attachment = submissionFile.value.file_url
|
||||
} else {
|
||||
fieldname.answer = answer.value
|
||||
}
|
||||
return {
|
||||
doctype: 'LMS Assignment Submission',
|
||||
name: props.submissionName,
|
||||
fieldname: fieldname,
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
const imageResource = createResource({
|
||||
url: 'lms.lms.api.get_file_info',
|
||||
makeParams(values) {
|
||||
return {
|
||||
file_url: values.image,
|
||||
}
|
||||
},
|
||||
auto: false,
|
||||
onSuccess(data) {
|
||||
submissionFile.value = data
|
||||
},
|
||||
})
|
||||
|
||||
const newSubmission = createResource({
|
||||
url: 'frappe.client.insert',
|
||||
makeParams(values) {
|
||||
let doc = {
|
||||
doctype: 'LMS Assignment Submission',
|
||||
assignment: props.assignmentName,
|
||||
member: user.data?.name,
|
||||
}
|
||||
if (showUploader()) {
|
||||
doc.assignment_attachment = submissionFile.value.file_url
|
||||
} else {
|
||||
doc.answer = answer.value
|
||||
}
|
||||
return {
|
||||
doc: doc,
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
const submissionResource = createResource({
|
||||
url: 'frappe.client.get_value',
|
||||
params: {
|
||||
doctype: 'LMS Assignment Submission',
|
||||
fieldname: showUploader() ? 'assignment_attachment' : 'answer',
|
||||
filters: {
|
||||
name: props.submissionName,
|
||||
},
|
||||
},
|
||||
onSuccess(data) {
|
||||
if (data.assignment_attachment)
|
||||
imageResource.reload({ image: data.assignment_attachment })
|
||||
if (data.answer) answer.value = data.answer
|
||||
},
|
||||
})
|
||||
onMounted(() => {
|
||||
if (!user.data) {
|
||||
window.location.href = '/login'
|
||||
}
|
||||
if (props.submissionName != 'new') {
|
||||
submissionResource.reload()
|
||||
}
|
||||
})
|
||||
|
||||
const submitAssignment = () => {
|
||||
if (props.submissionName != 'new') {
|
||||
updateSubmission.submit(
|
||||
{},
|
||||
{
|
||||
onSuccess(data) {
|
||||
showToast('Success', 'Submission updated successfully.', 'check')
|
||||
},
|
||||
onError(err) {
|
||||
showToast('Error', err.messages?.[0] || err, 'x')
|
||||
},
|
||||
}
|
||||
)
|
||||
} else {
|
||||
addNewSubmission()
|
||||
}
|
||||
}
|
||||
|
||||
const addNewSubmission = () => {
|
||||
newSubmission.submit(
|
||||
{},
|
||||
{
|
||||
onSuccess(data) {
|
||||
showToast('Success', 'Assignment submitted successfully.', 'check')
|
||||
router.push({
|
||||
name: 'AssignmentSubmission',
|
||||
params: {
|
||||
assignmentName: props.assignmentName,
|
||||
submissionName: data.name,
|
||||
},
|
||||
})
|
||||
},
|
||||
onError(err) {
|
||||
showToast('Error', err.messages?.[0] || err, 'x')
|
||||
},
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
const breadcrumbs = computed(() => {
|
||||
let crumbs = [
|
||||
{
|
||||
label: 'Assignment',
|
||||
label: 'Submissions',
|
||||
route: { name: 'AssignmentSubmissionList' },
|
||||
},
|
||||
{
|
||||
label: assignment.data?.title,
|
||||
label: title.data?.title,
|
||||
route: {
|
||||
name: 'AssignmentSubmission',
|
||||
params: {
|
||||
assignmentName: assignment.data?.name,
|
||||
assignmentID: props.assignmentID,
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
return crumbs
|
||||
})
|
||||
|
||||
const saveSubmission = (file) => {
|
||||
submissionFile.value = file
|
||||
}
|
||||
|
||||
const getType = () => {
|
||||
const type = assignment.data?.type
|
||||
if (type == 'Image') {
|
||||
return ['image/*']
|
||||
} else if (type == 'Document') {
|
||||
return [
|
||||
'.doc',
|
||||
'.docx',
|
||||
'.xml',
|
||||
'application/msword',
|
||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||
]
|
||||
} else if (type == 'PDF') {
|
||||
return ['.pdf']
|
||||
}
|
||||
}
|
||||
|
||||
const validateFile = (file) => {
|
||||
let type = assignment.data?.type
|
||||
let extension = file.name.split('.').pop().toLowerCase()
|
||||
if (type == 'Image' && !['jpg', 'jpeg', 'png'].includes(extension)) {
|
||||
return 'Only image file is allowed.'
|
||||
} else if (
|
||||
type == 'Document' &&
|
||||
!['doc', 'docx', 'xml'].includes(extension)
|
||||
) {
|
||||
return 'Only document file is allowed.'
|
||||
} else if (type == 'PDF' && !['pdf'].includes(extension)) {
|
||||
return 'Only PDF file is allowed.'
|
||||
}
|
||||
}
|
||||
|
||||
const removeSubmission = () => {
|
||||
submissionFile.value = null
|
||||
}
|
||||
</script>
|
||||
|
||||
217
frontend/src/pages/AssignmentSubmissionList.vue
Normal file
@@ -0,0 +1,217 @@
|
||||
<template>
|
||||
<header
|
||||
class="sticky top-0 z-10 flex items-center justify-between border-b bg-white px-3 py-2.5 sm:px-5"
|
||||
>
|
||||
<Breadcrumbs :items="breadcrumbs" />
|
||||
</header>
|
||||
<div class="md:w-3/4 md:mx-auto py-5 mx-5">
|
||||
<div class="grid grid-cols-3 gap-5 mb-5">
|
||||
<Link
|
||||
doctype="LMS Assignment"
|
||||
v-model="assignmentID"
|
||||
:placeholder="__('Assignment')"
|
||||
/>
|
||||
<Link doctype="User" v-model="member" :placeholder="__('Member')" />
|
||||
<FormControl
|
||||
v-model="status"
|
||||
type="select"
|
||||
:options="statusOptions"
|
||||
:placeholder="__('Status')"
|
||||
/>
|
||||
</div>
|
||||
<ListView
|
||||
v-if="submissions.loading || submissions.data?.length"
|
||||
:columns="submissionColumns"
|
||||
:rows="submissions.data"
|
||||
rowKey="name"
|
||||
>
|
||||
<ListHeader
|
||||
class="mb-2 grid items-center space-x-4 rounded bg-gray-100 p-2"
|
||||
>
|
||||
<ListHeaderItem :item="item" v-for="item in submissionColumns" />
|
||||
</ListHeader>
|
||||
<ListRows>
|
||||
<router-link
|
||||
v-for="row in submissions.data"
|
||||
:to="{
|
||||
name: 'AssignmentSubmission',
|
||||
params: {
|
||||
assignmentID: row.assignment,
|
||||
submissionName: row.name,
|
||||
},
|
||||
}"
|
||||
>
|
||||
<ListRow :row="row">
|
||||
<template #default="{ column, item }">
|
||||
<ListRowItem :item="row[column.key]" :align="column.align">
|
||||
<div v-if="column.key == 'status'">
|
||||
<Badge :theme="getStatusTheme(row[column.key])">
|
||||
{{ row[column.key] }}
|
||||
</Badge>
|
||||
</div>
|
||||
<div v-else>
|
||||
{{ row[column.key] }}
|
||||
</div>
|
||||
</ListRowItem>
|
||||
</template>
|
||||
</ListRow>
|
||||
</router-link>
|
||||
</ListRows>
|
||||
</ListView>
|
||||
<div
|
||||
v-else
|
||||
class="text-center p-5 text-gray-600 mt-52 w-3/4 md:w-1/2 mx-auto space-y-2"
|
||||
>
|
||||
<Pencil class="size-8 mx-auto stroke-1 text-gray-500" />
|
||||
<div class="text-xl font-medium">
|
||||
{{ __('No submissions') }}
|
||||
</div>
|
||||
<div class="leading-5">
|
||||
{{ __('There are no submissions for this assignment.') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
Badge,
|
||||
Breadcrumbs,
|
||||
createListResource,
|
||||
FormControl,
|
||||
ListView,
|
||||
ListHeader,
|
||||
ListHeaderItem,
|
||||
ListRows,
|
||||
ListRow,
|
||||
ListRowItem,
|
||||
} from 'frappe-ui'
|
||||
import { computed, inject, onMounted, ref, watch } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { Pencil } from 'lucide-vue-next'
|
||||
import Link from '@/components/Controls/Link.vue'
|
||||
|
||||
const user = inject('$user')
|
||||
const dayjs = inject('$dayjs')
|
||||
const router = useRouter()
|
||||
const assignmentID = ref('')
|
||||
const member = ref('')
|
||||
const status = ref('')
|
||||
|
||||
onMounted(() => {
|
||||
if (!user.data?.is_instructor && !user.data?.is_moderator) {
|
||||
router.push({ name: 'Courses' })
|
||||
}
|
||||
assignmentID.value = router.currentRoute.value.query.assignmentID
|
||||
member.value = router.currentRoute.value.query.member
|
||||
status.value = router.currentRoute.value.query.status
|
||||
reloadSubmissions()
|
||||
})
|
||||
|
||||
const getAssignmentFilters = () => {
|
||||
let filters = {}
|
||||
if (assignmentID.value) {
|
||||
filters.assignment = assignmentID.value
|
||||
}
|
||||
if (member.value) {
|
||||
filters.member = member.value
|
||||
}
|
||||
if (status.value) {
|
||||
filters.status = status.value
|
||||
}
|
||||
return filters
|
||||
}
|
||||
|
||||
const submissions = createListResource({
|
||||
doctype: 'LMS Assignment Submission',
|
||||
fields: [
|
||||
'name',
|
||||
'assignment',
|
||||
'assignment_title',
|
||||
'member_name',
|
||||
'creation',
|
||||
'status',
|
||||
],
|
||||
orderBy: 'creation desc',
|
||||
transform(data) {
|
||||
return data.map((row) => {
|
||||
return {
|
||||
...row,
|
||||
creation: dayjs(row.creation).fromNow(),
|
||||
}
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
// watch changes in assignmentID, member, and status and if changes in any then reload submissions. Also update the url query params for the same
|
||||
watch([assignmentID, member, status], () => {
|
||||
router.push({
|
||||
query: {
|
||||
assignmentID: assignmentID.value,
|
||||
member: member.value,
|
||||
status: status.value,
|
||||
},
|
||||
})
|
||||
reloadSubmissions()
|
||||
})
|
||||
|
||||
const reloadSubmissions = () => {
|
||||
submissions.update({
|
||||
filters: getAssignmentFilters(),
|
||||
})
|
||||
submissions.reload()
|
||||
}
|
||||
|
||||
const submissionColumns = computed(() => {
|
||||
return [
|
||||
{
|
||||
label: 'Member',
|
||||
key: 'member_name',
|
||||
width: 1,
|
||||
},
|
||||
{
|
||||
label: 'Assignment',
|
||||
key: 'assignment_title',
|
||||
width: 2,
|
||||
},
|
||||
{
|
||||
label: 'Submitted',
|
||||
key: 'creation',
|
||||
width: 1,
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: 'Status',
|
||||
key: 'status',
|
||||
width: 1,
|
||||
align: 'center',
|
||||
},
|
||||
]
|
||||
})
|
||||
|
||||
const statusOptions = computed(() => {
|
||||
return [
|
||||
{ label: '', value: '' },
|
||||
{ label: 'Pass', value: 'Pass' },
|
||||
{ label: 'Fail', value: 'Fail' },
|
||||
{ label: 'Not Graded', value: 'Not Graded' },
|
||||
]
|
||||
})
|
||||
|
||||
const getStatusTheme = (status) => {
|
||||
if (status === 'Pass') {
|
||||
return 'green'
|
||||
} else if (status === 'Not Graded') {
|
||||
return 'blue'
|
||||
} else {
|
||||
return 'red'
|
||||
}
|
||||
}
|
||||
|
||||
const breadcrumbs = computed(() => {
|
||||
return [
|
||||
{
|
||||
label: 'Assignment Submissions',
|
||||
},
|
||||
]
|
||||
})
|
||||
</script>
|
||||
187
frontend/src/pages/Assignments.vue
Normal file
@@ -0,0 +1,187 @@
|
||||
<template>
|
||||
<header
|
||||
class="sticky top-0 z-10 flex items-center justify-between border-b bg-white px-3 py-2.5 sm:px-5"
|
||||
>
|
||||
<Breadcrumbs :items="breadcrumbs" />
|
||||
<router-link
|
||||
:to="{
|
||||
name: 'AssignmentForm',
|
||||
params: {
|
||||
assignmentID: 'new',
|
||||
},
|
||||
}"
|
||||
>
|
||||
<Button variant="solid">
|
||||
<template #prefix>
|
||||
<Plus class="w-4 h-4" />
|
||||
</template>
|
||||
{{ __('New') }}
|
||||
</Button>
|
||||
</router-link>
|
||||
</header>
|
||||
|
||||
<div class="md:w-3/4 md:mx-auto py-5 mx-5">
|
||||
<div class="grid grid-cols-3 gap-5 mb-5">
|
||||
<FormControl v-model="titleFilter" :placeholder="__('Search by title')" />
|
||||
<FormControl
|
||||
v-model="typeFilter"
|
||||
type="select"
|
||||
:options="assignmentTypes"
|
||||
:placeholder="__('Type')"
|
||||
/>
|
||||
</div>
|
||||
<ListView
|
||||
v-if="assignments.data?.length"
|
||||
:columns="assignmentColumns"
|
||||
:rows="assignments.data"
|
||||
row-key="name"
|
||||
:options="{
|
||||
showTooltip: false,
|
||||
selectable: false,
|
||||
getRowRoute: (row) => ({
|
||||
name: 'AssignmentForm',
|
||||
params: {
|
||||
assignmentID: row.name,
|
||||
},
|
||||
}),
|
||||
}"
|
||||
>
|
||||
</ListView>
|
||||
<div
|
||||
v-else
|
||||
class="text-center p-5 text-gray-600 mt-52 w-3/4 md:w-1/2 mx-auto space-y-2"
|
||||
>
|
||||
<Pencil class="size-10 mx-auto stroke-1 text-gray-500" />
|
||||
<div class="text-xl font-medium">
|
||||
{{ __('No assignments found') }}
|
||||
</div>
|
||||
<div class="leading-5">
|
||||
{{
|
||||
__(
|
||||
'You have not created any assignments yet. To create a new assignment, click on the "New" button above.'
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="assignments.data && assignments.hasNextPage"
|
||||
class="flex justify-center my-5"
|
||||
>
|
||||
<Button @click="assignments.next()">
|
||||
{{ __('Load More') }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
Breadcrumbs,
|
||||
Button,
|
||||
createListResource,
|
||||
FormControl,
|
||||
ListView,
|
||||
} from 'frappe-ui'
|
||||
import { computed, inject, onMounted, ref, watch } from 'vue'
|
||||
import { Plus, Pencil } from 'lucide-vue-next'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const user = inject('$user')
|
||||
const dayjs = inject('$dayjs')
|
||||
const titleFilter = ref('')
|
||||
const typeFilter = ref('')
|
||||
const router = useRouter()
|
||||
|
||||
onMounted(() => {
|
||||
if (!user.data?.is_moderator && !user.data?.is_instructor) {
|
||||
router.push({ name: 'Courses' })
|
||||
}
|
||||
|
||||
titleFilter.value = router.currentRoute.value.query.title
|
||||
typeFilter.value = router.currentRoute.value.query.type
|
||||
})
|
||||
|
||||
watch([titleFilter, typeFilter], () => {
|
||||
router.push({
|
||||
query: {
|
||||
title: titleFilter.value,
|
||||
type: typeFilter.value,
|
||||
},
|
||||
})
|
||||
reloadAssignments()
|
||||
})
|
||||
|
||||
const reloadAssignments = () => {
|
||||
assignments.update({
|
||||
filters: assignmentFilter.value,
|
||||
})
|
||||
assignments.reload()
|
||||
}
|
||||
|
||||
const assignmentFilter = computed(() => {
|
||||
let filters = {}
|
||||
if (titleFilter.value) {
|
||||
filters.title = ['like', `%${titleFilter.value}%`]
|
||||
}
|
||||
if (typeFilter.value) {
|
||||
filters.type = typeFilter.value
|
||||
}
|
||||
if (!user.data?.is_moderator) {
|
||||
filters.owner = user.data?.email
|
||||
}
|
||||
return filters
|
||||
})
|
||||
|
||||
const assignments = createListResource({
|
||||
doctype: 'LMS Assignment',
|
||||
fields: ['name', 'title', 'type', 'creation'],
|
||||
orderBy: 'modified desc',
|
||||
cache: ['assignments'],
|
||||
transform(data) {
|
||||
return data.map((row) => {
|
||||
return {
|
||||
...row,
|
||||
creation: dayjs(row.creation).fromNow(),
|
||||
}
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
const assignmentColumns = computed(() => {
|
||||
return [
|
||||
{
|
||||
label: __('Title'),
|
||||
key: 'title',
|
||||
width: 2,
|
||||
},
|
||||
{
|
||||
label: __('Type'),
|
||||
key: 'type',
|
||||
width: 1,
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: __('Created'),
|
||||
key: 'creation',
|
||||
width: 1,
|
||||
align: 'center',
|
||||
},
|
||||
]
|
||||
})
|
||||
|
||||
const assignmentTypes = computed(() => {
|
||||
let types = ['', 'Document', 'Image', 'PDF', 'URL', 'Text']
|
||||
return types.map((type) => {
|
||||
return {
|
||||
label: __(type),
|
||||
value: type,
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const breadcrumbs = computed(() => [
|
||||
{
|
||||
label: 'Assignments',
|
||||
route: { name: 'Assignments' },
|
||||
},
|
||||
])
|
||||
</script>
|
||||
@@ -22,7 +22,7 @@
|
||||
</div>
|
||||
</header>
|
||||
<div v-if="batch.data" class="grid grid-cols-[70%,30%] h-screen">
|
||||
<div class="border-r-2">
|
||||
<div class="border-r">
|
||||
<Tabs
|
||||
v-model="tabIndex"
|
||||
:tabs="tabs"
|
||||
@@ -59,15 +59,15 @@
|
||||
<div v-if="tab.label == 'Courses'">
|
||||
<BatchCourses :batch="batch.data.name" />
|
||||
</div>
|
||||
<div v-else-if="tab.label == 'Dashboard'">
|
||||
<div v-else-if="tab.label == 'Dashboard' && isStudent">
|
||||
<BatchDashboard :batch="batch" :isStudent="isStudent" />
|
||||
</div>
|
||||
<div v-else-if="tab.label == 'Dashboard'">
|
||||
<BatchStudents :batch="batch.data" />
|
||||
</div>
|
||||
<div v-else-if="tab.label == 'Live Class'">
|
||||
<LiveClass :batch="batch.data.name" />
|
||||
</div>
|
||||
<div v-else-if="tab.label == 'Students'">
|
||||
<BatchStudents :batch="batch.data.name" />
|
||||
</div>
|
||||
<div v-else-if="tab.label == 'Assessments'">
|
||||
<Assessments :batch="batch.data.name" />
|
||||
</div>
|
||||
@@ -89,12 +89,12 @@
|
||||
</Tabs>
|
||||
</div>
|
||||
<div class="p-5">
|
||||
<div class="text-2xl font-semibold mb-2">
|
||||
<div class="text-xl font-semibold mb-2">
|
||||
{{ batch.data.title }}
|
||||
</div>
|
||||
<div v-html="batch.data.description" class="leading-5 mb-2"></div>
|
||||
|
||||
<div class="flex avatar-group overlap mb-5">
|
||||
<div class="flex items-center avatar-group overlap mb-5">
|
||||
<div
|
||||
class="h-6 mr-1"
|
||||
:class="{
|
||||
@@ -195,6 +195,7 @@ import {
|
||||
SendIcon,
|
||||
MessageCircle,
|
||||
Globe,
|
||||
ShieldCheck,
|
||||
} from 'lucide-vue-next'
|
||||
import { formatTime, updateDocumentTitle } from '@/utils'
|
||||
import BatchDashboard from '@/components/BatchDashboard.vue'
|
||||
@@ -229,7 +230,7 @@ const batch = createResource({
|
||||
})
|
||||
|
||||
const breadcrumbs = computed(() => {
|
||||
let crumbs = [{ label: 'All Batches', route: { name: 'Batches' } }]
|
||||
let crumbs = [{ label: 'Batches', route: { name: 'Batches' } }]
|
||||
if (!isStudent.value) {
|
||||
crumbs.push({
|
||||
label: 'Details',
|
||||
@@ -259,34 +260,33 @@ const isStudent = computed(() => {
|
||||
const tabIndex = ref(0)
|
||||
const tabs = computed(() => {
|
||||
let batchTabs = []
|
||||
if (isStudent.value) {
|
||||
batchTabs.push({
|
||||
label: 'Dashboard',
|
||||
icon: LayoutDashboard,
|
||||
})
|
||||
}
|
||||
batchTabs.push({
|
||||
label: 'Dashboard',
|
||||
icon: LayoutDashboard,
|
||||
})
|
||||
|
||||
batchTabs.push({
|
||||
label: 'Courses',
|
||||
icon: BookOpen,
|
||||
})
|
||||
|
||||
batchTabs.push({
|
||||
label: 'Live Class',
|
||||
icon: Laptop,
|
||||
})
|
||||
|
||||
if (user.data?.is_moderator) {
|
||||
batchTabs.push({
|
||||
label: 'Students',
|
||||
icon: Contact2,
|
||||
})
|
||||
batchTabs.push({
|
||||
label: 'Assessments',
|
||||
icon: BookOpenCheck,
|
||||
})
|
||||
}
|
||||
batchTabs.push({
|
||||
label: 'Live Class',
|
||||
icon: Laptop,
|
||||
})
|
||||
batchTabs.push({
|
||||
label: 'Courses',
|
||||
icon: BookOpen,
|
||||
})
|
||||
|
||||
batchTabs.push({
|
||||
label: 'Announcements',
|
||||
icon: Mail,
|
||||
})
|
||||
|
||||
batchTabs.push({
|
||||
label: 'Discussions',
|
||||
icon: MessageCircle,
|
||||
|
||||
@@ -137,7 +137,7 @@ const courses = createResource({
|
||||
})
|
||||
|
||||
const breadcrumbs = computed(() => {
|
||||
let items = [{ label: 'All Batches', route: { name: 'Batches' } }]
|
||||
let items = [{ label: 'Batches', route: { name: 'Batches' } }]
|
||||
items.push({
|
||||
label: batch?.data?.title,
|
||||
route: { name: 'BatchDetail', params: { batchName: batch?.data?.name } },
|
||||
|
||||
@@ -252,7 +252,7 @@ import {
|
||||
} from 'frappe-ui'
|
||||
import Link from '@/components/Controls/Link.vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { showToast } from '../utils'
|
||||
import { showToast } from '@/utils'
|
||||
import { Image } from 'lucide-vue-next'
|
||||
import { capture } from '@/telemetry'
|
||||
import MultiSelect from '@/components/Controls/MultiSelect.vue'
|
||||
@@ -345,6 +345,10 @@ const batchDetail = createResource({
|
||||
data.instructors.forEach((instructor) => {
|
||||
instructors.value.push(instructor.instructor)
|
||||
})
|
||||
} else if (['start_time', 'end_time'].includes(key)) {
|
||||
let [hours, minutes, seconds] = data[key].split(':')
|
||||
hours = hours.length == 1 ? '0' + hours : hours
|
||||
batch[key] = `${hours}:${minutes}`
|
||||
} else if (Object.hasOwn(batch, key)) batch[key] = data[key]
|
||||
})
|
||||
let checkboxes = ['published', 'paid_batch', 'allow_self_enrollment']
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<Tooltip
|
||||
v-if="course.data.rating"
|
||||
v-if="parseInt(course.data.rating) > 0"
|
||||
:text="__('Average Rating')"
|
||||
class="flex items-center"
|
||||
>
|
||||
@@ -25,7 +25,9 @@
|
||||
{{ course.data.rating }}
|
||||
</span>
|
||||
</Tooltip>
|
||||
<span v-if="course.data.rating" class="mx-3">·</span>
|
||||
<span v-if="parseInt(course.data.rating) > 0" class="mx-3"
|
||||
>·</span
|
||||
>
|
||||
<Tooltip
|
||||
v-if="course.data.enrollment_count"
|
||||
:text="__('Enrolled Students')"
|
||||
@@ -117,7 +119,7 @@ const course = createResource({
|
||||
})
|
||||
|
||||
const breadcrumbs = computed(() => {
|
||||
let items = [{ label: 'All Courses', route: { name: 'Courses' } }]
|
||||
let items = [{ label: 'Courses', route: { name: 'Courses' } }]
|
||||
items.push({
|
||||
label: course?.data?.title,
|
||||
route: { name: 'CourseDetail', params: { courseName: course?.data?.name } },
|
||||
|
||||
@@ -133,8 +133,8 @@
|
||||
</div>
|
||||
<FormControl
|
||||
v-model="newTag"
|
||||
:placeholder="__('Keywords for the course')"
|
||||
class="w-52"
|
||||
:placeholder="__('Add a keyword and then press enter')"
|
||||
class="w-72"
|
||||
@keyup.enter="updateTags()"
|
||||
id="tags"
|
||||
/>
|
||||
@@ -288,6 +288,7 @@ const course = reactive({
|
||||
video_link: '',
|
||||
course_image: null,
|
||||
tags: '',
|
||||
category: '',
|
||||
published: false,
|
||||
published_on: '',
|
||||
featured: false,
|
||||
|
||||
@@ -42,8 +42,11 @@
|
||||
</div>
|
||||
</header>
|
||||
<div v-if="jobsList?.length">
|
||||
<div class="divide-y lg:w-3/4 mx-auto p-5">
|
||||
<div v-for="job in jobsList">
|
||||
<div class="lg:w-3/4 mx-auto p-5">
|
||||
<div class="text-xl font-semibold mb-5">
|
||||
{{ __('Find the perfect job for you') }}
|
||||
</div>
|
||||
<div v-for="job in jobsList" class="divide-y">
|
||||
<router-link
|
||||
:to="{
|
||||
name: 'JobDetail',
|
||||
|
||||
@@ -305,7 +305,7 @@ const progress = createResource({
|
||||
})
|
||||
|
||||
const breadcrumbs = computed(() => {
|
||||
let items = [{ label: 'All Courses', route: { name: 'Courses' } }]
|
||||
let items = [{ label: 'Courses', route: { name: 'Courses' } }]
|
||||
items.push({
|
||||
label: lesson?.data?.course_title,
|
||||
route: { name: 'CourseDetail', params: { courseName: props.courseName } },
|
||||
|
||||
@@ -132,6 +132,7 @@ const renderEditor = (holder) => {
|
||||
holder: holder,
|
||||
tools: getEditorTools(true),
|
||||
autofocus: true,
|
||||
defaultBlock: 'markdown',
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -256,11 +256,7 @@ onMounted(() => {
|
||||
})
|
||||
|
||||
const keyboardShortcut = (e) => {
|
||||
if (
|
||||
e.key === 's' &&
|
||||
(e.ctrlKey || e.metaKey) &&
|
||||
!e.target.classList.contains('ProseMirror')
|
||||
) {
|
||||
if (e.key === 's' && (e.ctrlKey || e.metaKey)) {
|
||||
submitQuiz()
|
||||
e.preventDefault()
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
<Breadcrumbs :items="breadcrumbs" />
|
||||
</header>
|
||||
<div v-if="submissions.data?.length" class="md:w-3/4 md:mx-auto py-5 mx-5">
|
||||
<div class="text-xl font-semibold mb-5">
|
||||
{{ submissions.data[0].quiz_title }}
|
||||
</div>
|
||||
<ListView
|
||||
:columns="quizColumns"
|
||||
:rows="submissions.data"
|
||||
@@ -31,12 +34,18 @@
|
||||
</router-link>
|
||||
</ListRows>
|
||||
</ListView>
|
||||
<div class="flex justify-center my-5">
|
||||
<Button v-if="submissions.hasNextPage" @click="submissions.next()">
|
||||
{{ __('Load More') }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
createListResource,
|
||||
Breadcrumbs,
|
||||
Button,
|
||||
ListView,
|
||||
ListRow,
|
||||
ListRows,
|
||||
@@ -76,12 +85,7 @@ const quizColumns = computed(() => {
|
||||
{
|
||||
label: __('Member'),
|
||||
key: 'member_name',
|
||||
width: 2,
|
||||
},
|
||||
{
|
||||
label: __('Quiz'),
|
||||
key: 'quiz_title',
|
||||
width: 2,
|
||||
width: 1,
|
||||
},
|
||||
{
|
||||
label: __('Score'),
|
||||
|
||||
@@ -46,6 +46,11 @@
|
||||
</router-link>
|
||||
</ListRows>
|
||||
</ListView>
|
||||
<div class="flex justify-center my-5">
|
||||
<Button v-if="quizzes.hasNextPage" @click="quizzes.next()">
|
||||
{{ __('Load More') }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
@@ -67,13 +72,13 @@
|
||||
<script setup>
|
||||
import {
|
||||
Breadcrumbs,
|
||||
Button,
|
||||
createListResource,
|
||||
ListView,
|
||||
ListRows,
|
||||
ListRow,
|
||||
ListHeader,
|
||||
ListHeaderItem,
|
||||
Button,
|
||||
} from 'frappe-ui'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { computed, inject, onMounted } from 'vue'
|
||||
@@ -103,9 +108,6 @@ const quizzes = createListResource({
|
||||
auto: true,
|
||||
cache: ['quizzes', user.data?.name],
|
||||
orderBy: 'modified desc',
|
||||
onSuccess(data) {
|
||||
data.forEach((row) => {})
|
||||
},
|
||||
})
|
||||
|
||||
const quizColumns = computed(() => {
|
||||
|
||||
@@ -131,12 +131,6 @@ const routes = [
|
||||
component: () => import('@/pages/JobCreation.vue'),
|
||||
props: true,
|
||||
},
|
||||
{
|
||||
path: '/assignment-submission/:assignmentName/:submissionName',
|
||||
name: 'AssignmentSubmission',
|
||||
component: () => import('@/pages/AssignmentSubmission.vue'),
|
||||
props: true,
|
||||
},
|
||||
{
|
||||
path: '/certified-participants',
|
||||
name: 'CertifiedParticipants',
|
||||
@@ -193,6 +187,28 @@ const routes = [
|
||||
name: 'Programs',
|
||||
component: () => import('@/pages/Programs.vue'),
|
||||
},
|
||||
{
|
||||
path: '/assignments',
|
||||
name: 'Assignments',
|
||||
component: () => import('@/pages/Assignments.vue'),
|
||||
},
|
||||
{
|
||||
path: '/assignments/:assignmentID',
|
||||
name: 'AssignmentForm',
|
||||
component: () => import('@/pages/AssignmentForm.vue'),
|
||||
props: true,
|
||||
},
|
||||
{
|
||||
path: '/assignment-submission/:assignmentID/:submissionName',
|
||||
name: 'AssignmentSubmission',
|
||||
component: () => import('@/pages/AssignmentSubmission.vue'),
|
||||
props: true,
|
||||
},
|
||||
{
|
||||
path: '/assignment-submissions',
|
||||
name: 'AssignmentSubmissionList',
|
||||
component: () => import('@/pages/AssignmentSubmissionList.vue'),
|
||||
},
|
||||
]
|
||||
|
||||
let router = createRouter({
|
||||
|
||||
83
frontend/src/utils/assignment.js
Normal file
@@ -0,0 +1,83 @@
|
||||
import { Pencil } from 'lucide-vue-next'
|
||||
import { createApp, h } from 'vue'
|
||||
import AssessmentPlugin from '@/components/AssessmentPlugin.vue'
|
||||
import AssignmentBlock from '@/components/AssignmentBlock.vue'
|
||||
import translationPlugin from '../translation'
|
||||
import { usersStore } from '@/stores/user'
|
||||
import router from '../router'
|
||||
|
||||
export class Assignment {
|
||||
constructor({ data, api, readOnly }) {
|
||||
this.data = data
|
||||
this.readOnly = readOnly
|
||||
}
|
||||
|
||||
static get toolbox() {
|
||||
const app = createApp({
|
||||
render: () =>
|
||||
h(Pencil, { size: 18, strokeWidth: 1.5, color: 'black' }),
|
||||
})
|
||||
|
||||
const div = document.createElement('div')
|
||||
app.mount(div)
|
||||
|
||||
return {
|
||||
title: __('Assignment'),
|
||||
icon: div.innerHTML,
|
||||
}
|
||||
}
|
||||
|
||||
static get isReadOnlySupported() {
|
||||
return true
|
||||
}
|
||||
|
||||
render() {
|
||||
this.wrapper = document.createElement('div')
|
||||
if (Object.keys(this.data).length) {
|
||||
this.renderAssignment(this.data.assignment)
|
||||
} else {
|
||||
this.renderAssignmentModal()
|
||||
}
|
||||
return this.wrapper
|
||||
}
|
||||
|
||||
renderAssignment(assignment) {
|
||||
if (this.readOnly) {
|
||||
const app = createApp(AssignmentBlock, {
|
||||
assignmentID: assignment,
|
||||
})
|
||||
app.use(translationPlugin)
|
||||
app.use(router)
|
||||
const { userResource } = usersStore()
|
||||
app.provide('$user', userResource)
|
||||
app.mount(this.wrapper)
|
||||
return
|
||||
}
|
||||
this.wrapper.innerHTML = `<div class='border rounded-md p-10 text-center bg-gray-50 mb-2'>
|
||||
<span class="font-medium">
|
||||
Assignment: ${assignment}
|
||||
</span>
|
||||
</div>`
|
||||
return
|
||||
}
|
||||
|
||||
renderAssignmentModal() {
|
||||
if (this.readOnly) {
|
||||
return
|
||||
}
|
||||
const app = createApp(AssessmentPlugin, {
|
||||
onAddition: (assignment) => {
|
||||
this.data.assignment = assignment
|
||||
this.renderAssignment(assignment)
|
||||
},
|
||||
})
|
||||
app.use(translationPlugin)
|
||||
app.mount(this.wrapper)
|
||||
}
|
||||
|
||||
save(blockContent) {
|
||||
return {
|
||||
assignment: this.data.assignment,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
import { toast } from 'frappe-ui'
|
||||
import { useTimeAgo } from '@vueuse/core'
|
||||
import { Quiz } from '@/utils/quiz'
|
||||
import { Assignment } from '@/utils/assignment'
|
||||
import { Upload } from '@/utils/upload'
|
||||
import { Markdown } from '@/utils/markdownParser'
|
||||
import Header from '@editorjs/header'
|
||||
import Paragraph from '@editorjs/paragraph'
|
||||
import { CodeBox } from '@/utils/code'
|
||||
@@ -147,9 +149,16 @@ export function htmlToText(html) {
|
||||
|
||||
export function getEditorTools() {
|
||||
return {
|
||||
header: Header,
|
||||
header: {
|
||||
class: Header,
|
||||
config: {
|
||||
placeholder: 'Header',
|
||||
},
|
||||
},
|
||||
quiz: Quiz,
|
||||
assignment: Assignment,
|
||||
upload: Upload,
|
||||
markdown: Markdown,
|
||||
image: SimpleImage,
|
||||
table: Table,
|
||||
paragraph: {
|
||||
|
||||
156
frontend/src/utils/markdownParser.js
Normal file
@@ -0,0 +1,156 @@
|
||||
export class Markdown {
|
||||
constructor({ data, api, readOnly, config }) {
|
||||
this.api = api
|
||||
this.data = data || {}
|
||||
this.config = config || {}
|
||||
this.text = data.text || ''
|
||||
this.readOnly = readOnly
|
||||
}
|
||||
|
||||
static get isReadOnlySupported() {
|
||||
return true
|
||||
}
|
||||
|
||||
static get conversionConfig() {
|
||||
return {
|
||||
export: 'text',
|
||||
import: 'text',
|
||||
}
|
||||
}
|
||||
|
||||
onPaste(event) {
|
||||
const data = {
|
||||
text: event.detail.data.innerHTML,
|
||||
}
|
||||
|
||||
this.data = data
|
||||
|
||||
window.requestAnimationFrame(() => {
|
||||
if (!this.wrapper) {
|
||||
return
|
||||
}
|
||||
this.wrapper.innerHTML = this.data.text || ''
|
||||
})
|
||||
}
|
||||
|
||||
static get pasteConfig() {
|
||||
return {
|
||||
tags: ['P'],
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
this.wrapper = document.createElement('div')
|
||||
this.wrapper.classList.add('cdx-block')
|
||||
this.wrapper.classList.add('ce-paragraph')
|
||||
this.wrapper.innerHTML = this.text
|
||||
|
||||
if (!this.readOnly) {
|
||||
this.wrapper.contentEditable = true
|
||||
this.wrapper.innerHTML = this.text
|
||||
|
||||
this.wrapper.addEventListener('keydown', (event) => {
|
||||
const value = event.target.textContent
|
||||
if (event.keyCode === 32 && value.startsWith('#')) {
|
||||
this.convertToHeader(event, value)
|
||||
} else if (event.keyCode === 13) {
|
||||
this.parseContent(event)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return this.wrapper
|
||||
}
|
||||
|
||||
convertToHeader(event, value) {
|
||||
event.preventDefault()
|
||||
if (['#', '##', '###', '####', '#####', '######'].includes(value)) {
|
||||
let level = value.length
|
||||
event.target.textContent = ''
|
||||
this.convertBlock('header', {
|
||||
level: level,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
parseContent(event) {
|
||||
event.preventDefault()
|
||||
const previousLine = this.wrapper.textContent
|
||||
if (previousLine && this.hasImage(previousLine)) {
|
||||
this.wrapper.textContent = ''
|
||||
this.convertBlock('image')
|
||||
} else if (previousLine && this.hasLink(previousLine)) {
|
||||
const { text, url } = this.extractLink(previousLine)
|
||||
const anchorTag = `<a href="${url}" target="_blank">${text}</a>`
|
||||
this.convertBlock('paragraph', {
|
||||
text: previousLine.replace(/\[.+?\]\(.+?\)/, anchorTag),
|
||||
})
|
||||
} else if (previousLine && previousLine.startsWith('- ')) {
|
||||
this.convertBlock('list', {
|
||||
style: 'unordered',
|
||||
items: [
|
||||
{
|
||||
content: previousLine.replace('- ', ''),
|
||||
},
|
||||
],
|
||||
})
|
||||
} else if (previousLine && previousLine.startsWith('1. ')) {
|
||||
this.convertBlock('list', {
|
||||
style: 'ordered',
|
||||
items: [
|
||||
{
|
||||
content: previousLine.replace('1. ', ''),
|
||||
},
|
||||
],
|
||||
})
|
||||
} else if (previousLine && this.canBeEmbed(previousLine)) {
|
||||
this.wrapper.textContent = ''
|
||||
this.convertBlock('embed', {
|
||||
source: previousLine,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async convertBlock(type, data, index = null) {
|
||||
const currentIndex = this.api.blocks.getCurrentBlockIndex()
|
||||
const currentBlock = this.api.blocks.getBlockByIndex(currentIndex)
|
||||
await this.api.blocks.convert(currentBlock.id, type, data)
|
||||
this.api.caret.focus(true)
|
||||
}
|
||||
|
||||
save(blockContent) {
|
||||
return {
|
||||
text: blockContent.innerHTML,
|
||||
}
|
||||
}
|
||||
|
||||
hasImage(line) {
|
||||
return /!\[.+?\]\(.+?\)/.test(line)
|
||||
}
|
||||
|
||||
extractImage(line) {
|
||||
const match = line.match(/!\[(.+?)\]\((.+?)\)/)
|
||||
if (match) {
|
||||
return { alt: match[1], url: match[2] }
|
||||
}
|
||||
return { alt: '', url: '' }
|
||||
}
|
||||
|
||||
hasLink(line) {
|
||||
return /\[.+?\]\(.+?\)/.test(line)
|
||||
}
|
||||
|
||||
extractLink(line) {
|
||||
const match = line.match(/\[(.+?)\]\((.+?)\)/)
|
||||
if (match) {
|
||||
return { text: match[1], url: match[2] }
|
||||
}
|
||||
return { text: '', url: '' }
|
||||
}
|
||||
|
||||
canBeEmbed(line) {
|
||||
return /^https?:\/\/.+/.test(line)
|
||||
}
|
||||
}
|
||||
|
||||
export default Markdown
|
||||
@@ -1,5 +1,5 @@
|
||||
import QuizBlock from '@/components/QuizBlock.vue'
|
||||
import QuizPlugin from '@/components/QuizPlugin.vue'
|
||||
import AssessmentPlugin from '@/components/AssessmentPlugin.vue'
|
||||
import { createApp, h } from 'vue'
|
||||
import { usersStore } from '../stores/user'
|
||||
import translationPlugin from '../translation'
|
||||
@@ -63,8 +63,8 @@ export class Quiz {
|
||||
if (this.readOnly) {
|
||||
return
|
||||
}
|
||||
const app = createApp(QuizPlugin, {
|
||||
onQuizAddition: (quiz) => {
|
||||
const app = createApp(AssessmentPlugin, {
|
||||
onAddition: (quiz) => {
|
||||
this.data.quiz = quiz
|
||||
this.renderQuiz(quiz)
|
||||
},
|
||||
|
||||
@@ -471,6 +471,33 @@
|
||||
resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2"
|
||||
integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==
|
||||
|
||||
"@svgdotjs/svg.draggable.js@^3.0.4":
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.4.tgz#505430e86b5e73b5b5abba12ac6002633897324e"
|
||||
integrity sha512-vWi/Col5Szo74HJVBgMHz23kLVljt3jvngmh0DzST45iO2ubIZ487uUAHIxSZH2tVRyiaaTL+Phaasgp4gUD2g==
|
||||
|
||||
"@svgdotjs/svg.filter.js@^3.0.8":
|
||||
version "3.0.8"
|
||||
resolved "https://registry.yarnpkg.com/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.8.tgz#998cb2481a871fa70d7dbaa891c886b335c562d7"
|
||||
integrity sha512-YshF2YDaeRA2StyzAs5nUPrev7npQ38oWD0eTRwnsciSL2KrRPMoUw8BzjIXItb3+dccKGTX3IQOd2NFzmHkog==
|
||||
dependencies:
|
||||
"@svgdotjs/svg.js" "^3.1.1"
|
||||
|
||||
"@svgdotjs/svg.js@^3.1.1", "@svgdotjs/svg.js@^3.2.4":
|
||||
version "3.2.4"
|
||||
resolved "https://registry.yarnpkg.com/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz#4716be92a64c66b29921b63f7235fcfb953fb13a"
|
||||
integrity sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==
|
||||
|
||||
"@svgdotjs/svg.resize.js@^2.0.2":
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz#732e4cae15d09ad3021adeac63bc9fad0dc7255a"
|
||||
integrity sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==
|
||||
|
||||
"@svgdotjs/svg.select.js@^4.0.1":
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz#80a10409e6c73206218690eac5c9f94f8c8909b5"
|
||||
integrity sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g==
|
||||
|
||||
"@swc/helpers@^0.5.0":
|
||||
version "0.5.15"
|
||||
resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7"
|
||||
@@ -887,6 +914,11 @@
|
||||
dependencies:
|
||||
vue-demi ">=0.14.8"
|
||||
|
||||
"@yr/monotone-cubic-spline@^1.0.3":
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz#7272d89f8e4f6fb7a1600c28c378cc18d3b577b9"
|
||||
integrity sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==
|
||||
|
||||
ace-builds@^1.36.2:
|
||||
version "1.36.5"
|
||||
resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.36.5.tgz#ae9cc7a32eccc2f484926131c00545cd6b78a6a6"
|
||||
@@ -927,6 +959,18 @@ anymatch@~3.1.2:
|
||||
normalize-path "^3.0.0"
|
||||
picomatch "^2.0.4"
|
||||
|
||||
apexcharts@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-4.3.0.tgz#eccf28e830ce1b5e018cfc0e99d1c6af0076c9c7"
|
||||
integrity sha512-PfvZQpv91T68hzry9l5zP3Gip7sQvF0nFK91uCBrswIKX7rbIdbVNS4fOks9m9yP3Ppgs6LHgU2M/mjoG4NM0A==
|
||||
dependencies:
|
||||
"@svgdotjs/svg.draggable.js" "^3.0.4"
|
||||
"@svgdotjs/svg.filter.js" "^3.0.8"
|
||||
"@svgdotjs/svg.js" "^3.2.4"
|
||||
"@svgdotjs/svg.resize.js" "^2.0.2"
|
||||
"@svgdotjs/svg.select.js" "^4.0.1"
|
||||
"@yr/monotone-cubic-spline" "^1.0.3"
|
||||
|
||||
arg@^5.0.2:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
|
||||
@@ -2164,6 +2208,11 @@ vue-router@^4.0.12:
|
||||
dependencies:
|
||||
"@vue/devtools-api" "^6.6.4"
|
||||
|
||||
vue3-apexcharts@^1.8.0:
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/vue3-apexcharts/-/vue3-apexcharts-1.8.0.tgz#1984648d966aa91bc4dc3e87fa847f5289f7f1cf"
|
||||
integrity sha512-5tSD4mXTBbIJ9ir+58qHE6oNtIe0RNgqIRYMKpcsIaxkKtwUww4JhvPkpUFlmiW4OJbbdklgjleXq1lfcM4gdA==
|
||||
|
||||
vue@^3.4.23:
|
||||
version "3.5.13"
|
||||
resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a"
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = "2.16.0"
|
||||
__version__ = "2.18.0"
|
||||
|
||||
@@ -17,6 +17,7 @@ from frappe.utils import time_diff, now_datetime, get_datetime, flt
|
||||
from typing import Optional
|
||||
from lms.lms.utils import get_average_rating, get_lesson_count
|
||||
from xml.dom.minidom import parseString
|
||||
from lms.lms.doctype.course_lesson.course_lesson import save_progress
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
@@ -168,6 +169,7 @@ def get_user_info():
|
||||
user.is_instructor = "Course Creator" in user.roles
|
||||
user.is_moderator = "Moderator" in user.roles
|
||||
user.is_evaluator = "Batch Evaluator" in user.roles
|
||||
user.is_student = "LMS Student" in user.roles
|
||||
return user
|
||||
|
||||
|
||||
@@ -841,8 +843,6 @@ def delete_course(course):
|
||||
frappe.delete_doc("Lesson Reference", lesson)
|
||||
|
||||
for lesson in lessons:
|
||||
frappe.db.delete("LMS Course Progress", {"lesson": lesson})
|
||||
|
||||
topics = frappe.get_all(
|
||||
"Discussion Topic",
|
||||
{"reference_doctype": "Course Lesson", "reference_docname": lesson},
|
||||
@@ -862,6 +862,9 @@ def delete_course(course):
|
||||
for chapter in chapters:
|
||||
frappe.delete_doc("Course Chapter", chapter)
|
||||
|
||||
frappe.db.delete("LMS Course Progress", {"course": course})
|
||||
frappe.db.delete("LMS Quiz", {"course": course})
|
||||
frappe.db.delete("LMS Quiz Submission", {"course": course})
|
||||
frappe.db.delete("LMS Enrollment", {"course": course})
|
||||
frappe.delete_doc("LMS Course", course)
|
||||
|
||||
@@ -1029,3 +1032,14 @@ def delete_scorm_package(scorm_package_path):
|
||||
scorm_package_path = frappe.get_site_path("public", scorm_package_path[1:])
|
||||
if os.path.exists(scorm_package_path):
|
||||
shutil.rmtree(scorm_package_path)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def mark_lesson_progress(course, chapter_number, lesson_number):
|
||||
chapter_name = frappe.get_value(
|
||||
"Chapter Reference", {"parent": course, "idx": chapter_number}, "chapter"
|
||||
)
|
||||
lesson_name = frappe.get_value(
|
||||
"Lesson Reference", {"parent": chapter_name, "idx": lesson_number}, "lesson"
|
||||
)
|
||||
save_progress(lesson_name, course)
|
||||
|
||||
@@ -89,27 +89,25 @@ def save_progress(lesson, course):
|
||||
"LMS Enrollment", {"course": course, "member": frappe.session.user}
|
||||
)
|
||||
if not membership:
|
||||
return
|
||||
|
||||
frappe.db.set_value("LMS Enrollment", membership, "current_lesson", lesson)
|
||||
|
||||
if frappe.db.exists(
|
||||
"LMS Course Progress", {"lesson": lesson, "member": frappe.session.user}
|
||||
):
|
||||
return
|
||||
|
||||
quiz_completed = get_quiz_progress(lesson)
|
||||
if not quiz_completed:
|
||||
return 0
|
||||
|
||||
frappe.get_doc(
|
||||
{
|
||||
"doctype": "LMS Course Progress",
|
||||
"lesson": lesson,
|
||||
"status": "Complete",
|
||||
"member": frappe.session.user,
|
||||
}
|
||||
).save(ignore_permissions=True)
|
||||
frappe.db.set_value("LMS Enrollment", membership, "current_lesson", lesson)
|
||||
already_completed = frappe.db.exists(
|
||||
"LMS Course Progress", {"lesson": lesson, "member": frappe.session.user}
|
||||
)
|
||||
|
||||
quiz_completed = get_quiz_progress(lesson)
|
||||
assignment_completed = get_assignment_progress(lesson)
|
||||
|
||||
if not already_completed and quiz_completed and assignment_completed:
|
||||
frappe.get_doc(
|
||||
{
|
||||
"doctype": "LMS Course Progress",
|
||||
"lesson": lesson,
|
||||
"status": "Complete",
|
||||
"member": frappe.session.user,
|
||||
}
|
||||
).save(ignore_permissions=True)
|
||||
|
||||
progress = get_course_progress(course)
|
||||
capture_progress_for_analytics(progress, course)
|
||||
@@ -159,6 +157,32 @@ def get_quiz_progress(lesson):
|
||||
return True
|
||||
|
||||
|
||||
def get_assignment_progress(lesson):
|
||||
lesson_details = frappe.db.get_value(
|
||||
"Course Lesson", lesson, ["body", "content"], as_dict=1
|
||||
)
|
||||
assignments = []
|
||||
|
||||
if lesson_details.content:
|
||||
content = json.loads(lesson_details.content)
|
||||
|
||||
for block in content.get("blocks"):
|
||||
if block.get("type") == "assignment":
|
||||
assignments.append(block.get("data").get("assignment"))
|
||||
|
||||
elif lesson_details.body:
|
||||
macros = find_macros(lesson_details.body)
|
||||
assignments = [value for name, value in macros if name == "Assignment"]
|
||||
|
||||
for assignment in assignments:
|
||||
if not frappe.db.exists(
|
||||
"LMS Assignment Submission",
|
||||
{"assignment": assignment, "member": frappe.session.user},
|
||||
):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_lesson_info(chapter):
|
||||
return frappe.db.get_value("Course Chapter", chapter, "course")
|
||||
|
||||
@@ -9,10 +9,11 @@
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"title",
|
||||
"grade_assignment",
|
||||
"question",
|
||||
"column_break_hmwv",
|
||||
"type",
|
||||
"grade_assignment",
|
||||
"section_break_sjti",
|
||||
"show_answer",
|
||||
"answer"
|
||||
],
|
||||
@@ -20,7 +21,8 @@
|
||||
{
|
||||
"fieldname": "question",
|
||||
"fieldtype": "Text Editor",
|
||||
"label": "Question"
|
||||
"label": "Question",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "type",
|
||||
@@ -28,14 +30,16 @@
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Type",
|
||||
"options": "Document\nPDF\nURL\nImage\nText"
|
||||
"options": "Document\nPDF\nURL\nImage\nText",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "title",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Title"
|
||||
"label": "Title",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_hmwv",
|
||||
@@ -60,11 +64,15 @@
|
||||
"fieldname": "grade_assignment",
|
||||
"fieldtype": "Check",
|
||||
"label": "Grade Assignment"
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_sjti",
|
||||
"fieldtype": "Section Break"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-04-05 12:01:36.601160",
|
||||
"modified": "2024-12-24 09:36:31.464508",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "LMS Assignment",
|
||||
|
||||
@@ -14,19 +14,17 @@
|
||||
"member",
|
||||
"member_name",
|
||||
"section_break_dlzh",
|
||||
"question",
|
||||
"column_break_zvis",
|
||||
"assignment_attachment",
|
||||
"answer",
|
||||
"section_break_rqal",
|
||||
"status",
|
||||
"column_break_oqqy",
|
||||
"evaluator",
|
||||
"column_break_esgd",
|
||||
"status",
|
||||
"comments",
|
||||
"section_break_cwaw",
|
||||
"lesson",
|
||||
"section_break_rqal",
|
||||
"question",
|
||||
"column_break_esgd",
|
||||
"course",
|
||||
"column_break_ygdu"
|
||||
"lesson"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
@@ -89,8 +87,7 @@
|
||||
"fieldname": "evaluator",
|
||||
"fieldtype": "Link",
|
||||
"label": "Evaluator",
|
||||
"options": "User",
|
||||
"read_only": 1
|
||||
"options": "User"
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:!([\"URL\", \"Text\"]).includes(doc.type);",
|
||||
@@ -128,14 +125,6 @@
|
||||
"fieldname": "column_break_esgd",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_cwaw",
|
||||
"fieldtype": "Section Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_ygdu",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:([\"URL\", \"Text\"]).includes(doc.type);",
|
||||
"fieldname": "answer",
|
||||
@@ -148,14 +137,14 @@
|
||||
"fieldtype": "Section Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_zvis",
|
||||
"fieldname": "column_break_oqqy",
|
||||
"fieldtype": "Column Break"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"make_attachments_public": 1,
|
||||
"modified": "2024-04-05 15:57:22.758563",
|
||||
"modified": "2024-12-24 21:22:35.212732",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "LMS Assignment Submission",
|
||||
|
||||
@@ -6,12 +6,14 @@ from frappe import _
|
||||
from frappe.model.document import Document
|
||||
from frappe.utils import validate_url, validate_email_address
|
||||
from frappe.email.doctype.email_template.email_template import get_email_template
|
||||
from frappe.desk.doctype.notification_log.notification_log import make_notification_logs
|
||||
|
||||
|
||||
class LMSAssignmentSubmission(Document):
|
||||
def validate(self):
|
||||
self.validate_duplicates()
|
||||
self.validate_url()
|
||||
self.validate_status()
|
||||
|
||||
def after_insert(self):
|
||||
if not frappe.flags.in_test:
|
||||
@@ -69,6 +71,28 @@ class LMSAssignmentSubmission(Document):
|
||||
header=[subject, "green"],
|
||||
)
|
||||
|
||||
def validate_status(self):
|
||||
doc_before_save = self.get_doc_before_save()
|
||||
if doc_before_save.status != self.status or doc_before_save.comments != self.comments:
|
||||
self.trigger_update_notification()
|
||||
|
||||
def trigger_update_notification(self):
|
||||
notification = frappe._dict(
|
||||
{
|
||||
"subject": _(
|
||||
"There has been an update on your submission for assignment {0}"
|
||||
).format(self.assignment_title),
|
||||
"email_content": self.comments,
|
||||
"document_type": self.doctype,
|
||||
"document_name": self.name,
|
||||
"for_user": self.owner,
|
||||
"from_user": self.evaluator,
|
||||
"type": "Alert",
|
||||
"link": f"/assignment-submission/{self.assignment}/{self.name}",
|
||||
}
|
||||
)
|
||||
make_notification_logs(notification, [self.member])
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def upload_assignment(
|
||||
|
||||
@@ -17,6 +17,7 @@ class LMSQuizSubmission(Document):
|
||||
self.notify_member()
|
||||
|
||||
def validate_marks(self):
|
||||
self.score = 0
|
||||
for row in self.result:
|
||||
if cint(row.marks) > cint(row.marks_out_of):
|
||||
frappe.throw(
|
||||
|
||||
@@ -874,26 +874,6 @@ def is_onboarding_complete():
|
||||
}
|
||||
|
||||
|
||||
def has_submitted_assessment(assessment, type, member=None):
|
||||
if not member:
|
||||
member = frappe.session.user
|
||||
|
||||
doctype = (
|
||||
"LMS Assignment Submission" if type == "LMS Assignment" else "LMS Quiz Submission"
|
||||
)
|
||||
docfield = "assignment" if type == "LMS Assignment" else "quiz"
|
||||
|
||||
filters = {}
|
||||
filters[docfield] = assessment
|
||||
filters["member"] = member
|
||||
return frappe.db.exists(doctype, filters)
|
||||
|
||||
|
||||
def has_graded_assessment(submission):
|
||||
status = frappe.db.get_value("LMS Assignment Submission", submission, "status")
|
||||
return False if status == "Not Graded" else True
|
||||
|
||||
|
||||
def get_evaluator(course, batch):
|
||||
evaluator = None
|
||||
evaluator = frappe.db.get_value(
|
||||
@@ -1347,7 +1327,6 @@ def get_question_details(question):
|
||||
for i in range(1, 5):
|
||||
fields.append(f"option_{i}")
|
||||
fields.append(f"explanation_{i}")
|
||||
fields.append(f"is_correct_{i}")
|
||||
|
||||
question_details = frappe.db.get_value("LMS Question", question, fields, as_dict=1)
|
||||
return question_details
|
||||
@@ -1441,7 +1420,7 @@ def get_quiz_details(assessment, member):
|
||||
if len(existing_submission):
|
||||
assessment.submission = existing_submission[0]
|
||||
assessment.completed = True
|
||||
assessment.status = assessment.submission.score
|
||||
assessment.status = assessment.submission.percentage or assessment.submission.score
|
||||
else:
|
||||
assessment.status = "Not Attempted"
|
||||
assessment.color = "red"
|
||||
@@ -1459,13 +1438,11 @@ def get_quiz_details(assessment, member):
|
||||
@frappe.whitelist()
|
||||
def get_batch_students(batch):
|
||||
students = []
|
||||
|
||||
students_list = frappe.get_all(
|
||||
"Batch Student", filters={"parent": batch}, fields=["student", "name"]
|
||||
)
|
||||
|
||||
batch_courses = frappe.get_all("Batch Course", {"parent": batch}, pluck="course")
|
||||
|
||||
batch_courses = frappe.get_all("Batch Course", {"parent": batch}, ["course", "title"])
|
||||
assessments = frappe.get_all(
|
||||
"LMS Assessment",
|
||||
filters={"parent": batch},
|
||||
@@ -1483,29 +1460,76 @@ def get_batch_students(batch):
|
||||
)
|
||||
detail.last_active = format_datetime(detail.last_active, "dd MMM YY")
|
||||
detail.name = student.name
|
||||
students.append(detail)
|
||||
detail.courses = frappe._dict()
|
||||
detail.assessments = frappe._dict()
|
||||
|
||||
""" Iterate through courses and track their progress """
|
||||
for course in batch_courses:
|
||||
progress = frappe.db.get_value(
|
||||
"LMS Enrollment", {"course": course, "member": student.student}, "progress"
|
||||
"LMS Enrollment", {"course": course.course, "member": student.student}, "progress"
|
||||
)
|
||||
|
||||
detail.courses[course.title] = progress
|
||||
if progress == 100:
|
||||
courses_completed += 1
|
||||
|
||||
detail.courses_completed = courses_completed
|
||||
|
||||
""" Iterate through assessments and track their progress """
|
||||
for assessment in assessments:
|
||||
if has_submitted_assessment(
|
||||
title = frappe.db.get_value(
|
||||
assessment.assessment_type, assessment.assessment_name, "title"
|
||||
)
|
||||
status = has_submitted_assessment(
|
||||
assessment.assessment_name, assessment.assessment_type, student.student
|
||||
):
|
||||
)
|
||||
detail.assessments[title] = status
|
||||
if status not in ["Not Attempted", 0]:
|
||||
assessments_completed += 1
|
||||
|
||||
detail.courses_completed = courses_completed
|
||||
detail.assessments_completed = assessments_completed
|
||||
if len(batch_courses) + len(assessments):
|
||||
detail.progress = flt(
|
||||
(
|
||||
(courses_completed + assessments_completed)
|
||||
/ (len(batch_courses) + len(assessments))
|
||||
* 100
|
||||
),
|
||||
2,
|
||||
)
|
||||
else:
|
||||
detail.progress = 0
|
||||
|
||||
students.append(detail)
|
||||
|
||||
return students
|
||||
|
||||
|
||||
def has_submitted_assessment(assessment, assessment_type, member=None):
|
||||
if not member:
|
||||
member = frappe.session.user
|
||||
|
||||
if assessment_type == "LMS Assignment":
|
||||
doctype = "LMS Assignment Submission"
|
||||
docfield = "assignment"
|
||||
fields = ["status"]
|
||||
not_attempted = "Not Attempted"
|
||||
elif assessment_type == "LMS Quiz":
|
||||
doctype = "LMS Quiz Submission"
|
||||
docfield = "quiz"
|
||||
fields = ["percentage"]
|
||||
not_attempted = 0
|
||||
|
||||
filters = {}
|
||||
filters[docfield] = assessment
|
||||
filters["member"] = member
|
||||
|
||||
attempt = frappe.db.exists(doctype, filters)
|
||||
if attempt:
|
||||
attempt_details = frappe.db.get_value(doctype, filters, fields)
|
||||
return attempt_details
|
||||
else:
|
||||
return not_attempted
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_discussion_topics(doctype, docname, single_thread):
|
||||
if single_thread:
|
||||
|
||||
100
lms/locale/ar.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:30\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Arabic\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "نشط"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr ""
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr ""
|
||||
@@ -374,6 +379,8 @@ msgstr ""
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr ""
|
||||
msgid "Completed"
|
||||
msgstr "أكتمل"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr ""
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "حذف"
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr "الروابط"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr ""
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "تحميل المزيد"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr ""
|
||||
msgid "Marks"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "متوسط:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "التالي"
|
||||
msgid "Next Question"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr ""
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr ""
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr ""
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "معلق"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "النسبة المئوية"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "يرجى التحقق من بريدك الالكتروني للتحقق"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr ""
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr "حالة"
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr ""
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "ملخص"
|
||||
msgid "Sunday"
|
||||
msgstr "الأحد"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr ""
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr ""
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr "إلى"
|
||||
msgid "To Date"
|
||||
msgstr "إلى تاريخ"
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr "الاجمالي غير شامل الضريبة"
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5537,11 +5555,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
100
lms/locale/bs.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Bosnian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "Aktivan"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr ""
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr ""
|
||||
@@ -374,6 +379,8 @@ msgstr ""
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr ""
|
||||
msgid "Completed"
|
||||
msgstr "Završeno"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr ""
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "Izbriši"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "Izbriši"
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr "Veze"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr ""
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "Učitaj još"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr ""
|
||||
msgid "Marks"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "Srednje:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "Sljedeći"
|
||||
msgid "Next Question"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr ""
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr ""
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr "Prolaz"
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "Na čekanju"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "Procenat"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "Molimo provjerite svoju e-poštu za potvrdu"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr ""
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr ""
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr ""
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr ""
|
||||
msgid "Sunday"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr ""
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr ""
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr ""
|
||||
msgid "To Date"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5537,11 +5555,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
100
lms/locale/de.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: German\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "Aktiv"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr "Kurs hinzufügen"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr "Benutzerkategorie bei der Anmeldung erfragen"
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr "Prüfung"
|
||||
@@ -374,6 +379,8 @@ msgstr ""
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr "Unternehmenswebseite"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr ""
|
||||
msgid "Completed"
|
||||
msgstr "Abgeschlossen"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr ""
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr "Abschlussart"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "Löschen"
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr "Anzahl der Einschreibungen"
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr "Geben Sie die richtige Antwort ein"
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr "Verknüpfungen"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr ""
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "Mehr laden"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr "Als gelesen markieren"
|
||||
msgid "Marks"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "Mittel:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "Weiter"
|
||||
msgid "Next Question"
|
||||
msgstr "Nächste Frage"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr ""
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr "Keine Live-Kurse geplant"
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr "Es werden nur Dateien vom Typ {0} akzeptiert."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr "Erfolgreich"
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "Ausstehend"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "Prozentsatz"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "Bitte überprüfen Sie Ihren Posteingang. Wir haben Ihnen eine E-Mail mi
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr "Bitte klicken Sie auf die folgende Schaltfläche, um Ihr neues Passwort festzulegen"
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr "Quiz-Einreichung"
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr "Das Quiz wird am Ende der Lektion angezeigt."
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr "Geltungsbereich"
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr "Bundesland"
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr ""
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr "Schüler"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "Zusammenfassung"
|
||||
msgid "Sunday"
|
||||
msgstr "Sonntag"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr ""
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr "Dieses Zertifikat läuft nicht ab"
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr "Dieser Kurs ist kostenlos."
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr "An"
|
||||
msgid "To Date"
|
||||
msgstr "Bis-Datum"
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr "Um dieser Gruppe beizutreten, wenden Sie sich bitte an den Administrator."
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr "Summe"
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5537,11 +5555,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
100
lms/locale/eo.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Esperanto\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "crwdns149210:0crwdne149210:0"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr "crwdns151726:0crwdne151726:0"
|
||||
msgid "Add a course"
|
||||
msgstr "crwdns149226:0crwdne149226:0"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr "crwdns152004:0crwdne152004:0"
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr "crwdns151728:0crwdne151728:0"
|
||||
@@ -349,6 +353,7 @@ msgstr "crwdns149298:0crwdne149298:0"
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr "crwdns149300:0crwdne149300:0"
|
||||
@@ -374,6 +379,8 @@ msgstr "crwdns149308:0{0}crwdne149308:0"
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr "crwdns149514:0crwdne149514:0"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr "crwdns149518:0crwdne149518:0"
|
||||
msgid "Completed"
|
||||
msgstr "crwdns149520:0crwdne149520:0"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr "crwdns152082:0crwdne152082:0"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr "crwdns149522:0crwdne149522:0"
|
||||
@@ -1231,7 +1243,7 @@ msgstr "crwdns151734:0crwdne151734:0"
|
||||
msgid "Course already added to the batch."
|
||||
msgstr "crwdns149592:0crwdne149592:0"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr "crwdns151586:0crwdne151586:0"
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr "crwdns149596:0{0}crwdne149596:0"
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr "crwdns149644:0crwdne149644:0"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "crwdns149646:0crwdne149646:0"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "crwdns149646:0crwdne149646:0"
|
||||
msgid "Delete Chapter"
|
||||
msgstr "crwdns151626:0crwdne151626:0"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr "crwdns151588:0crwdne151588:0"
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr "crwdns151628:0crwdne151628:0"
|
||||
msgid "Delete this lesson?"
|
||||
msgstr "crwdns151630:0crwdne151630:0"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr "crwdns151590:0crwdne151590:0"
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr "crwdns149728:0crwdne149728:0"
|
||||
msgid "Enrollment Count"
|
||||
msgstr "crwdns149730:0crwdne149730:0"
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr "crwdns149732:0crwdne149732:0"
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr "crwdns149742:0crwdne149742:0"
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr "crwdns149998:0crwdne149998:0"
|
||||
msgid "Join URL"
|
||||
msgstr "crwdns150000:0crwdne150000:0"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr "crwdns151476:0crwdne151476:0"
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr "crwdns150100:0crwdne150100:0"
|
||||
msgid "Links"
|
||||
msgstr "crwdns150102:0crwdne150102:0"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr "crwdns150104:0crwdne150104:0"
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr "crwdns150108:0crwdne150108:0"
|
||||
msgid "LiveCode URL"
|
||||
msgstr "crwdns150110:0crwdne150110:0"
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "crwdns150112:0crwdne150112:0"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr "crwdns150142:0crwdne150142:0"
|
||||
msgid "Marks"
|
||||
msgstr "crwdns150144:0crwdne150144:0"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr "crwdns150146:0{0}crwdne150146:0"
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "crwdns150158:0crwdne150158:0"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "crwdns150238:0crwdne150238:0"
|
||||
msgid "Next Question"
|
||||
msgstr "crwdns150240:0crwdne150240:0"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr "crwdns150242:0crwdne150242:0"
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr "crwdns150262:0crwdne150262:0"
|
||||
msgid "No programs found"
|
||||
msgstr "crwdns151768:0crwdne151768:0"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr "crwdns151592:0crwdne151592:0"
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr "crwdns151770:0crwdne151770:0"
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr "crwdns150308:0{0}crwdne150308:0"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr "crwdns150310:0crwdne150310:0"
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr "crwdns150362:0crwdne150362:0"
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "crwdns150390:0crwdne150390:0"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "crwdns150392:0crwdne150392:0"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "crwdns150404:0crwdne150404:0"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr "crwdns150406:0crwdne150406:0"
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr "crwdns151772:0crwdne151772:0"
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr "crwdns151794:0crwdne151794:0"
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr "crwdns150520:0crwdne150520:0"
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr "crwdns150526:0crwdne150526:0"
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr "crwdns150528:0crwdne150528:0"
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr "crwdns150538:0crwdne150538:0"
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr "crwdns150540:0crwdne150540:0"
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr "crwdns150542:0crwdne150542:0"
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr "crwdns150620:0crwdne150620:0"
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr "crwdns150730:0crwdne150730:0"
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr "crwdns150746:0{0}crwdne150746:0"
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr "crwdns150748:0crwdne150748:0"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr "crwdns150750:0crwdne150750:0"
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr "crwdns150766:0{0}crwdne150766:0"
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr "crwdns150766:0{0}crwdne150766:0"
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "crwdns150770:0crwdne150770:0"
|
||||
msgid "Sunday"
|
||||
msgstr "crwdns150772:0crwdne150772:0"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr "crwdns151930:0{0}crwdnd151930:0{1}crwdne151930:0"
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr "crwdns151798:0crwdne151798:0"
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr "crwdns150808:0crwdne150808:0"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr "crwdns150810:0crwdne150810:0"
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr "crwdns150810:0crwdne150810:0"
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr "crwdns150812:0{0}crwdne150812:0"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr "crwdns151850:0{0}crwdnd151850:0{1}crwdne151850:0"
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr "crwdns150818:0crwdne150818:0"
|
||||
msgid "This course has:"
|
||||
msgstr "crwdns150820:0crwdne150820:0"
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr "crwdns150822:0crwdne150822:0"
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr "crwdns150848:0crwdne150848:0"
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr "crwdns150852:0crwdne150852:0"
|
||||
msgid "To Date"
|
||||
msgstr "crwdns150854:0crwdne150854:0"
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr "crwdns150858:0crwdne150858:0"
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr "crwdns150864:0crwdne150864:0"
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr "crwdns150866:0crwdne150866:0"
|
||||
@@ -5537,11 +5555,11 @@ msgstr "crwdns151014:0crwdne151014:0"
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr "crwdns151016:0crwdne151016:0"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr "crwdns151852:0{0}crwdnd151852:0{1}crwdne151852:0"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr "crwdns151594:0crwdne151594:0"
|
||||
|
||||
|
||||
100
lms/locale/es.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:30\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Spanish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "Activo"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr "Añadir un curso"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr "Preguntar categoría de usuario durante el registro"
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr "Evaluación"
|
||||
@@ -374,6 +379,8 @@ msgstr "La evaluación {0} ya se ha agregado a este lote."
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr "Página Web de la empresa"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr "Completar registro"
|
||||
msgid "Completed"
|
||||
msgstr "Completado"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr "Certificado de finalización"
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr "Curso ya agregado al lote."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr "El curso {0} ya se ha agregado a este lote."
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr "Tipo de Grado"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "Eliminar"
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr "Confirmación de inscripción para el próximo Lote de Entrenamiento"
|
||||
msgid "Enrollment Count"
|
||||
msgstr "Recuento de inscripciones"
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr "Error al inscribirse"
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr "Ingrese la respuesta correcta"
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr "Unirse a la reunión"
|
||||
msgid "Join URL"
|
||||
msgstr "Unirse a URL"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr "Palabras claves del curso"
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr "ID de LinkedIn"
|
||||
msgid "Links"
|
||||
msgstr "Enlaces"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr "Lista de cuestionarios"
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr "Clase en vivo"
|
||||
msgid "LiveCode URL"
|
||||
msgstr "URL LiveCode"
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "Carga más"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr "Marcar como leído"
|
||||
msgid "Marks"
|
||||
msgstr "Marcas"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr "Las calificaciones para la pregunta número {0} no pueden ser mayores que las calificaciones asignadas para esa pregunta."
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "Medio:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "Siguiente"
|
||||
msgid "Next Question"
|
||||
msgstr "Siguiente pregunta"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr "Sin evaluaciones"
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr "No hay clases en vivo programadas"
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr "Sólo se aceptarán archivos del tipo {0}."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr "Sólo se permiten archivos de imagen."
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr "Aprobar"
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "Pendiente"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "Porcentaje"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "Por favor, consultar su correo electrónico para la verificación"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr "Haga clic en el siguiente botón para establecer su nueva contraseña"
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr "Preguntas eliminadas correctamente"
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr "Envíos de cuestionarios"
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr "Envíos de cuestionarios"
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr "Cuestionario actualizado correctamente"
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr "El cuestionario aparecerá al final de la lección."
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr "Cuestionarios"
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr "Alcance"
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr "Estado"
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr "El estudiante {0} ya ha sido añadido a este lote."
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr "Estudiantes"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr "Estudiantes eliminados correctamente"
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr "Enviado {0}"
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr "Enviado {0}"
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "Resumen"
|
||||
msgid "Sunday"
|
||||
msgstr "Domingo"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr "No hay asientos disponibles en este lote."
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr "No hay estudiantes en este lote."
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr "No hay estudiantes en este lote."
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr "No hay {0} en este sitio."
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr "Este certificado no caduca"
|
||||
msgid "This course has:"
|
||||
msgstr "Este curso tiene:"
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr "Este curso es gratuito."
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr "Horarios:"
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr "A"
|
||||
msgid "To Date"
|
||||
msgstr "Hasta la fecha"
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr "Para unirse a este lote, comuníquese con el Administrador."
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr "Marcas totales"
|
||||
@@ -5537,11 +5555,11 @@ msgstr "Te has inscrito en este grupo"
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr "Te has inscrito en este curso"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
108
lms/locale/fa.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2025-01-01 03:30\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Persian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "فعال"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr "دوره را اضافه کنید"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr "یک کلمه کلیدی اضافه کنید و سپس اینتر را فشار دهید"
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr "هنگام ثبت نام از نوع کاربری بپرسید"
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr "ارزیابی"
|
||||
@@ -374,6 +379,8 @@ msgstr "ارزیابی {0} قبلاً به این دسته اضافه شده ا
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr "وب سایت شرکت"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr ""
|
||||
msgid "Completed"
|
||||
msgstr "تکمیل شد"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr "دوره قبلاً به دسته اضافه شده است."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr "دوره با موفقیت حذف شد"
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr "دوره {0} قبلاً به این دسته اضافه شده است."
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr "نوع مدرک"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "حذف"
|
||||
msgid "Delete Chapter"
|
||||
msgstr "حذف فصل"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr "حذف دوره"
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr "این فصل حذف شود؟"
|
||||
msgid "Delete this lesson?"
|
||||
msgstr "این درس حذف شود؟"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr "پاسخ صحیح را وارد کنید"
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2401,7 +2417,7 @@ msgstr "موارد موجود در نوار کناری"
|
||||
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
msgid "Items removed successfully"
|
||||
msgstr ""
|
||||
msgstr "آیتمها با موفقیت حذف شدند"
|
||||
|
||||
#: lms/templates/signup-form.html:6
|
||||
msgid "Jane Doe"
|
||||
@@ -2467,10 +2483,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr "پیوندها"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr "کلاس زنده"
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "بارگذاری بیشتر"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr "علامتگذاری به عنوان خوانده شد"
|
||||
msgid "Marks"
|
||||
msgstr "نمرات"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "متوسط:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "بعد"
|
||||
msgid "Next Question"
|
||||
msgstr "سؤال بعدی"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr ""
|
||||
|
||||
@@ -3265,7 +3279,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/pages/Courses.vue:147
|
||||
msgid "No courses found"
|
||||
msgstr ""
|
||||
msgstr "هیچ دوره ای پیدا نشد"
|
||||
|
||||
#: frontend/src/pages/Programs.vue:83
|
||||
msgid "No courses in this program"
|
||||
@@ -3291,7 +3305,7 @@ msgstr ""
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr "فقط فایل هایی از نوع {0} پذیرفته می شوند."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr ""
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "انتظار"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "درصد"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "لطفا ایمیل خود را برای تایید بررسی کنید"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3767,11 +3781,11 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/Modals/LiveClassModal.vue:170
|
||||
msgid "Please select a time."
|
||||
msgstr ""
|
||||
msgstr "لطفا زمانی را انتخاب کنید."
|
||||
|
||||
#: frontend/src/components/Modals/LiveClassModal.vue:173
|
||||
msgid "Please select a timezone."
|
||||
msgstr ""
|
||||
msgstr "لطفاً یک منطقه زمانی انتخاب کنید."
|
||||
|
||||
#: lms/templates/emails/job_report.html:6
|
||||
msgid "Please take appropriate action at {0}"
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr "تکلیف زیر درس نشان داده می شود."
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr "محدوده"
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr "حالت"
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr "دانشآموز {0} قبلاً به این دسته اضافه شد
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr "دانشآموزان"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "خلاصه"
|
||||
msgid "Sunday"
|
||||
msgstr "یکشنبه"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr "هیچ دانشآموزی در این گروه وجود ندارد."
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr "هیچ دانشآموزی در این گروه وجود ندارد."
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr "هیچ {0} در این سایت وجود ندارد."
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr ""
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr "به"
|
||||
msgid "To Date"
|
||||
msgstr "تا تاریخ"
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr "جمع"
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5537,11 +5555,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
100
lms/locale/fr.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:30\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: French\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "actif"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr "Ajouter un cours"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr "Demandez la catégorie de l'utilisateur lors de l'inscription"
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr "Évaluation"
|
||||
@@ -374,6 +379,8 @@ msgstr "L'évaluation {0} a déjà été ajoutée à ce lot."
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr "Site Web de l'entreprise"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr "Terminer l'inscription"
|
||||
msgid "Completed"
|
||||
msgstr "Terminé"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr "Cours déjà ajouté au lot."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr "Le cours {0} a déjà été ajouté à ce lot."
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr "Type de diplôme"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "Supprimer"
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr "Liens"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr ""
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "Charger plus"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr ""
|
||||
msgid "Marks"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "Moyen:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "Suivant"
|
||||
msgid "Next Question"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr ""
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr ""
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr ""
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "En Attente"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "Pourcentage"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "Veuillez vérifier votre email pour validation"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr ""
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr "Etat"
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr ""
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "Résumé"
|
||||
msgid "Sunday"
|
||||
msgstr "Dimanche"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr ""
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr ""
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr "À"
|
||||
msgid "To Date"
|
||||
msgstr "Jusqu'au"
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5537,11 +5555,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
100
lms/locale/hu.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Hungarian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr ""
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr ""
|
||||
@@ -374,6 +379,8 @@ msgstr ""
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr "Cég honlapja"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr ""
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr ""
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr ""
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr "Összekapcsolások"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr ""
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "Töltsön be többet"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr ""
|
||||
msgid "Marks"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "Közepes:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr ""
|
||||
msgid "Next Question"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr ""
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr ""
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr ""
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr ""
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr ""
|
||||
@@ -3687,7 +3701,7 @@ msgstr "Kérjük, ellenőrizze e-mail a vizsgálathoz"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr "terület"
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr ""
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr ""
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "Összefoglalás"
|
||||
msgid "Sunday"
|
||||
msgstr "Vasárnap"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr ""
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr ""
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr ""
|
||||
msgid "To Date"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5537,11 +5555,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Frappe LMS VERSION\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-06 16:04+0000\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-27 16:04+0000\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: jannat@frappe.io\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -99,7 +99,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -141,6 +141,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -347,6 +351,7 @@ msgstr ""
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr ""
|
||||
@@ -372,6 +377,8 @@ msgstr ""
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -959,6 +966,7 @@ msgid "Company Website"
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -976,6 +984,10 @@ msgstr ""
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1229,7 +1241,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1247,6 +1259,9 @@ msgstr ""
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1404,7 +1419,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
@@ -1412,7 +1427,7 @@ msgstr ""
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1424,7 +1439,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1700,7 +1715,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1736,6 +1751,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2465,10 +2481,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2790,7 +2802,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2810,7 +2822,9 @@ msgstr ""
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr ""
|
||||
|
||||
@@ -2905,7 +2919,7 @@ msgstr ""
|
||||
msgid "Marks"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2955,7 +2969,7 @@ msgstr ""
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3228,7 +3242,7 @@ msgstr ""
|
||||
msgid "Next Question"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr ""
|
||||
|
||||
@@ -3289,7 +3303,7 @@ msgstr ""
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3405,7 +3419,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3556,7 +3570,7 @@ msgstr ""
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3651,7 +3665,7 @@ msgstr ""
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr ""
|
||||
@@ -3685,7 +3699,7 @@ msgstr ""
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3934,6 +3948,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4038,8 +4055,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4057,7 +4073,7 @@ msgid "Quiz Submission"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4087,8 +4103,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4326,7 +4342,7 @@ msgstr ""
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4627,6 +4643,7 @@ msgstr ""
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4698,13 +4715,14 @@ msgstr ""
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4756,7 +4774,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4767,7 +4785,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4789,7 +4807,7 @@ msgstr ""
|
||||
msgid "Sunday"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4944,7 +4962,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4952,7 +4970,7 @@ msgstr ""
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4975,7 +4993,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr ""
|
||||
|
||||
@@ -5081,7 +5099,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5117,7 +5135,7 @@ msgstr ""
|
||||
msgid "To Date"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -5134,7 +5152,7 @@ msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5535,11 +5553,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
100
lms/locale/pl.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Polish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr ""
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr ""
|
||||
@@ -374,6 +379,8 @@ msgstr ""
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr ""
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr ""
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr ""
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr ""
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr ""
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr ""
|
||||
msgid "Marks"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "Średni:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr ""
|
||||
msgid "Next Question"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr ""
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr ""
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr ""
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr ""
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr ""
|
||||
@@ -3687,7 +3701,7 @@ msgstr ""
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr ""
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr ""
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr ""
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "Podsumowanie"
|
||||
msgid "Sunday"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr ""
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr ""
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr ""
|
||||
msgid "To Date"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5537,11 +5555,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
100
lms/locale/ru.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Russian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr "Добавить курс"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr "Спрашивать категорию пользователя при
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr "Оценка"
|
||||
@@ -374,6 +379,8 @@ msgstr "Оценка {0} уже добавлена в этот пакет."
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr "Вебсайт Компании"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr "Завершить регистрацию"
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr "Курс уже добавлен в группу."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr "Курс {0} уже добавлен в группу."
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr "Тип степени"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr ""
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr "Подтверждение регистрации на следующу
|
||||
msgid "Enrollment Count"
|
||||
msgstr "Количество регистраций"
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr "Введите правильный ответ"
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr "Присоединиться URL"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr "Ссылки"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr "Онлайн-урок"
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr ""
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr "Отметить как прочитанное"
|
||||
msgid "Marks"
|
||||
msgstr "Отметки"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "Средний:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr ""
|
||||
msgid "Next Question"
|
||||
msgstr "Следующий вопрос"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr "Нет оценок"
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr "Не запланированы онлайн-курсы"
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr "Принимаются только файлы типа {0} ."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr "Пропустить"
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr ""
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "Проценты"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "Пожалуйста, проверьте свой email для подт
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr "Нажмите на следующую кнопку, чтобы установить новый пароль."
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr "Подача теста"
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr "Тест появится в конце урока."
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr "Объем"
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr ""
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr "Курс {0} уже добавлен в группу."
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr "Студенты"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr "Отправлено {0}"
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr "Отправлено {0}"
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "Резюме"
|
||||
msgid "Sunday"
|
||||
msgstr "Воскресенье"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr "В этой группе нет свободных мест."
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr "В этой группе нет студентов."
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr "В этой группе нет студентов."
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr "На этом сайте нет {0} ."
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr "Этот сертификат является бессрочным"
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr "Этот курс бесплатный."
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr "Сроки:"
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr ""
|
||||
msgid "To Date"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr "Чтобы присоединиться к этой группе, свяжитесь с администратором."
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr "Всего задач"
|
||||
@@ -5537,11 +5555,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
102
lms/locale/sv.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Swedish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "Aktiv"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr "Lägg till Kapitel"
|
||||
msgid "Add a course"
|
||||
msgstr "Lägg till kurs"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr "Lägg till nyckelord och tryck sedan på Enter"
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr "Lägg till Lektion"
|
||||
@@ -349,6 +353,7 @@ msgstr "Fråga efter Användare Kategori under Registrering"
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr "Bedömning"
|
||||
@@ -374,6 +379,8 @@ msgstr "Bedömning {0} har redan lagts till i denna grupp."
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr "Bolag Webbplats"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr "Slutför Registrering"
|
||||
msgid "Completed"
|
||||
msgstr "Klar"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr "Klart av Studenter"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr "Kompletterande Certifikat"
|
||||
@@ -1134,7 +1146,7 @@ msgstr "Kurs Kapitel"
|
||||
#. Label of a shortcut in the LMS Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Course Completed"
|
||||
msgstr "Klara Kurs"
|
||||
msgstr "Klara Kurser"
|
||||
|
||||
#: lms/lms/widgets/CourseOutline.html:9
|
||||
msgid "Course Content"
|
||||
@@ -1231,7 +1243,7 @@ msgstr "Kurs tillagd till program"
|
||||
msgid "Course already added to the batch."
|
||||
msgstr "Kurs har redan lagts till grupp."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr "Kurs är borttagen"
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr "Kurs {0} har redan lagts till i denna omgång."
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr "Examen Typ"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "Ta bort"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "Ta bort"
|
||||
msgid "Delete Chapter"
|
||||
msgstr "Ta bort Kapitel"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr "Ta bort kurs"
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr "Ta bort detta kapitel?"
|
||||
msgid "Delete this lesson?"
|
||||
msgstr "Ta bort denna lektion?"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr "Om du tar bort kurs raderas också alla dess kapitel och lektioner. Är du säker på att du vill ta bort denna kurs?"
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr "Inskrivning bekräftelse för nästa grupp utbildning"
|
||||
msgid "Enrollment Count"
|
||||
msgstr "Antal Inskrivna"
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr "Registrering Misslyckad"
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr "Ange korrekt svar"
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr "Delta i Möte"
|
||||
msgid "Join URL"
|
||||
msgstr "Gå med URL"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr "Nyckelord för kurs"
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr "LinkedIn ID"
|
||||
msgid "Links"
|
||||
msgstr "Länkar"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr "Lista över frågesporter"
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr "Live Klass"
|
||||
msgid "LiveCode URL"
|
||||
msgstr "LiveCode URL"
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "Ladda Mer"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr "Markera som läst"
|
||||
msgid "Marks"
|
||||
msgstr "Märken"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr "Poängen för fråga nummer {0} får inte vara högre än de poäng som tilldelats för denna fråga."
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "Medium:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "Nästa"
|
||||
msgid "Next Question"
|
||||
msgstr "Nästa Fråga"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr "Inga Bedömningar"
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr "Inga live lektioner schemalagda"
|
||||
msgid "No programs found"
|
||||
msgstr "Inga program hittades"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr "Inga frågesporter hittades"
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr "Endast kurser för vilka självinlärning är inaktiverat kan läggas ti
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr "Endast filer av typ {0} kommer att accepteras."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr "Endast bildfiler är tillåtna."
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr "Lösenord"
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "Pågående"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "Procentuell"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "Kontrollera din E-post för verifiering"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr "Klicka på följande knapp för att ange ditt nya lösenord"
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr "Slutför tidigare kurser i program för att anmäla dig till denna kurs."
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr "Program Medlemmar"
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr "Frågor är borttagna"
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr "Frågesport Inlämning"
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr "Frågesport Inlämningar"
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr "Frågesport uppdaterad"
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr "Frågesport kommer att visas längst ner i lektionen."
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr "Frågesporter"
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr "Omfatning"
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr "Län"
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr "Student {0} har redan lagts till denna grupp."
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr "Studenter"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr "Studenter borttagna"
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr "Inskickad {0}"
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr "Inskickad {0}"
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "Översikt"
|
||||
msgid "Sunday"
|
||||
msgstr "Söndag"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr "Misstänkt mönster hittat i {0}: {1}"
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr "Det finns inga program tillgängliga för tillfället. Håll utkik, nya
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr "Det finns inga platser tillgängliga i denna grupp."
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr "Det finns inga studenter i denna grupp."
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr "Det finns inga studenter i denna grupp."
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr "Det finns ingen {0} på denna webbplats."
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr "Det har skett uppdatering av din inlämning. Du har fått resultat av {0} för frågesport {1}"
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr "Detta certifikat upphör inte att gälla"
|
||||
msgid "This course has:"
|
||||
msgstr "Denna kurs har:"
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr "Denna kurs är gratis."
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr "Tidpunkter:"
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr "Till"
|
||||
msgid "To Date"
|
||||
msgstr "Till Datum"
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr "För att gå med i denna grupp, kontakta Administratör."
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr "Totalt"
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr "Totalt antal markeringar"
|
||||
@@ -5537,11 +5555,11 @@ msgstr "Du har blivit registrerad i denna grupp"
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr "Du har blivit registrerad på denna kurs"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr "Du har fått resultat av {0} för frågesport {1}"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr "Du har inte skapat några frågesporter än. För att skapa ny frågesport, klicka på knapp \"Nytt Frågesport\" ovan."
|
||||
|
||||
|
||||
100
lms/locale/tr.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Turkish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "Aktif"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr "Kurs Ekle"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr "Kayıt sırasında Kullanıcı Kategorisini Sor"
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr "Değerlendirme"
|
||||
@@ -374,6 +379,8 @@ msgstr "Değerlendirme {0} bu gruba zaten eklendi."
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr "Şirket Web Sitesi"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr "Kayıt İşlemini Tamamlayın"
|
||||
msgid "Completed"
|
||||
msgstr "Tamamlandı"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr "Kurs zaten gruba eklendi."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr "Kurs başarıyla silindi"
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr "Kurs {0} bu gruba zaten eklenmiştir."
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr "Derece Türü"
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "Sil"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "Sil"
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr "Kursu Sil"
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr "Kursu silmek, tüm bölümlerini ve derslerini de silecektir. Bu kursu silmek istediğinizden emin misiniz?"
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr "Sonraki Eğitim Grubu için Kayıt Onayı"
|
||||
msgid "Enrollment Count"
|
||||
msgstr "Kayıt Sayısı"
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr "Kayıt Başarısız"
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr "Doğru cevabı girin"
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr "Görüşmeye Katıl"
|
||||
msgid "Join URL"
|
||||
msgstr "Katılma Bağlantısı"
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr "Ders için anahtar kelimeler"
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr "LinkedIn"
|
||||
msgid "Links"
|
||||
msgstr "Bağlantılar"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr "Sınavların listesi"
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr "Canlı Sınıf"
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "Daha Fazla Yükle"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr "Okundu olarak İşaretle"
|
||||
msgid "Marks"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "Orta:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "Sonraki"
|
||||
msgid "Next Question"
|
||||
msgstr "Sonraki Soru"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr "Değerlendirme Yok"
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr "Planlanmış canlı ders yok"
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr "Sadece {0} türündeki dosyalar kabul edilecektir."
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr "Sadece resim dosyasına izin verilir."
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr "Başarılı"
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "Bekliyor"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr "Yüzde"
|
||||
@@ -3687,7 +3701,7 @@ msgstr "Doğrulama için lütfen e-postanızı kontrol edin"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr "Yeni şifrenizi belirlemek için lütfen aşağıdaki linke tıklayınız"
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr "Sorular başarıyla silindi"
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr "Sınav Gönderimi"
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr "Sınav başarıyla güncellendi"
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr "Kapsam"
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr "Durum"
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr "Öğrenci {0} zaten bu gruba eklendi."
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr "Öğrenciler"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr "Kaydedildi {0}"
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr "Kaydedildi {0}"
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "Özet"
|
||||
msgid "Sunday"
|
||||
msgstr "Pazar"
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr "Bu grupta boş yer bulunmamaktadır."
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr "Bu grupta hiç öğrenci bulunmamaktadır."
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr "Bu grupta hiç öğrenci bulunmamaktadır."
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr "Bu sitede {0} yok."
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr "Bu kursta:"
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr "Bu kurs ücretsizdir."
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr "Alıcı"
|
||||
msgid "To Date"
|
||||
msgstr "Bitiş Tarihi"
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr "Toplam"
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5537,11 +5555,11 @@ msgstr "Bu gruba kayıt oldunuz"
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr "Bu kursa zaten kayıtlısınız"
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
100
lms/locale/zh.po
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: jannat@frappe.io\n"
|
||||
"POT-Creation-Date: 2024-12-06 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-09 23:31\n"
|
||||
"POT-Creation-Date: 2024-12-27 16:04+0000\n"
|
||||
"PO-Revision-Date: 2024-12-31 03:29\n"
|
||||
"Last-Translator: jannat@frappe.io\n"
|
||||
"Language-Team: Chinese Simplified\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -101,7 +101,7 @@ msgstr "活动"
|
||||
|
||||
#: frontend/src/components/Assessments.vue:11
|
||||
#: frontend/src/components/BatchCourses.vue:11
|
||||
#: frontend/src/components/BatchStudents.vue:6
|
||||
#: frontend/src/components/BatchStudents.vue:90
|
||||
#: frontend/src/components/Categories.vue:26
|
||||
#: frontend/src/components/LiveClass.vue:11
|
||||
#: frontend/src/components/Members.vue:43 frontend/src/pages/ProgramForm.vue:30
|
||||
@@ -143,6 +143,10 @@ msgstr ""
|
||||
msgid "Add a course"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Add a keyword and then press enter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/OnboardingBanner.vue:73
|
||||
msgid "Add a lesson"
|
||||
msgstr ""
|
||||
@@ -349,6 +353,7 @@ msgstr ""
|
||||
#. Label of the assessment_tab (Tab Break) field in DocType 'LMS Batch'
|
||||
#. Label of the assessment (Table) field in DocType 'LMS Batch'
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:27
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:29
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json lms/templates/assessments.html:11
|
||||
msgid "Assessment"
|
||||
msgstr ""
|
||||
@@ -374,6 +379,8 @@ msgstr ""
|
||||
|
||||
#. Label of the show_assessments (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/Assessments.vue:5
|
||||
#: frontend/src/components/BatchStudents.vue:46
|
||||
#: frontend/src/components/BatchStudents.vue:74
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
#: lms/templates/assessments.html:3
|
||||
msgid "Assessments"
|
||||
@@ -961,6 +968,7 @@ msgid "Company Website"
|
||||
msgstr ""
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'LMS Course Progress'
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:13
|
||||
#: lms/lms/doctype/lms_course_progress/lms_course_progress.json
|
||||
#: lms/lms/widgets/CourseCard.html:75 lms/templates/reviews.html:48
|
||||
msgid "Complete"
|
||||
@@ -978,6 +986,10 @@ msgstr ""
|
||||
msgid "Completed"
|
||||
msgstr "已完成"
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:325
|
||||
msgid "Completed by Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:201
|
||||
msgid "Completion Certificate"
|
||||
msgstr ""
|
||||
@@ -1231,7 +1243,7 @@ msgstr ""
|
||||
msgid "Course already added to the batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:460
|
||||
#: frontend/src/pages/CourseForm.vue:461
|
||||
msgid "Course deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1249,6 +1261,9 @@ msgstr ""
|
||||
#. Label of the courses (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchCourses.vue:5
|
||||
#: frontend/src/components/BatchOverlay.vue:23
|
||||
#: frontend/src/components/BatchStudents.vue:32
|
||||
#: frontend/src/components/BatchStudents.vue:68
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:61
|
||||
#: frontend/src/pages/BatchDetail.vue:19 frontend/src/pages/BatchDetail.vue:68
|
||||
#: frontend/src/pages/Courses.vue:8 frontend/src/pages/Statistics.vue:19
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
@@ -1406,7 +1421,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/CourseOutline.vue:235
|
||||
#: frontend/src/components/CourseOutline.vue:293
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:473
|
||||
#: frontend/src/pages/CourseForm.vue:15 frontend/src/pages/CourseForm.vue:474
|
||||
msgid "Delete"
|
||||
msgstr "删除"
|
||||
|
||||
@@ -1414,7 +1429,7 @@ msgstr "删除"
|
||||
msgid "Delete Chapter"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:467
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
msgid "Delete Course"
|
||||
msgstr ""
|
||||
|
||||
@@ -1426,7 +1441,7 @@ msgstr ""
|
||||
msgid "Delete this lesson?"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:468
|
||||
#: frontend/src/pages/CourseForm.vue:469
|
||||
msgid "Deleting the course will also delete all its chapters and lessons. Are you sure you want to delete this course?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1702,7 +1717,7 @@ msgstr ""
|
||||
msgid "Enrollment Count"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1702
|
||||
#: lms/lms/utils.py:1720
|
||||
msgid "Enrollment Failed"
|
||||
msgstr ""
|
||||
|
||||
@@ -1738,6 +1753,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Question.vue:249
|
||||
#: frontend/src/components/Modals/Question.vue:269
|
||||
#: frontend/src/components/Modals/Question.vue:326
|
||||
#: frontend/src/components/Modals/StudentModal.vue:69
|
||||
#: frontend/src/components/SettingDetails.vue:62
|
||||
#: frontend/src/pages/Billing.vue:264 frontend/src/pages/QuizForm.vue:350
|
||||
#: frontend/src/pages/QuizForm.vue:365
|
||||
@@ -2467,10 +2483,6 @@ msgstr ""
|
||||
msgid "Join URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:136
|
||||
msgid "Keywords for the course"
|
||||
msgstr ""
|
||||
|
||||
#. Name of a Workspace
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "LMS"
|
||||
@@ -2792,7 +2804,7 @@ msgstr ""
|
||||
msgid "Links"
|
||||
msgstr "链接"
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:147
|
||||
#: frontend/src/pages/Quizzes.vue:149
|
||||
msgid "List of quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -2812,7 +2824,9 @@ msgstr ""
|
||||
msgid "LiveCode URL"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Members.vue:95
|
||||
#: frontend/src/components/Members.vue:106
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:39
|
||||
#: frontend/src/pages/Quizzes.vue:51
|
||||
msgid "Load More"
|
||||
msgstr "装载更多"
|
||||
|
||||
@@ -2907,7 +2921,7 @@ msgstr ""
|
||||
msgid "Marks"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:23
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:24
|
||||
msgid "Marks for question number {0} cannot be greater than the marks allotted for that question."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,7 +2971,7 @@ msgstr "中:"
|
||||
#. Label of the member (Link) field in DocType 'LMS Program Member'
|
||||
#. Label of the member (Link) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:31
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:77
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:86
|
||||
#: lms/lms/doctype/exercise_latest_submission/exercise_latest_submission.json
|
||||
#: lms/lms/doctype/exercise_submission/exercise_submission.json
|
||||
#: lms/lms/doctype/lms_assignment_submission/lms_assignment_submission.json
|
||||
@@ -3230,7 +3244,7 @@ msgstr "下一个"
|
||||
msgid "Next Question"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/Assessments.vue:63 lms/templates/assessments.html:58
|
||||
#: frontend/src/components/Assessments.vue:66 lms/templates/assessments.html:58
|
||||
msgid "No Assessments"
|
||||
msgstr ""
|
||||
|
||||
@@ -3291,7 +3305,7 @@ msgstr ""
|
||||
msgid "No programs found"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:56
|
||||
#: frontend/src/pages/Quizzes.vue:61
|
||||
msgid "No quizzes found"
|
||||
msgstr ""
|
||||
|
||||
@@ -3407,7 +3421,7 @@ msgstr ""
|
||||
msgid "Only files of type {0} will be accepted."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/CourseForm.vue:497 frontend/src/utils/index.js:520
|
||||
#: frontend/src/pages/CourseForm.vue:498 frontend/src/utils/index.js:527
|
||||
msgid "Only image file is allowed."
|
||||
msgstr ""
|
||||
|
||||
@@ -3558,7 +3572,7 @@ msgstr ""
|
||||
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz'
|
||||
#. Label of the passing_percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:125
|
||||
#: frontend/src/pages/QuizForm.vue:72 frontend/src/pages/Quizzes.vue:127
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Passing Percentage"
|
||||
@@ -3653,7 +3667,7 @@ msgstr "有待"
|
||||
|
||||
#. Label of the percentage (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:44
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:93
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:97
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
msgid "Percentage"
|
||||
msgstr ""
|
||||
@@ -3687,7 +3701,7 @@ msgstr "请检查您的电子邮件验证"
|
||||
msgid "Please click on the following button to set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1824 lms/lms/utils.py:1828
|
||||
#: lms/lms/utils.py:1842 lms/lms/utils.py:1846
|
||||
msgid "Please complete the previous courses in the program to enroll in this course."
|
||||
msgstr ""
|
||||
|
||||
@@ -3936,6 +3950,9 @@ msgstr ""
|
||||
|
||||
#. Label of the progress (Float) field in DocType 'LMS Enrollment'
|
||||
#. Label of the progress (Int) field in DocType 'LMS Program Member'
|
||||
#: frontend/src/components/BatchStudents.vue:53
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:32
|
||||
#: frontend/src/components/Modals/BatchStudentProgress.vue:64
|
||||
#: lms/lms/doctype/lms_enrollment/lms_enrollment.json
|
||||
#: lms/lms/doctype/lms_program_member/lms_program_member.json
|
||||
msgid "Progress"
|
||||
@@ -4040,8 +4057,7 @@ msgstr ""
|
||||
|
||||
#. Label of the quiz (Link) field in DocType 'LMS Quiz Submission'
|
||||
#. Label of a Link in the LMS Workspace
|
||||
#: frontend/src/pages/QuizSubmission.vue:26
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:82 frontend/src/utils/quiz.js:24
|
||||
#: frontend/src/pages/QuizSubmission.vue:26 frontend/src/utils/quiz.js:24
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/lms/workspace/lms/lms.json
|
||||
msgid "Quiz"
|
||||
@@ -4059,7 +4075,7 @@ msgid "Quiz Submission"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizSubmission.vue:122
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:102
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:106
|
||||
msgid "Quiz Submissions"
|
||||
msgstr ""
|
||||
|
||||
@@ -4089,8 +4105,8 @@ msgstr ""
|
||||
msgid "Quiz will appear at the bottom of the lesson."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:136
|
||||
#: frontend/src/pages/Quizzes.vue:146
|
||||
#: frontend/src/pages/QuizForm.vue:442 frontend/src/pages/Quizzes.vue:138
|
||||
#: frontend/src/pages/Quizzes.vue:148
|
||||
msgid "Quizzes"
|
||||
msgstr ""
|
||||
|
||||
@@ -4328,7 +4344,7 @@ msgstr ""
|
||||
|
||||
#. Label of the score (Int) field in DocType 'LMS Quiz Submission'
|
||||
#: frontend/src/pages/QuizSubmission.vue:39
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:87
|
||||
#: frontend/src/pages/QuizSubmissionList.vue:91
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.json
|
||||
#: lms/templates/quiz/quiz.html:148
|
||||
msgid "Score"
|
||||
@@ -4629,6 +4645,7 @@ msgstr "州"
|
||||
|
||||
#. Label of the tab_4_tab (Tab Break) field in DocType 'LMS Course'
|
||||
#. Label of the statistics (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:5
|
||||
#: lms/lms/doctype/lms_course/lms_course.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json lms/www/lms.py:133
|
||||
msgid "Statistics"
|
||||
@@ -4700,13 +4717,14 @@ msgstr ""
|
||||
|
||||
#. Label of the students (Table) field in DocType 'LMS Batch'
|
||||
#. Label of the show_students (Check) field in DocType 'LMS Settings'
|
||||
#: frontend/src/components/BatchStudents.vue:9
|
||||
#: frontend/src/components/BatchStudents.vue:18
|
||||
#: frontend/src/components/BatchStudents.vue:84
|
||||
#: lms/lms/doctype/lms_batch/lms_batch.json
|
||||
#: lms/lms/doctype/lms_settings/lms_settings.json
|
||||
msgid "Students"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
msgid "Students deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -4758,7 +4776,7 @@ msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchCourses.vue:150
|
||||
#: frontend/src/components/BatchOverlay.vue:135
|
||||
#: frontend/src/components/BatchStudents.vue:157
|
||||
#: frontend/src/components/BatchStudents.vue:282
|
||||
#: frontend/src/components/CourseCardOverlay.vue:161
|
||||
#: frontend/src/components/Modals/AnnouncementModal.vue:99
|
||||
#: frontend/src/components/Modals/AssessmentModal.vue:73
|
||||
@@ -4769,7 +4787,7 @@ msgstr ""
|
||||
#: frontend/src/components/Modals/Event.vue:310
|
||||
#: frontend/src/components/Modals/Question.vue:264
|
||||
#: frontend/src/components/Modals/Question.vue:315
|
||||
#: frontend/src/pages/CourseForm.vue:460 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/CourseForm.vue:461 frontend/src/pages/ProgramForm.vue:229
|
||||
#: frontend/src/pages/ProgramForm.vue:251
|
||||
#: frontend/src/pages/ProgramForm.vue:272
|
||||
#: frontend/src/pages/ProgramForm.vue:298 frontend/src/pages/QuizForm.vue:343
|
||||
@@ -4791,7 +4809,7 @@ msgstr "概要"
|
||||
msgid "Sunday"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/api.py:951
|
||||
#: lms/lms/api.py:952
|
||||
msgid "Suspicious pattern found in {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4946,7 +4964,7 @@ msgstr ""
|
||||
msgid "There are no seats available in this batch."
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/components/BatchStudents.vue:67
|
||||
#: frontend/src/components/BatchStudents.vue:165
|
||||
msgid "There are no students in this batch."
|
||||
msgstr ""
|
||||
|
||||
@@ -4954,7 +4972,7 @@ msgstr ""
|
||||
msgid "There are no {0} on this site."
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:41
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:42
|
||||
msgid "There has been an update on your submission. You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -4977,7 +4995,7 @@ msgstr ""
|
||||
msgid "This course has:"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/utils.py:1582
|
||||
#: lms/lms/utils.py:1600
|
||||
msgid "This course is free."
|
||||
msgstr ""
|
||||
|
||||
@@ -5083,7 +5101,7 @@ msgstr ""
|
||||
#: frontend/src/pages/BatchForm.vue:20 frontend/src/pages/CourseForm.vue:32
|
||||
#: frontend/src/pages/JobCreation.vue:20 frontend/src/pages/ProgramForm.vue:11
|
||||
#: frontend/src/pages/Programs.vue:118 frontend/src/pages/QuizForm.vue:48
|
||||
#: frontend/src/pages/Quizzes.vue:114 lms/lms/doctype/cohort/cohort.json
|
||||
#: frontend/src/pages/Quizzes.vue:116 lms/lms/doctype/cohort/cohort.json
|
||||
#: lms/lms/doctype/cohort_subgroup/cohort_subgroup.json
|
||||
#: lms/lms/doctype/cohort_web_page/cohort_web_page.json
|
||||
#: lms/lms/doctype/course_chapter/course_chapter.json
|
||||
@@ -5119,7 +5137,7 @@ msgstr "至"
|
||||
msgid "To Date"
|
||||
msgstr "至今"
|
||||
|
||||
#: lms/lms/utils.py:1593
|
||||
#: lms/lms/utils.py:1611
|
||||
msgid "To join this batch, please contact the Administrator."
|
||||
msgstr ""
|
||||
|
||||
@@ -5136,7 +5154,7 @@ msgid "Total"
|
||||
msgstr "总"
|
||||
|
||||
#. Label of the total_marks (Int) field in DocType 'LMS Quiz'
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:119
|
||||
#: frontend/src/pages/QuizForm.vue:67 frontend/src/pages/Quizzes.vue:121
|
||||
#: lms/lms/doctype/lms_quiz/lms_quiz.json
|
||||
msgid "Total Marks"
|
||||
msgstr ""
|
||||
@@ -5537,11 +5555,11 @@ msgstr ""
|
||||
msgid "You have been enrolled in this course"
|
||||
msgstr ""
|
||||
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:38
|
||||
#: lms/lms/doctype/lms_quiz_submission/lms_quiz_submission.py:39
|
||||
msgid "You have got a score of {0} for the quiz {1}"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/src/pages/Quizzes.vue:60
|
||||
#: frontend/src/pages/Quizzes.vue:65
|
||||
msgid "You have not created any quizzes yet. To create a new quiz, click on the \"New Quiz\" button above."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -162,3 +162,14 @@ class SCORMRenderer(BaseRenderer):
|
||||
)
|
||||
response.mimetype = mimetypes.guess_type(path)[0]
|
||||
return response
|
||||
else:
|
||||
path = path.replace(".html", "")
|
||||
if os.path.exists(path) and os.path.isdir(path):
|
||||
index_path = os.path.join(path, "index.html")
|
||||
if os.path.exists(index_path):
|
||||
f = open(index_path, "rb")
|
||||
response = Response(
|
||||
wrap_file(frappe.local.request.environ, f), direct_passthrough=True
|
||||
)
|
||||
response.mimetype = mimetypes.guess_type(index_path)[0]
|
||||
return response
|
||||
|
||||