feat: auto generate translations (#288)

* add cloud translation api package

* feat: Script that auto generates translations for other languages

* add comments

* fix: broken translation

* improve translation

* update locck file

* clean up

* all round trasnlations check

* checkpoint

* finish up

* move to dev dependencies

* fix vercel build error

---------

Co-authored-by: Rotimi Best <best@classroomio.com>
This commit is contained in:
Adeyemi Adetunji
2024-04-24 23:01:20 +01:00
committed by GitHub
co-authored by Rotimi Best
parent 72f83a4365
commit 648e15d88d
22 changed files with 4331 additions and 2708 deletions
+4 -1
View File
@@ -16,7 +16,8 @@
"prepare": "svelte-kit sync",
"test": "jest",
"test:watch": "pnpm run test --watch",
"ci": "cp .env.example .env && vite build && vite preview"
"ci": "cp .env.example .env && vite build && vite preview",
"script:translate": "node ./scripts/translate.cjs"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.386.0",
@@ -73,12 +74,14 @@
"@testing-library/svelte": "^4.0.5",
"@types/jest": "^29.5.10",
"@types/lodash": "^4.14.196",
"all-object-keys": "^2.2.0",
"autoprefixer": "^10.4.14",
"babel-jest": "^29.7.0",
"carbon-components-svelte": "^0.79.0",
"carbon-icons-svelte": "^12.1.0",
"dotenv": "^16.3.1",
"eslint-config-custom": "workspace:*",
"jessy": "^3.1.1",
"jest": "^29.7.0",
"postcss": "^8.4.24",
"postcss-load-config": "^4.0.1",
+141
View File
@@ -0,0 +1,141 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const axios = require('axios');
const dotenv = require('dotenv');
const fs = require('fs');
const path = require('path');
const keys = require('all-object-keys');
const jessy = require('jessy');
const set = require('lodash/set');
const englishTranslations = require('../src/lib/utils/translations/en.json');
// Load env variables
dotenv.config();
const SCRIPT_WAIT_TIME = 2000;
// Define file paths for each language
const languageFiles = {
hi: path.resolve(__dirname, '../src/lib/utils/translations/hi.json'),
fr: path.resolve(__dirname, '../src/lib/utils/translations/fr.json'),
pt: path.resolve(__dirname, '../src/lib/utils/translations/pt.json'),
de: path.resolve(__dirname, '../src/lib/utils/translations/de.json'),
vi: path.resolve(__dirname, '../src/lib/utils/translations/vi.json'),
ru: path.resolve(__dirname, '../src/lib/utils/translations/re.json'),
es: path.resolve(__dirname, '../src/lib/utils/translations/es.json')
};
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const getMissingTranslations = async (toLanguage, outputFilePath) => {
const englishKeys = keys(englishTranslations);
const targetTranslations = require(outputFilePath); // Load target language translations
const targetKeys = keys(targetTranslations);
const missingKeys = englishKeys.filter((key) => !targetKeys.includes(key));
const missingKeysWithDetails = {};
missingKeys.forEach((key) => {
const value = jessy(key, englishTranslations);
if (value !== undefined) {
missingKeysWithDetails[key] = value;
}
});
console.log(`Details of missing keys in ${toLanguage.toUpperCase()}:`);
console.log(missingKeysWithDetails, 'missingKeysWithDetails');
// Check if there are missing translations, if not, stop the process
if (!missingKeysWithDetails) {
console.log(
`No missing translations for ${toLanguage.toUpperCase()}. Stopping translation process.`
);
return;
}
return missingKeysWithDetails;
};
const translateLanguage = async (fromLanguage, toLanguage, outputFilePath) => {
// Check if there are missing translations
const missingTranslations = await getMissingTranslations(toLanguage, outputFilePath);
console.log('Missing translations', missingTranslations);
if (!Object.keys(missingTranslations).length) {
console.log('No missing translation skip');
return;
}
const targetTranslations = require(outputFilePath); // Load target language translations
const flattenedEnglish = flattenJSON(missingTranslations);
const jsonString = JSON.stringify(flattenedEnglish);
const encodedParams = new URLSearchParams();
encodedParams.set('from', fromLanguage);
encodedParams.set('to', toLanguage);
encodedParams.set('json', jsonString);
const options = {
method: 'POST',
url: 'https://google-translate113.p.rapidapi.com/api/v1/translator/json',
headers: {
'content-type': 'application/x-www-form-urlencoded',
'X-RapidAPI-Key': process.env.RAPID_API_KEY,
'X-RapidAPI-Host': 'google-translate113.p.rapidapi.com'
},
data: encodedParams
};
try {
console.log('Calling API');
const response = await axios.request(options);
const { trans } = response.data;
console.log('Translation gotten', trans);
if (trans) {
for (const key in trans) {
const value = trans[key];
set(targetTranslations, key, value);
}
fs.writeFileSync(outputFilePath, JSON.stringify(targetTranslations, null, 2));
console.log(`${toLanguage.toUpperCase()} translations updated successfully.`);
} else {
console.log(`Failed to update ${toLanguage.toUpperCase()} translations.`);
}
} catch (error) {
console.error(`Error translating to ${toLanguage.toUpperCase()}:`, error);
}
};
// Function to flatten the JSON object
const flattenJSON = (obj, prefix = '') => {
let flattened = {};
for (const key in obj) {
if (typeof obj[key] === 'object') {
const nested = flattenJSON(obj[key], `${prefix}${key}.`);
flattened = { ...flattened, ...nested };
} else {
flattened[`${prefix}${key}`] = obj[key];
}
}
return flattened;
};
// Loop through each language and translate the English text with a delay
const translate = async () => {
for (const [language, filePath] of Object.entries(languageFiles)) {
console.log(`============FROM: EN================`);
console.log(`============TO: ${language.toUpperCase()}================`);
await wait(SCRIPT_WAIT_TIME);
await translateLanguage('en', language, filePath);
console.log(`============COMPLETE================\n\n`);
}
};
translate();
@@ -46,7 +46,7 @@
(ans: { question_id: number }) => ans.question_id === q.id
);
if (filteredAnswer.some((ans: { open_answer: string }) => ans.open_answer == '')) {
return $t('course.navItem.lessons.exercise.all_exercises.analytics.individual.no');
return $t('course.navItem.lessons.exercises.all_exercises.analytics.individual.no');
} else {
return filteredAnswer.map((ans: { open_answer: any }) => ans.open_answer);
}
@@ -81,7 +81,7 @@
<p class="font-medium mb-2">
{$submissions[studentSelected].submitted_by.profile.fullname}'s {$t(
'course.navItem.lessons.exercise.all_exercises.analytics.individual.answers'
'course.navItem.lessons.exercises.all_exercises.analytics.individual.answers'
)}
</p>
{#if $submissions[studentSelected]}
@@ -144,7 +144,7 @@
{:else if browser}
<div>
<p class="text-2xl mb-3">
{$t('course.navItem.lessons.exercise.all_exercises.analytics.summary.question_chart')}
{$t('course.navItem.lessons.exercises.all_exercises.analytics.summary.question_chart')}
</p>
{#each transformedQuestions as q}
<div class="mb-4">
@@ -10,11 +10,11 @@
const tabs = [
{
label: $t('course.navItem.lessons.exercise.all_exercises.analytics.summary.heading'),
label: $t('course.navItem.lessons.exercises.all_exercises.analytics.summary.heading'),
value: 'summary'
},
{
label: $t('course.navItem.lessons.exercise.all_exercises.analytics.individual.heading'),
label: $t('course.navItem.lessons.exercises.all_exercises.analytics.individual.heading'),
value: 'individual'
}
];
@@ -47,7 +47,7 @@
<div class="mt-4">
<p class="text-lg">
{$submissions.length}
{$t('course.navItem.lessons.exercise.all_exercises.analytics.submissions')}
{$t('course.navItem.lessons.exercises.all_exercises.analytics.submissions')}
</p>
</div>
<div class="flex items-center justify-center overflow-x-auto">
@@ -19,7 +19,7 @@
const validLinks = links.filter(isValidLink);
if (validLinks.length === 0) {
error = 'Invalid link(s)';
error = $t('course.navItem.lessons.materials.tabs.video.add_video.invalid_link');
} else {
const existingLinks = $lesson?.materials?.videos || [];
@@ -19,7 +19,7 @@
const validLinks = links.filter(isValidYouTubeLink);
if (validLinks.length === 0) {
error = 'Invalid YouTube link(s)';
error = $t('course.navItem.lessons.materials.tabs.video.add_video.invalid_youtube');
} else {
const existingLinks = $lesson?.materials?.videos || [];
@@ -218,7 +218,7 @@
{#if $isFreePlan}
<FlashFilled size={16} class="text-blue-700" />
{/if}
Manage Team
{$t('settings.organization.organization_profile.team.button')}
</PrimaryButton>
</Column>
</Row>
@@ -61,7 +61,7 @@
<TextArea
bind:value={defaultValue}
rows="5"
placeholder={$t('course.navItem.lessons.exercise.all_exercises.write_your_answer_here')}
placeholder={$t('course.navItem.lessons.exercises.all_exercises.write_your_answer_here')}
/>
{/if}
</div>
@@ -78,8 +78,8 @@
variant={VARIANTS.OUTLINED}
type="submit"
label={isLast
? $t('course.navItem.lessons.exercise.all_exercises.finish')
: $t('course.navItem.lessons.exercise.all_exercises.next')}
? $t('course.navItem.lessons.exercises.all_exercises.finish')
: $t('course.navItem.lessons.exercises.all_exercises.next')}
{name}
/>
</div>
File diff suppressed because it is too large Load Diff
@@ -325,7 +325,10 @@
"goto_lms": "Go to LMS",
"goto_home": "Go to ClassroomIO Home",
"login": "Login",
"signup": "Sign Up"
"signup": "Sign Up",
"redirecting": "Redirecting",
"loading_state": "Taking you to the next page, please wait.",
"org_loading_state": "Taking you to your organization..."
},
"markdown_editor": {
@@ -339,6 +342,8 @@
"second": "Second(s)",
"answer": "Answer(s)",
"question_delete": "Delete Question",
"add_more": "+ Add more answers",
"remove_last": "- Remove last answer",
"quiz_delete": "Delete Quiz",
"delete_question": "Are you sure you want to delete this question?",
"delete_quiz": "Are you sure you want to delete this quiz?",
@@ -572,7 +577,9 @@
"sorry_3": "Sorry we video wasn’t uploaded, the file format isn’t supported or something went wrong on the server.",
"sorry_4": "Upload MP4, MOV and AVI files.",
"upgrade": "Upgrade your plan to upload vidoes",
"uploading": "Uploading..."
"uploading": "Uploading...",
"invalid_youtube": "Invalid YouTube link(s)",
"invalid_link": "Invalid link(s)"
}
}
},
@@ -985,6 +992,7 @@
},
"find_question": "Find Question",
"asked": "asked",
"answers": "answers",
"no_question": "No Questions asked",
"ask_a_question": "Ask a question to the community",
"delete": {
File diff suppressed because it is too large Load Diff
+128 -178
View File
@@ -2,14 +2,13 @@
"verify_email_modal": {
"heading": "Vérifiez votre e-mail",
"sent_verification": "Nous avons envoyé un e-mail de vérification à",
"to_confirm": "pour confirmer la validité de l'email fourni.",
"to_confirm": "pour confirmer la validité de l'e-mail fourni.",
"loading": "Chargement...",
"resend": "Renvoyer le code de vérification",
"resend_in": "Renvoyer la vérification dans",
"seconds": "secondes",
"snackbar_error": "erreur lors de l'envoi du code"
},
"onboarding": {
"sell": "Vendre des cours en ligne",
"teach": "Enseigner en ligne à mes étudiants actuels",
@@ -27,14 +26,12 @@
"back": "Dos",
"continue": "Continuer"
},
"welcome_modal": {
"we_at": "Nous à",
"content_1": "est une petite équipe avec une grande mission : doter les éducateurs d'une technologie de pointe pour les aider à former la génération future. L’éducation est le cadeau le plus puissant que vous puissiez offrir à quiconque, et il est tout à fait logique de vous donner tous les outils dont vous avez besoin pour offrir ce CADEAU à davantage de personnes.",
"content_2": "Merci de nous avoir choisi",
"content_3": "nous l'apprécions profondément et sommes à votre service."
},
"login": {
"welcome": "Content de te revoir",
"email": "Votre email",
@@ -42,7 +39,6 @@
"forgot": "Mot de passe oublié?",
"login": "Se connecter"
},
"settings": {
"heading": "Paramètres",
"subheadings": {
@@ -137,7 +133,7 @@
"title": "Titre",
"question": "Question",
"answer": "Répondre",
"button": "Ajouter une nouvelle Faq",
"button": "Ajouter une nouvelle FAQ",
"save": "Sauvegarder",
"cancel": "Annuler"
},
@@ -149,7 +145,7 @@
"title_highlight": "Titre-Point culminant",
"subtitle": "Sous-titre",
"phone_number": "Numéro de téléphone",
"email": "Email"
"email": "E-mail"
},
"mailing_list": {
"heading": "Liste de diffusion",
@@ -174,7 +170,7 @@
"sub_heading": "Connectez votre compte à Telegram pour être informé de tout changement dans l'application.",
"step_1": "Étape 1 : Authentifiez votre compte via le bot ClassroomIO.",
"button_1": "Ouvrir le robot",
"step_2": "Étape 2 : Saisissez l'ID de chat qui vous a été fourni par le bot.",
"step_2": "Étape 2 : Saisissez l’ID de chat qui vous a été fourni par le bot.",
"button_2": "Connecter",
"success_message": "Intégration réussie",
"disconnect": "Déconnecter"
@@ -187,7 +183,6 @@
"open_billing": "Facturation ouverte"
}
},
"org_navigation": {
"dashboard": "Tableau de bord",
"courses": "Cours",
@@ -200,60 +195,67 @@
"unlock": "Débloquez des fonctionnalités illimitées et investissez dans notre avenir",
"upgrade": "Mettre à jour maintenant"
},
"pricing": {
"modal": {
"heading": "Mise à Niveau du Plan",
"heading": "Plan de mise à niveau",
"thanks": "Merci pour votre soutien",
"plan": "Votre plan est accompagné d'avantages intéressants, y compris l'accès à toutes les fonctionnalités futures que nous publierons.",
"plan": "Votre forfait s'accompagne d'avantages et d'avantages intéressants, notamment l'accès à toutes les futures fonctionnalités que nous publierons.",
"close": "Fermer",
"learn": "En savoir plus",
"learn": "Apprendre encore plus",
"month": "mois"
},
"data": {
"1": {
"name": "Basique",
"description": "Plan gratuit pour un usage personnel, aucune carte de crédit requise.",
"description": "Plan de niveau gratuit pour un usage personnel, aucune carte de crédit requise.",
"price": {
"monthly": "0",
"yearly": "0"
},
"features": {
"1": "Cours Illimités",
"2": "Questions/Réponses Illimitées",
"3": "50 Étudiants",
"4": "Constructeur de Cours IA (sans téléchargement de vidéo)",
"5": "Chat en Direct et Sondages"
"1": "Cours illimités",
"2": "Questions/Réponses illimitées",
"3": "50 étudiants",
"4": "AI Course Builder (pas de téléchargement de vidéo)",
"5": "Chat en direct et sondages"
},
"cta": {
"label": "Inscrivez-vous maintenant",
"label": "S'inscrire maintenant",
"dashboard_label": "Rétrograder"
}
},
"2": {
"name": "Premiers Utilisateurs",
"description": "Pour les entreprises d'enseignement en croissance rapide qui visent à se développer.",
"name": "Adopteurs précoces",
"description": "Pour les entreprises d’enseignement à croissance rapide qui visent à évoluer.",
"price": {
"monthly": "35",
"yearly": "350"
},
"features": {
"1": "Tout en Basique",
"2": "Enseignants Illimités",
"3": "10K Étudiants",
"4": "Constructeur de Cours IA Avancé (Téléchargement de Vidéo & Certificat)",
"5": "Personnalisation de Marque",
"6": "Inclut toutes les Fonctionnalités à Venir"
"1": "Tout en Basic",
"2": "Enseignants illimités",
"3": "10 000 étudiants",
"4": "Générateur de cours avancé sur l'IA (téléchargement vidéo et certificat)",
"5": "Image de marque personnalisée",
"6": "Comprend toutes les fonctionnalités à venir"
},
"cta": {
"label": "Je veux participer 😍",
"label": "Je veux entrer 😍",
"dashboard_label": "Soutenez-nous 😍"
}
},
"3": {
"name": "Entreprise",
"description": "Le mieux adapté aux entreprises plus importantes qui ont besoin de plus de contrôle.",
"description": "Idéal pour les grandes entreprises qui ont besoin de plus de contrôle",
"price": {
"monthly": "Demandez les Prix",
"yearly": "Demandez les Prix"
"monthly": "Demander un prix",
"yearly": "Demander un prix"
},
"features": {
"1": "Tout en Premiers Utilisateurs plus :",
"2": "Étudiants Illimités",
"3": "Domaine Personnalisé",
"4": "Support 24/7"
"1": "Tout dans Early Adopters plus :",
"2": "Étudiants illimités",
"3": "Domaine personnalisé",
"4": "Assistance 24h/24 et 7j/7"
},
"cta": {
"label": "Contactez-nous",
@@ -262,41 +264,39 @@
}
}
},
"setup": {
"get_started": "Commencer",
"1": {
"title": "Télécharger une photo de profil et mettre à jour le nom d'utilisateur",
"desc": "Personnaliser et ajouter une touche humaine pour rendre les interactions plus personnelles et mémorables",
"title": "Téléchargez une photo de profil et mettez à jour le nom d'utilisateur",
"desc": "Personnaliser et apporter une touche humaine rendant les interactions plus personnelles et mémorables",
"button_label": "Mettre à jour le profil"
},
"2": {
"title": "Mettre à jour la photo de profil de l'organisation",
"desc": "Établir une identité professionnelle et reconnaissable pour votre organisation",
"button_label": "Mettre à jour le profil de l'org"
"desc": "Établissez une identité professionnelle et reconnaissable pour votre organisation",
"button_label": "Mettre à jour le profil de l'organisation"
},
"3": {
"title": "Créer un cours",
"desc": "Créer un cours que vous partagerez avec vos étudiants",
"desc": "Créez un cours que vous partagerez avec vos étudiants",
"button_label": "Créer un cours"
},
"4": {
"title": "Créer une leçon",
"desc": "Divisez votre cours en leçons que vos étudiants peuvent comprendre facilement",
"desc": "Divisez votre cours en leçons que vos élèves peuvent facilement comprendre",
"button_label": "Créer une leçon"
},
"5": {
"title": "Créer un exercice",
"desc": "Testez vos étudiants et permettez-leur de démontrer leur compréhension du sujet",
"button_label": "Créer une tâche"
"desc": "Testez vos élèves pour leur permettre de démontrer leur compréhension du sujet",
"button_label": "Créer une affectation"
},
"6": {
"title": "Publier un cours",
"desc": "Rendez votre cours public et achetable",
"button_label": "Publier le cours"
}
"desc": "Rendre votre cours public et achetable",
"button_label": "Publier un cours"
},
"get_started": "Commencer"
},
"add_org": {
"create_org": "Créer une organisation",
"name": "Nom de l'organisation",
@@ -305,34 +305,36 @@
"sitename": "Le nom du site existe déjà",
"error_organization": "Quelque chose s'est mal passé lors de la création de cette organisation. Veuillez recharger et réessayer"
},
"navigation": {
"goto": "Aller à",
"courses": "Cours",
"home": "Maison",
"classroomio_home": "ClassroomIO Maison",
"classroomio_home": "Accueil ClassroomIO",
"dashboard": "Tableau de bord",
"discussion": "Discussion",
"people": "Personnes",
"goto_lms": "Aller à LMS",
"goto_home": "Aller à ClassroomIO Maison",
"goto_lms": "Aller au LMS",
"goto_home": "Accéder à l'accueil ClassroomIO",
"login": "Se connecter",
"signup": "S'inscrire"
"signup": "S'inscrire",
"redirecting": "Redirection",
"loading_state": "Vous passez à la page suivante, veuillez patienter.",
"org_loading_state": "Vous emmener dans votre organisation..."
},
"markdown_editor": {
"write": "Écrire",
"preview": "Aperçu"
},
"components": {
"quiz": {
"title": "Quiz",
"second": "Secondes)",
"second": "Seconde(s)",
"answer": "Réponses)",
"question_delete": "Supprimer la question",
"add_more": "+ Ajouter plus de réponses",
"remove_last": "- Supprimer la dernière réponse",
"quiz_delete": "Supprimer le questionnaire",
"delete_question": "Êtes-vous sûr de vouloir supprimer cette question?",
"delete_question": "Êtes-vous sûr de vouloir supprimer cette question ?",
"delete_quiz": "Êtes-vous sûr de vouloir supprimer ce quiz ?",
"lose_content": "Vous perdrez votre contenu et cette action ne pourra pas être annulée.",
"delete": "Supprimer",
@@ -364,7 +366,6 @@
}
}
},
"schedule": {
"title": "Votre emploi du temps",
"essence": "L’essence de la collaboration en matière de conception",
@@ -372,7 +373,6 @@
"join": "Rejoindre l'appel",
"no": "Pas de cours ce jour"
},
"dashboard": {
"morning_heading": "Bonjour",
"afternoon_heading": "Bon après-midi",
@@ -380,7 +380,7 @@
"create_course": "Créer un cours",
"view_site": "Voir le site",
"hero_content": "Merci pour ce que vous faites ❤️. Vous changez des vies, une classe à la fois et grâce à vous, le monde est meilleur. 😊",
"hero_button": "Continuer à construire 🚀",
"hero_button": "Continuez à construire 🚀",
"your_schedule": "Votre emploi du temps",
"today": "Aujourd'hui",
"yesterday": "Hier",
@@ -399,7 +399,6 @@
"lessons_completed": "Leçons terminées",
"No_courses_started": "Aucun cours n'a commencé"
},
"courses": {
"heading": "Cours",
"heading_button": "Créer un cours",
@@ -419,7 +418,7 @@
"delete": "Supprimer"
},
"error_message": "Une erreur s'est produite.",
"lessons_number": "course",
"lessons_number": "cours",
"students": "étudiants",
"published": "Publié",
"unpublished": "Inédit",
@@ -427,7 +426,7 @@
"list_view": {
"title": "Titre",
"description": "Description",
"lessons": "Leçons",
"lessons": "Cours",
"students": "Étudiants",
"published": "Publié"
}
@@ -441,7 +440,6 @@
"button": "Finition"
}
},
"course": {
"navItems": {
"1": "Fil d'actualité",
@@ -454,7 +452,6 @@
"8": "Page de destination",
"9": "Paramètres"
},
"navItem": {
"news_feed": {
"heading": "Fil d'actualité",
@@ -462,7 +459,7 @@
"title": "Ajouter",
"edit_post": "Modifier le message",
"make_a_post": "Créer un message",
"placeholder": "Partagez une mise à jour avec vos étudiants",
"placeholder": "Partagez une mise à jour avec vos élèves",
"cancel": "Annuler",
"post": "Poste"
},
@@ -475,14 +472,13 @@
"comment_creation_error": "Une erreur s'est produite lors de la création du commentaire",
"add_comment_success": "Commentaire ajouté",
"toggle_pin_error": "Échec de l'activation du flux épinglé",
"unpinned": "Échec de l'activation du flux épinglé",
"unpinned": "Désépinglé",
"successfully": "Avec succès",
"feed_delete_success": "Flux supprimé avec succès",
"fetch_feed_fail": "Échec de la récupération des flux d'actualités",
"fetching_error": "Une erreur s'est produite lors de la récupération du flux"
}
},
"lessons": {
"heading": "Cours",
"add_lesson": {
@@ -490,10 +486,10 @@
"modal_heading": "Ajouter une nouvelle leçon",
"lesson_title": "Titre de la leçon",
"click_to": "Cliquez pour",
"lock": "fermer",
"lock": "verrouillage",
"unlock": "ouvrir",
"fullname": "nom et prénom",
"save": "sauvegarder",
"save": "Sauvegarder",
"edit": "Modifier",
"delete": "Supprimer"
},
@@ -508,7 +504,6 @@
"no_tutor": "Aucun tuteur ajouté",
"body_header": "Pas encore de cours",
"body_content": "Partagez vos connaissances avec le monde en créant des leçons engageantes. Commencez par cliquer sur le bouton Ajouter.",
"lesson_nav": {
"materials": "Matériaux",
"exercises": "Des exercices"
@@ -518,14 +513,13 @@
"done": "Fait",
"edit": "Modifier",
"mark_as": "Marquer comme",
"incomplete": "Incomplète",
"complete": "Complète",
"incomplete": "Incomplet",
"complete": "Complet",
"materials": {
"body_heading": "Aucune note, vidéo ou diapositive ajoutée pour cette leçon pour le moment",
"body_content": "Partagez vos connaissances avec vos élèves en créant du contenu engageant. Commencez par cliquer sur",
"no_translation": "Aucune traduction pour la langue sélectionnée",
"get_started": "Commencer",
"no_translation": "Aucune traduction pour la langue sélectionnée",
"button": "bouton",
"tabs": {
"note": {
@@ -550,13 +544,13 @@
"add_video": {
"title": "Ajouter une vidéo",
"add_by": "Ajouter par",
"youtube_link": "Lien Youtube",
"youtube_link": "Lien YouTube",
"videos_added": "Vidéos ajoutées",
"add_video": "Ajouter une vidéo",
"upload_video": "Télécharger une video",
"select_file": "Sélectionnez le fichier (Mp4, MOV, AVI) à télécharger dans votre leçon.",
"size": "(500 Mo maximum)",
"oops": "Oups 😬, impossible de télécharger la vidéo",
"size": "(Maximum 500 Mo)",
"oops": "Oups 😬, impossible de télécharger la vidéo",
"sorry": "Désolé, la vidéo n'a pas été téléchargée. La taille du fichier est trop grande,",
"sorry_2": "la taille maximale est de 30 Mo. Essayer à nouveau!",
"button": "Essayez un autre fichier",
@@ -564,13 +558,14 @@
"sorry_3": "Désolé, notre vidéo n'a pas été téléchargée, le format de fichier n'est pas pris en charge ou quelque chose s'est mal passé sur le serveur.",
"sorry_4": "Téléchargez des fichiers MP4, MOV et AVI.",
"upgrade": "Mettez à niveau votre forfait pour télécharger des vidéos",
"uploading": "Téléchargement..."
"uploading": "Téléchargement...",
"invalid_youtube": "Lien(s) YouTube invalide(s)",
"invalid_link": "Lien(s) invalide(s)"
}
}
},
"button_done": "Fait"
},
"exercises": {
"heading": "Tous les exercices",
"add_button": "Ajouter",
@@ -582,15 +577,15 @@
"heading": "Nouvel exercice",
"options": {
"1": "De zéro",
"subtitle_1": "Créez votre exercice à partir de zéro si vous avez déjà préparé vos questions",
"2": "Utiliser un modèle",
"3": "Utiliser l'IA",
"subtitle_1": "Créez votre exercice à partir de zéro si vous avez déjà préparé vos questions",
"subtitle_2": "Choisissez parmi plus de 100 modèles d'exercices prédéfinis pour vous aider à démarrer",
"3": "Use AI",
"subtitle_3": "Vous pouvez générer un exercice avec l'IA à partir de vos notes"
},
"how": "Comment voulez-vous créer votre exercice",
"coming_soon": "À venir",
"next": "Suivante",
"next": "Suivant",
"title": "Donnez un titre à votre exercice",
"title_placeholder": "Nom de l'exercice",
"finish": "Finition",
@@ -600,12 +595,12 @@
"back": "Dos",
"create_exercises": "Créez des exercices à partir de Notes avec l'IA",
"choose_questions": "Choisissez le nombre de questions et d'options que vous souhaitez et l'IA vous aidera à créer un exercice à partir de votre note. Allons-y.",
"how_many_questions": "Combien de questions souhaitez-vous créer ?",
"how_many_options": "Combien d’options par question souhaitez-vous ?",
"how_many_questions": "Combien de questions souhaitez-vous créer ?",
"how_many_options": "Combien d’options par question souhaitez-vous ?",
"add_note": "Veuillez ajouter une note pour utiliser cette fonctionnalité",
"generate": "Générer",
"completion": "Génération d'IA terminée",
"click_generate": "Cliquez sur « Générer » pour un peu de magie"
"click_generate": "Cliquez sur « Générer » pour un peu de magie"
},
"all_exercises": {
"heading": "Tous les exercices",
@@ -631,9 +626,9 @@
"twitter": "Écrivez votre lien Twitter ici",
"linkedin": "Écrivez votre lien LinkedIn ici",
"number": "Écrivez votre numéro de téléphone ici",
"previous": "Précédente",
"previous": "Précédent",
"finish": "Finition",
"next": "Suivante",
"next": "Suivant",
"description": {
"title": "Titre",
"heading": "Description",
@@ -648,7 +643,7 @@
},
"edit_mode": {
"delete_modal": "Supprimer le modal",
"sure": "Etes-vous sûr de vouloir supprimer cet exercice?",
"sure": "Êtes-vous sûr de vouloir supprimer cet exercice ?",
"no": "Non, annule",
"yes": "Oui, supprimer",
"deleting": "Suppression...",
@@ -681,21 +676,19 @@
"question_chart": "Tableaux de questions"
},
"individual": {
"heading": "Individuelle",
"heading": "Individuel",
"answers": "Réponses individuelles",
"no": "Aucune réponse n'a été fournie"
},
"submissions": "प्रविष्टियों"
"submissions": "Soumissions"
}
}
},
"comments": {
"title": "Commentaires",
"title": "commentaires",
"you": "Toi",
"placeholder": "Dire quelque chose"
},
"polls": {
"title": "Sondage",
"active_polls": "Sondages actifs",
@@ -703,7 +696,6 @@
"loading": "Chargement...",
"no_polls": "Aucun sondage à afficher"
},
"poll": {
"voted": "Voté",
"created_by": "Créé par",
@@ -726,33 +718,29 @@
"poll_question": "Question de sondage"
}
},
"attendance": {
"title": "Présence",
"present": "Présente",
"absent": "Absente",
"present": "Présent",
"absent": "Absent",
"search_students": "Rechercher des étudiants",
"student": "Étudiante",
"student": "Étudiant",
"lesson": "Leçon",
"no_student": "Aucun étudiant ajouté"
},
"submissions": {
"title": "Exercices soumis",
"submission_status": {
"1": "Soumise",
"1": "Soumis",
"2": "En cours",
"3": "Noté"
}
},
"marks": {
"title": "Des marques",
"student": "Étudiante",
"total": "Totale",
"student": "Étudiant",
"total": "Total",
"no_student": "Aucun étudiant ajouté"
},
"people": {
"title": "Personnes",
"add": "Ajouter",
@@ -766,7 +754,7 @@
"invite_modal": {
"title": "Inviter des gens",
"invite": "Inviter des tuteurs",
"select": "Sélectionner des tuteurs dans l'organisation...",
"select": "Sélectionnez les tuteurs dans l'organisation...",
"to_add": "Pour ajouter un tuteur à votre organisation,",
"go_to": "accéder aux paramètres de l'organisation",
"invite_students": "Inviter des étudiants",
@@ -782,20 +770,19 @@
"yes": "Oui"
},
"roles": {
"admin": "Administratrice",
"tutor": "Tutrice",
"student": "Étudiante",
"admin": "Administrateur",
"tutor": "Tuteur",
"student": "Étudiant",
"filter": "Filtre"
}
},
"certificates": {
"title": "Certificats",
"certificate_settings": "Paramètres du certificat",
"theme": "Choisissez un thème",
"logo": "Logo de la marque",
"to_update": "Pour mettre à jour votre image de marque, rendez-vous sur",
"settings": "Paramètres &gt; Paramètres de l'organisation",
"settings": "Paramètres > Paramètres de l'organisation",
"and_upload": "et téléchargez le logo de votre marque",
"goto_settings": "Aller aux paramètres",
"description": "Description du cours",
@@ -810,7 +797,6 @@
"locked_certificate_body_2": "Si vous avez besoin de votre certificat, veuillez contacter votre instructeur.",
"download_certificate": "Télécharger le certificat"
},
"landing_page": {
"editor": {
"title": {
@@ -819,14 +805,12 @@
"3": "Description",
"4": "Objectifs",
"5": "Commentaires",
"6": "Instructrice",
"6": "Instructeur",
"7": "Tarifs"
},
"save": "Sauvegarder",
"page_builder": "Générateur de pages",
"section": "section",
"header_form": {
"title": "Titre",
"description": "Description",
@@ -834,7 +818,6 @@
"replace_cover": "Remplacer l'image de couverture",
"replace": "Remplacer"
},
"reviews_form": {
"add_reviews": "Ajouter des avis",
"fullname": "Nom et prénom",
@@ -842,7 +825,6 @@
"rating": "Notation",
"hide": "Masquer l'avis"
},
"instructor_form": {
"upload": "Logo de l'instructeur",
"name": "Nom de l'instructeur",
@@ -852,7 +834,6 @@
"about_placeholder": "Un bref aperçu de l'instructure",
"total": "Nombre total de cours"
},
"pricing_form": {
"currency": "Devise",
"cost": "Coût",
@@ -864,24 +845,21 @@
"gift": "À propos du cadeau"
}
},
"upload_widget": {
"title": "Widget de bannière",
"width": "Les images plus larges que 1500 pixels fonctionnent mieux.",
"size": "La taille maximale par fichier est de 500 Kb.",
"width": "Les images plus larges que 1 500 pixels fonctionnent mieux.",
"size": "La taille maximale par fichier est de 500 Ko.",
"submit": "Soumettre",
"no_images": "Aucune image disponible."
},
"pricing_section": {
"free": "Gratuite",
"free": "Gratuit",
"not_accepting": "Ce cours n'accepte actuellement pas de nouveaux étudiants.",
"discount": "Rabais",
"enroll": "Inscrivez-vous maintenant",
"buy": "Acheter maintenant",
"bird": "Offre pour inscription anticipée. Achetez dès que possible"
},
"start_course": "Commencer le cours",
"requirement": "Exigence",
"description": "Description du cours",
@@ -896,7 +874,7 @@
"see_all": "Voir tout",
"header_video": "Vidéo d'en-tête",
"no_course_published": "Aucun cours publié",
"coming_your_way": "Nous avons d'excellents cours à venir, restez à l'écoute!!!",
"coming_your_way": "Nous avons d'excellents cours à venir, restez à l'écoute !!!",
"view_less": "Voir moins",
"view_all": "Voir tout",
"thank_you": "Merci d'avoir laissé un message, nous vous répondrons sous peu",
@@ -913,16 +891,14 @@
"explore": "Explorer les cours",
"find": "Trouvez des cours que vous allez adorer dispensés par les meilleurs professeurs du monde entier",
"find_course": "Trouver un cours...",
"reviews_modal": {
"title": "Commentaires",
"rating": "Notation",
"ratings": "Notes"
},
"instructor": "Instructrice",
"instructor": "Instructeur",
"courses": "cours"
},
"settings": {
"heading": "Paramètres",
"cover_image": "Image de couverture",
@@ -944,20 +920,19 @@
"available": "Rendre la leçon disponible en téléchargement en pdf pour les étudiants inscrits",
"course_download": "Téléchargement du cours",
"course_avail": "Rendre le cours disponible en téléchargement pour les étudiants inscrits",
"download": "Téléchargements",
"download": "Télécharger",
"allow": "Autoriser les nouveaux étudiants",
"access": "Autoriser les nouveaux étudiants à accéder à ce cours",
"publish": "Publier le cours",
"determines": "Cela détermine si votre cours s'affiche sur votre page de destination",
"published": "Publié",
"unpublished": "Inédite",
"unpublished": "Inédit",
"delete": "Supprimer un cours",
"delete_text": "Supprimer ce cours, cette action est irréversible",
"save": "Sauvegarder les modifications"
}
}
},
"community": {
"title": "Communauté",
"ask_button": "Demander à la communauté",
@@ -976,7 +951,8 @@
"comment": "Commentaire"
},
"find_question": "Rechercher une question",
"asked": "demandée",
"asked": "demandé",
"answers": "réponses",
"no_question": "Aucune question posée",
"ask_a_question": "Poser une question à la communauté",
"delete": {
@@ -988,7 +964,6 @@
"yes": "Oui, supprimer"
}
},
"audience": {
"title": "Public",
"export": "Exporter",
@@ -998,41 +973,36 @@
"email": "E-mail",
"date_joined": "Date d'adhésion"
},
"lms_navigation": {
"home": "Maison",
"my_learning": "Mon apprentissage",
"exercise": "Exercise",
"exercise": "Exercice",
"community": "Communauté",
"help": "Aide",
"settings": "Paramètres"
},
"my_learning": {
"heading": "Mon apprentissage",
"progress": "En cours",
"complete": "Complète",
"complete": "Complet",
"search": "Rechercher des cours",
"not_in_progress": "Aucun cours en cours",
"any_progress": "Tout cours que vous commencez sera affiché ici",
"not_completed": "Aucun cours terminé",
"any_course": "Tout cours que vous terminez sera affiché ici"
},
"exercises": {
"heading": "Des exercices",
"not_submitted": "Pas transmis",
"submitted": "Soumise",
"submitted": "Soumis",
"in_progress": "Classement en cours",
"graded": "Noté",
"lesson": "Leçon"
},
"snackbar": {
"success": "Succès",
"something": "Quelque chose s'est mal passé - Veuillez réessayer plus tard",
"update": "Mise à jour",
"poll": {
"error": {
"creating_poll": "Une erreur s'est produite lors de la création du sondage",
@@ -1044,17 +1014,14 @@
"vote_once": "Vous pouvez voter seulement une fois"
}
},
"exercise": {
"success": "Enregistré avec succès",
"submission_updated": "Soumission mise à jour pour",
"error_fetching": "La récupération des exercices a échoué, veuillez recharger la page"
},
"materials": {
"apology": "Nous nous excusons, une erreur s'est produite lors de l'enregistrement de votre leçon."
},
"newsfeed": {
"success": {
"edit": "Flux modifié avec succès",
@@ -1066,7 +1033,6 @@
"creating": "création de flux"
}
},
"people": {
"error": {
"missing_data": "Données de l'organisation manquantes, veuillez recharger la page",
@@ -1076,7 +1042,6 @@
"copied": "Copié dans le presse-papier"
}
},
"course_settings": {
"success": {
"download": "Téléchargement complet",
@@ -1086,15 +1051,14 @@
"update_successful": "Mise à jour réussie"
},
"error": {
"not_right": "Quelque chose ne va pas - Veuillez réessayer plus tard",
"went_wrong": "Quelque chose s'est mal passé - Veuillez réessayer plus tard ",
"not_right": "Quelque chose ne va pas – Veuillez réessayer plus tard",
"went_wrong": "Quelque chose s'est mal passé - Veuillez réessayer plus tard",
"title": "le titre ne peut pas être vide",
"description": "la description ne peut pas être vide",
"failed_integration": "Échec de l'intégration, veuillez réessayer plus tard",
"failed_deletion": "Échec de la suppression, veuillez réessayer plus tard"
}
},
"lms": {
"error": {
"username_exists": "Ce nom d'utilisateur existe déjà",
@@ -1102,17 +1066,15 @@
"try_again": "Veuillez réessayer"
}
},
"team_members": {
"invite_sent": "Invitation envoyée!",
"user_exists": "L'utilisateur existe déjà",
"invite_fail": "Échec de l'envoi de l'invitation, veuillez réessayer",
"remove_fail": "Échec de la suppression de l'utilisateur, veuillez réessayer"
},
"landing_page_settings": {
"error": {
"file_size": "La taille du fichier ne doit pas dépasser 500 Ko+",
"file_size": "La taille du fichier ne doit pas dépasser 500 Ko",
"try_again": "Essayer à nouveau",
"label": "Télécharger une image",
"fetch_error": "Erreur lors de la récupération des images depuis Unsplash"
@@ -1121,7 +1083,6 @@
"complete": "Complet :)"
}
},
"course": {
"success": {
"comment_deleted": "Commentaire supprimé",
@@ -1139,78 +1100,67 @@
"feed_fetch_error": "Une erreur s'est produite lors de la récupération du flux"
}
},
"attendance": {
"error": {
"reload": "Quelque chose ne va pas. Veuillez recharger et reprendre la participation"
}
},
"lessons": {
"success": {
"complete_marked": "Marqué comme terminé",
"complete_download": "Téléchargement complet"
},
"error": {
"try_later": "Quelque chose ne va pas - Veuillez réessayer plus tard"
"try_later": "Quelque chose ne va pas – Veuillez réessayer plus tard"
}
},
"marks": {
"error": "Erreur lors de la récupération des marques"
},
"submissions": {
"success": {
"grading": "Note enregistrée et élève averti"
}
},
"invite": {
"failed_join": "Échec de l'adhésion, veuillez contacter votre administrateur"
},
"community": {
"error": {
"try_again": "Erreur - Veuillez réessayer plus tard",
"deleting_comments": "Erreur lors de la suppression des commentaires",
"deleting_question": "Erreur lors de la suppression de la question"
},
"success": {
"comment_submitted": "Commentaire soumis!",
"comment_submitted": "Commentaire soumis !",
"success_delete": "Supprimé avec succès",
"question_submitted": "Question soumise !"
"question_submitted": "Question soumise !"
}
},
"signup": {
"disposable": "L'e-mail que vous avez fourni est jetable"
},
"upgrade": {
"generate_fail": "Échec de la génération du succès",
"generate_fail": "N'a pas réussi à générer du succès",
"failed": "Échec, veuillez réessayer plus tard"
},
"setup": {
"info_lesson": "Vous devez créer une leçon",
"info_course": "Vous devez créer un cours"
}
},
"content": {
"heading": "Internationalisation dans SvelteKit",
"toggle_label": "Sélectionnez la langue préférée",
"button_labels": {
"0": "{{value:number}}",
"1": "{{value:number}}",
"2": "{{value:number}}"
"0": "{{valeur : numéro}}",
"1": "{{valeur : numéro}}",
"2": "{{valeur : numéro}}"
},
"body_text": "Ceci est un petit exemple pour démontrer la fonctionnalité d'i18n dans SvelteKit en utilisant la bibliothèque sveltekit-i18n. sveltekit-i18n est une petite bibliothèque sans dépendances externes, conçue pour Svelte et SvelteKit. Elle assemble @sveltekit-i18n/base et @sveltekit-i18n/parser-default pour vous fournir la solution sveltekit-i18n la plus simple. Le nombre total de téléchargements npm par semaine à partir de {{dateValue:date}} est de {{download:number}}.",
"awards": "Vous avez {{award:gt; 0: {{award; 1:remporté exactement {{award}} prix; default:remporté {{award}} prix}}; default:aucun prix remporté}}!",
"body_text": "Ceci est un petit exemple pour démontrer la fonctionnalité i18n dans SvelteKit à l'aide de la bibliothèque sveltekit-i18n. sveltekit-i18n est une petite bibliothèque sans dépendances externes, conçue pour Svelte et SvelteKit. Il colle @sveltekit-i18n/base et @sveltekit-i18n/parser-default ensemble pour vous fournir la solution sveltekit-i18n la plus simple. Le nombre total de téléchargements npm par semaine au {{dateValue:date}} est de {{download:number}}.",
"awards": "Vous avez {{award:gt; 0 : {{prix ; 1 : a remporté exactement le prix {{award}} ; par défaut : a remporté {{award}} récompenses}} ; par défaut : je n'ai remporté aucun prix}} !",
"date": "{{val:date}}",
"time": "Seul le format 'heure' n'est pas disponible, il doit s'agir d'un formateur DateTime",
"number": "{{value:currency}}"
"time": "Seul le formateur « heure » ​​n'est pas disponible, il doit s'agir du formateur DateTime",
"number": "{{valeur : monnaie}}"
}
}
}
+108 -158
View File
@@ -2,14 +2,13 @@
"verify_email_modal": {
"heading": "अपना ईमेल सत्यापित करें",
"sent_verification": "हमने एक सत्यापन ईमेल भेजा है",
"to_confirm": "प्रदान की गई ईमेल की वैधता की पुष्टि करने के लिए.",
"to_confirm": "प्रदान की गई ईमेल की वैधता की पुष्टि करने के लिए।",
"loading": "लोड हो रहा है...",
"resend": "सत्यापन कोड पुनः भेजें",
"resend_in": "सत्यापन पुनः भेजें",
"seconds": "सेकंड",
"snackbar_error": "कोड भेजते समय त्रुटि"
},
"onboarding": {
"sell": "पाठ्यक्रम ऑनलाइन बेचें",
"teach": "मेरे वर्तमान छात्रों को ऑनलाइन पढ़ाएं",
@@ -27,14 +26,12 @@
"back": "पीछे",
"continue": "जारी रखना"
},
"welcome_modal": {
"we_at": "हम पर",
"content_1": "भावी पीढ़ी को प्रशिक्षित करने में मदद करने के लिए शिक्षकों को बेहतरीन तकनीक से सशक्त बनाने के बड़े मिशन वाली एक छोटी सी टीम है। शिक्षा सबसे शक्तिशाली उपहार है जो आप किसी को भी दे सकते हैं, और अधिक लोगों को यह उपहार देने के लिए आपको आवश्यक सभी उपकरण देना बहुत मायने रखता है।",
"content_2": "हमें चुनने के लिए धन्यवाद",
"content_3": "हम इसकी गहराई से सराहना करते हैं और आपकी सेवा में हैं।"
},
"login": {
"welcome": "वापसी पर स्वागत है",
"email": "आपका ईमेल",
@@ -42,7 +39,6 @@
"forgot": "पासवर्ड भूल गए?",
"login": "लॉग इन करें"
},
"settings": {
"heading": "समायोजन",
"subheadings": {
@@ -62,10 +58,10 @@
"upload_image": "तस्विर अपलोड करना"
},
"personal_information": {
"heading": "व्यक्तिगत जानकारी",
"full_name": "पूरा नाम",
"username": "उपयोगकर्ता नाम",
"email": "ईमेल"
"email": "ईमेल",
"heading": "व्यक्तिगत जानकारी",
"full_name": "पूरा नाम"
},
"update_profile": "प्रोफ़ाइल अपडेट करें",
"logout": "लॉग आउट"
@@ -83,13 +79,13 @@
"custom_domain": {
"heading": "कस्टम डोमेन",
"sub_heading": "अपने डोमेन को अनुकूलित करें",
"body": "एक कस्टम यूआरएल बनाएं ताकि आपके दर्शक आपके संगठन तक आसानी से पहुंच सकें",
"body": "एक कस्टम यूआरएल बनाएं ताकि आपके दर्शक आसानी से आपके संगठन तक पहुंच सकें",
"button": "डोमेन संपादित करें"
},
"team": {
"heading": "टीम",
"sub_heading": "अपनी वेबसाइट सेट करें",
"body": "अपने संगठन में टीम के साथियों को जोड़ें ताकि आप दोनों परियोजनाओं पर सहयोग कर सकें.",
"body": "अपने संगठन में टीम के साथियों को जोड़ें ताकि आप दोनों परियोजनाओं पर सहयोग कर सकें।",
"button": "टीम का प्रबंधन करें"
}
}
@@ -137,7 +133,7 @@
"title": "शीर्षक",
"question": "सवाल",
"answer": "उत्तर",
"button": "नया Faq जोड़ें",
"button": "नया FAQ जोड़ें",
"save": "बचाना",
"cancel": "रद्द करना"
},
@@ -165,16 +161,16 @@
"hide_section": "अनुभाग छिपाएँ",
"facebook": "फेसबुक",
"twitter": "ट्विटर",
"linkedin": "LinkedIn"
"linkedin": "Linkedin"
},
"save_changes": "परिवर्तनों को सुरक्षित करें"
},
"integrations": {
"heading": "तार",
"sub_heading": "एप्लिकेशन में किसी भी बदलाव की सूचना पाने के लिए अपने खाते को टेलीग्राम से कनेक्ट करें।.",
"step_1": "चरण 1: ClassroomIO बॉट के माध्यम से अपने खाते को प्रमाणित करें।.",
"sub_heading": "एप्लिकेशन में किसी भी बदलाव की सूचना पाने के लिए अपने खाते को टेलीग्राम से कनेक्ट करें।",
"step_1": "चरण 1: ClassroomIO बॉट के माध्यम से अपने खाते को प्रमाणित करें।",
"button_1": "बॉट खोलें",
"step_2": "चरण 2: बॉट द्वारा आपको दी गई चैट आईडी दर्ज करें।.",
"step_2": "चरण 2: बॉट द्वारा आपको दी गई चैट आईडी दर्ज करें।",
"button_2": "जोड़ना",
"success_message": "एकीकरण सफल",
"disconnect": "डिस्कनेक्ट"
@@ -187,7 +183,6 @@
"open_billing": "बिलिंग खोलें"
}
},
"org_navigation": {
"dashboard": "डैशबोर्ड",
"courses": "पाठ्यक्रम",
@@ -200,103 +195,108 @@
"unlock": "असीमित सुविधाएँ अनलॉक करें और हमारे भविष्य में निवेश करें",
"upgrade": "अभी अपग्रेड करें"
},
"pricing": {
"modal": {
"heading": "अपग्रेड योजना",
"heading": "उन्नयन योजना",
"thanks": "आपके समर्थन के लिए धन्यवाद",
"plan": "आपकी योजना में कूल लाभ और लाभ हैं, जिसमें हम जारी करते हैं।",
"close": "बंद करें",
"learn": "और जानें",
"plan": "आपकी योजना हमारे द्वारा जारी की जाने वाली सभी भविष्य की सुविधाओं तक पहुंच सहित शानदार सुविधाओं और लाभों के साथ आती है।",
"close": "बंद करना",
"learn": "और अधिक जानें",
"month": "महीना"
},
"data": {
"1": {
"name": "मौलिक",
"description": "व्यक्तिगत उपयोग के लिए मुफ्त टियर योजना, कोई क्रेडिट कार्ड की आवश्यकता नहीं है।",
"name": "बुनियादी",
"description": "व्यक्तिगत उपयोग के लिए निःशुल्क स्तरीय योजना, किसी क्रेडिट कार्ड की आवश्यकता नहीं।",
"price": {
"monthly": "0",
"yearly": "0"
},
"features": {
"1": "असीमित कोर्सेज",
"2": "असीमित प्रश्न / उत्तर",
"1": "असीमित पाठ्यक्रम",
"2": "असीमित प्रश्नोत्तरी",
"3": "50 छात्र",
"4": "एआई कोर्स निर्माता (कोई वीडियो अपलोड नहीं)",
"5": "लाइव चैट और निर्वाचन"
"4": "एआई कोर्स बिल्डर (कोई वीडियो अपलोड नहीं)",
"5": "लाइव चैट और पोल"
},
"cta": {
"label": "अब साइनअप करें",
"dashboard_label": "डाउनग्रेड करें"
"label": "अभी साइनअप करें",
"dashboard_label": "ढाल"
}
},
"2": {
"name": "शुरुआती समर्थक",
"description": "तेजी से बढ़ते शिक्षण व्यवसायों के लिए जो मापांकन करने का उद्देश्य रखते हैं।",
"name": "जल्दी अनुकूलक",
"description": "तेजी से बढ़ते शिक्षण व्यवसायों के लिए जिनका लक्ष्य बड़े पैमाने पर है।",
"price": {
"monthly": "35",
"yearly": "350"
},
"features": {
"1": "मौलिक में सभी",
"1": "बेसिक में सब कुछ",
"2": "असीमित शिक्षक",
"3": "10K छात्र",
"4": "उन्नत एआई कोर्स निर्माता (वीडियो अपलोड और प्रमाणपत्र)",
"4": "उन्नत एआई कोर्स बिल्डर (वीडियो अपलोड और प्रमाणपत्र)",
"5": "कस्टम ब्रांडिंग",
"6": "सभी आने वाली विशेषताएँ शामिल हैं"
"6": "सभी आगामी सुविधाएँ शामिल हैं"
},
"cta": {
"label": "मैं चाहता हूँ 😍",
"dashboard_label": "हमें समर्थन दें 😍"
"label": "मुझे 😍 चाहिए",
"dashboard_label": "हमारा समर्थन करें 😍"
}
},
"3": {
"name": "एंटरप्राइज",
"description": "बड़े व्यवसायों के लिए सबसे उपयुक्त है जो अधिक नियंत्रण की आवश्यकता है।",
"name": "उद्यम",
"description": "बड़े व्यवसायों के लिए सबसे उपयुक्त जिन्हें अधिक नियंत्रण की आवश्यकता होती है",
"price": {
"monthly": "मूल्य की अनुरोध",
"yearly": "मूल्य की अनुरोध"
"monthly": "मूल्य निर्धारण का अनुरोध करें",
"yearly": "मूल्य निर्धारण का अनुरोध करें"
},
"features": {
"1": "शुरुआती समर्थक में सभी पर:",
"1": "अर्ली एडॉप्टर्स प्लस में सब कुछ:",
"2": "असीमित छात्र",
"3": "कस्टम डोमेन",
"4": "24/7 समर्थन"
"4": "24/7 सहायता"
},
"cta": {
"label": "हमसे संपर्क करें",
"dashboard_label": "हमसे संपर्क करें"
"label": "संपर्क करें",
"dashboard_label": "संपर्क करें"
}
}
}
},
"setup": {
"get_started": "शुरू करें",
"1": {
"title": "प्रोफ़ाइल चित्र अपलोड करें और उपयोगकर्ता नाम अपडेट करें",
"desc": "अपनाएं और मानव स्पर्श जोड़कर बातचीत को और व्यक्तिगत और यादगार बनाएं",
"desc": "वैयक्तिकृत और मानवीय स्पर्श बातचीत को अधिक व्यक्तिगत और यादगार बनाता है",
"button_label": "प्रोफ़ाइल अपडेट करें"
},
"2": {
"title": "संगठन का प्रोफ़ाइल चित्र अपडेट करें",
"desc": "अपने संगठन के लिए एक पेशेवर और पहचानी जानकारी स्थापित करें",
"title": "संगठन प्रोफ़ाइल चित्र अपडेट करें",
"desc": "अपने संगठन के लिए एक पेशेवर और पहचानने योग्य पहचान स्थापित करें",
"button_label": "संगठन प्रोफ़ाइल अपडेट करें"
},
"3": {
"title": "कोर्स बनाएं",
"desc": "एक कोर्स बनाएं जिसे आप अपने छात्रों के साथ साझा करेंगे",
"button_label": "कोर्स बनाएं"
"title": "पाठ्यक्रम बनाएं",
"desc": "एक पाठ्यक्रम बनाएं जिसे आप अपने छात्रों के साथ साझा करेंगे",
"button_label": "पाठ्यक्रम बनाएं"
},
"4": {
"title": "एक सबक बनाएं",
"desc": "अपने कोर्स को सबकों में बाँटें जिन्हें आपके छात्र आसानी से समझ सकें",
"button_label": "सबक बनाएं"
"title": "एक पाठ बनाएँ",
"desc": "अपने पाठ्यक्रम को ऐसे पाठों में विभाजित करें जिन्हें आपके छात्र आसानी से समझ सकें",
"button_label": "पाठ बनाएँ"
},
"5": {
"title": "एक अभ्यास बनाएं",
"desc": "अपने छात्रों को परीक्षण करें और उन्हें विषय के समझ को प्रदर्शित करने की अनुमति दें",
"title": "एक व्यायाम बनाएँ",
"desc": "अपने विद्यार्थियों का परीक्षण करें, जिससे उन्हें विषय वस्तु के बारे में अपनी समझ प्रदर्शित करने का अवसर मिले",
"button_label": "असाइनमेंट बनाएं"
},
"6": {
"title": "कोर्स प्रकाशित करें",
"desc": "अपना कोर्स सार्वजनिक और खरीदने योग्य बनाएं",
"button_label": "कोर्स प्रकाशित करें"
}
"title": "एक पाठ्यक्रम प्रकाशित करें",
"desc": "अपने पाठ्यक्रम को सार्वजनिक और क्रय योग्य बनाएं",
"button_label": "पाठ्यक्रम प्रकाशित करें"
},
"get_started": "शुरू हो जाओ"
},
"add_org": {
"create_org": "संगठन बनाएं",
"name": "संगठन का नाम",
@@ -305,34 +305,36 @@
"sitename": "साइटनाम पहले से मौजूद है",
"error_organization": "इस संगठन को बनाते समय कुछ गलत हो गया. कृपया पुनः लोड करें और पुनः प्रयास करें"
},
"navigation": {
"goto": "जाओ",
"courses": "पाठ्यक्रम",
"home": "घर",
"classroomio_home": "ClassroomIO घर",
"classroomio_home": "क्लासरूमआईओ होम",
"dashboard": "डैशबोर्ड",
"discussion": "बहस",
"people": "लोग",
"goto_lms": "जाओ LMS",
"goto_home": "जाओ ClassroomIO घर",
"login": "Login",
"signup": "Signup"
"goto_lms": "एलएमएस पर जाएं",
"goto_home": "क्लासरूमआईओ होम पर जाएं",
"login": "लॉग इन करें",
"signup": "साइन अप करें",
"redirecting": "पुन: निर्देशित",
"loading_state": "आपको अगले पृष्ठ पर ले जा रहा हूँ, कृपया प्रतीक्षा करें।",
"org_loading_state": "आपको आपके संगठन में ले जा रहा हूँ..."
},
"markdown_editor": {
"write": "लिखना",
"preview": "पूर्व दर्शन"
},
"components": {
"quiz": {
"title": "प्रश्नोत्तरी",
"second": "दूसरा",
"answer": "उत्तर",
"question_delete": "प्रश्न हटाएँ",
"add_more": "+ अधिक उत्तर जोड़ें",
"remove_last": "- अंतिम उत्तर हटाएँ",
"quiz_delete": "प्रश्नोत्तरी हटाएँ",
"delete_question": "क्या आप वाकई इस प्रश्न को हटाना चाहते हैं?",
"delete_question": "क्या आप वाकई यह प्रश्न हटाना चाहते हैं?",
"delete_quiz": "क्या आप वाकई इस प्रश्नोत्तरी को हटाना चाहते हैं?",
"lose_content": "आप अपनी सामग्री खो देंगे और यह कार्रवाई पूर्ववत नहीं की जा सकेगी.",
"delete": "मिटाना",
@@ -357,14 +359,13 @@
"domains": {
"add": "जोड़ना",
"work_together": "अपने टीम के साथियों या सहयोगियों को अपने संगठन में जोड़ें। एक साथ काम करना शुरू करें",
"url": "URL",
"url": "यूआरएल",
"update": "डोमेन अद्यतन करें",
"custom": "कस्टम डोमेन",
"domain": "अपना स्वयं का डोमेन नाम जोड़ें"
}
}
},
"schedule": {
"title": "आपका समय - सारणी",
"essence": "डिज़ाइन सहयोग का सार",
@@ -372,7 +373,6 @@
"join": "कॉल में शामिल हों",
"no": "इस दिन कोई पाठ नहीं"
},
"dashboard": {
"morning_heading": "शुभ प्रभात",
"afternoon_heading": "शुभ दोपहर",
@@ -380,7 +380,7 @@
"create_course": "पाठ्यक्रम बनाएं",
"view_site": "साइट देखें",
"hero_content": "आप जो करते हैं उसके लिए धन्यवाद ❤️। आप एक समय में एक कक्षा में जीवन बदल रहे हैं और आपके लिए धन्यवाद, दुनिया एक बेहतर जगह है। 😊",
"hero_button": "निर्माण करते रहो 🚀",
"hero_button": "निर्माण करते रहें 🚀",
"your_schedule": "आपका समय - सारणी",
"today": "आज",
"yesterday": "कल",
@@ -394,12 +394,11 @@
"continue": "जारी रखना",
"no_courses": "अभी तक कोई पाठ्यक्रम प्रगति पर नहीं है",
"start_course": "एक बार जब आप कोई कोर्स शुरू कर देंगे, तो आपकी प्रगति यहां दिखाई देगी",
"lms_dashboard_hero": "आज का दिन आपको आपके सीखने के लक्ष्यों के करीब लाने का एक और दिन है। हार मत मानो, जितना अधिक सीखोगे उतना बेहतर हो जाओगे.",
"lms_dashboard_hero": "आज का दिन आपको आपके सीखने के लक्ष्यों के करीब लाने का एक और दिन है। हार मत मानो, जितना अधिक सीखोगे उतना बेहतर हो जाओगे।",
"dont": "हिम्मत मत हारो",
"lessons_completed": "पाठ पूरा हुआ",
"No_courses_started": "कोई पाठ्यक्रम शुरू नहीं हुआ"
},
"courses": {
"heading": "पाठ्यक्रम",
"heading_button": "पाठ्यक्रम बनाएं",
@@ -427,7 +426,7 @@
"list_view": {
"title": "शीर्षक",
"description": "विवरण",
"lessons": "सबक",
"lessons": "पाठ",
"students": "छात्र",
"published": "प्रकाशित"
}
@@ -441,7 +440,6 @@
"button": "खत्म करना"
}
},
"course": {
"navItems": {
"1": "समाचार फ़ीड",
@@ -454,12 +452,11 @@
"8": "लैंडिंग पृष्ठ",
"9": "समायोजन"
},
"navItem": {
"news_feed": {
"heading": "समाचार फ़ीड",
"heading_button": {
"title": "समाचार फ़ीड",
"title": "जोड़ना",
"edit_post": "संपादित पोस्ट",
"make_a_post": "एक पोस्ट बनाएं",
"placeholder": "अपने छात्रों के साथ एक अपडेट साझा करें",
@@ -482,7 +479,6 @@
"fetching_error": "फ़ीड लाते समय एक त्रुटि उत्पन्न हुई"
}
},
"lessons": {
"heading": "पाठ",
"add_lesson": {
@@ -508,24 +504,22 @@
"no_tutor": "कोई शिक्षक नहीं जोड़ा गया",
"body_header": "अभी तक कोई सबक नहीं",
"body_content": "आकर्षक पाठ बनाकर अपना ज्ञान दुनिया के साथ साझा करें। ऐड बटन पर क्लिक करके प्रारंभ करें।",
"lesson_nav": {
"materials": "सामग्री",
"exercises": "अभ्यास"
},
"download_pdf": "डाउनलोड पीडीऍफ़",
"autosaving": "स्वत: सहेजने...",
"autosaving": "स्वतः सहेजना...",
"done": "हो गया",
"edit": "संपादन करना",
"mark_as": "के रूप में मार्क करो",
"incomplete": "अधूरा",
"complete": "पूरा",
"materials": {
"body_heading": "इस पाठ के लिए अभी तक कोई नोट, वीडियो या स्लाइड नहीं जोड़ा गया है",
"body_content": "आकर्षक सामग्री बनाकर अपने ज्ञान को अपने छात्रों के साथ साझा करें। पर क्लिक करके प्रारंभ करें",
"no_translation": "चयनित भाषा के लिए कोई अनुवाद नहीं",
"get_started": "शुरू हो जाओ",
"no_translation": "चयनित भाषा के लिए कोई अनुवाद नहीं",
"button": "बटन",
"tabs": {
"note": {
@@ -533,7 +527,7 @@
"placeholder": "अपना पाठ नोट यहां लिखें",
"ai": {
"outline": "पाठ की रूपरेखा तैयार करें",
"note": "पाठ नोट जनरेट करें",
"note": "पाठ नोट तैयार करें",
"activities": "पाठ गतिविधियाँ उत्पन्न करें"
}
},
@@ -556,7 +550,7 @@
"upload_video": "विडियो को अॅॅपलोड करें",
"select_file": "अपने पाठ पर अपलोड करने के लिए फ़ाइल (Mp4, MOV, AVI) चुनें।",
"size": "(अधिकतम 500 एमबी)",
"oops": "उफ़ 😬, वीडियो अपलोड नहीं किया जा सका",
"oops": "उफ़ `😬, वीडियो अपलोड नहीं किया जा सका",
"sorry": "क्षमा करें हमारा वीडियो अपलोड नहीं किया गया। फ़ाइल का आकार बहुत बड़ा है,",
"sorry_2": "अधिकतम आकार 30 एमबी है. पुनः प्रयास करें!",
"button": "कोई अन्य फ़ाइल आज़माएँ",
@@ -564,13 +558,14 @@
"sorry_3": "क्षमा करें, वीडियो अपलोड नहीं किया गया, फ़ाइल प्रारूप समर्थित नहीं है या सर्वर पर कुछ गलत हो गया।",
"sorry_4": "MP4, MOV और AVI फ़ाइलें अपलोड करें।",
"upgrade": "वीडियो अपलोड करने की अपनी योजना को अपग्रेड करें",
"uploading": "अपलोड हो रहा है..."
"uploading": "अपलोड हो रहा है...",
"invalid_youtube": "अमान्य यूट्यूब लिंक",
"invalid_link": "अमान्य लिंक"
}
}
},
"button_done": "हो गया"
},
"exercises": {
"heading": "सभी व्यायाम",
"add_button": "जोड़ना",
@@ -582,10 +577,10 @@
"heading": "नया व्यायाम",
"options": {
"1": "शुरूुआत से",
"subtitle_1": "यदि आपके पास पहले से ही प्रश्न तैयार हैं तो अपना अभ्यास बिल्कुल नए सिरे से बनाएं",
"2": "एक टेम्पलेट का प्रयोग करें",
"subtitle_2": "आरंभ करने में आपकी सहायता के लिए पूर्वनिर्धारित अभ्यास के 100+ टेम्पलेट्स में से चुनें",
"3": "एआई का प्रयोग करें",
"subtitle_1": "यदि आपके पास पहले से ही प्रश्न तैयार हैं तो अपना अभ्यास बिल्कुल नए सिरे से बनाएं",
"subtitle_2": "आरंभ करने में आपकी सहायता के लिए पूर्वनिर्धारित अभ्यास के 100+ टेम्पलेट्स में से चुनें",
"subtitle_3": "आप अपने नोट्स से AI के साथ एक अभ्यास तैयार कर सकते हैं"
},
"how": "आप अपना व्यायाम कैसे बनाना चाहते हैं?",
@@ -598,10 +593,10 @@
"questions": "प्रशन",
"points": "अंक",
"back": "पीछे",
"create_exercises": "AI के साथ नोट्स से अभ्यास बनाएं",
"create_exercises": "एआई के साथ नोट्स से अभ्यास बनाएं",
"choose_questions": "चुनें कि आप कितने प्रश्न और विकल्प चाहते हैं और एआई आपके नोट से एक अभ्यास बनाने में आपकी मदद करेगा। चल दर।",
"how_many_questions": "How many questions do you want to create?",
"how_many_options": "आप कितने प्रश्न बनाना चाहते हैं?",
"how_many_questions": "आप कितने प्रश्न बनाना चाहते हैं?",
"how_many_options": "आप प्रति प्रश्न कितने विकल्प चाहते हैं?",
"add_note": "कृपया इस सुविधा का उपयोग करने के लिए एक नोट जोड़ें",
"generate": "उत्पन्न",
"completion": "एआई जनरेशन पूर्ण",
@@ -615,7 +610,7 @@
"preview": "पूर्व दर्शन",
"reorder": "प्रश्नों को पुनः व्यवस्थित करें",
"delete_exercise": "व्यायाम हटाएँ",
"order_questions": "प्रश्न क्रम करें",
"order_questions": "प्रश्नों का क्रम दें",
"write_your_answer": "अपना जबाब लिखें",
"write_your_answer_here": "अपना उत्तर यहां लिखें",
"write_your_question_here": "अपना प्रश्न यहां लिखें",
@@ -689,13 +684,11 @@
}
}
},
"comments": {
"title": "टिप्पणियाँ",
"you": "आप",
"placeholder": "कुछ कहो"
},
"polls": {
"title": "मतदान",
"active_polls": "सक्रिय मतदान",
@@ -703,7 +696,6 @@
"loading": "लोड हो रहा है...",
"no_polls": "प्रदर्शित करने के लिए कोई मतदान नहीं"
},
"poll": {
"voted": "मतदान किया",
"created_by": "के द्वारा बनाई गई",
@@ -726,7 +718,6 @@
"poll_question": "मतदान प्रश्न"
}
},
"attendance": {
"title": "उपस्थिति",
"present": "उपस्थित",
@@ -736,7 +727,6 @@
"lesson": "पाठ",
"no_student": "कोई छात्र नहीं जोड़ा गया"
},
"submissions": {
"title": "प्रस्तुत अभ्यास",
"submission_status": {
@@ -745,14 +735,12 @@
"3": "ग्रेड दिया गया"
}
},
"marks": {
"title": "निशान",
"student": "विद्यार्थी",
"total": "कुल",
"no_student": "कोई छात्र नहीं जोड़ा गया"
},
"people": {
"title": "लोग",
"add": "जोड़ना",
@@ -788,14 +776,13 @@
"filter": "फ़िल्टर"
}
},
"certificates": {
"title": "प्रमाण पत्र",
"certificate_settings": "प्रमाणपत्र सेटिंग्स",
"theme": "एक थीम चुनें",
"logo": "ब्रांड लोगो",
"to_update": "अपनी ब्रांड छवि को अद्यतन करने के लिए, पर जाएँ",
"settings": "सेटिंग्स &gt; संगठन सेटिंग्स",
"settings": "सेटिंग्स > संगठन सेटिंग्स",
"and_upload": "और अपना ब्रांड लोगो अपलोड करें",
"goto_settings": "सेटिंग्स में जाओ",
"description": "पाठ्यक्रम विवरण",
@@ -806,11 +793,10 @@
"save": "परिवर्तनों को सुरक्षित करें",
"unlocked_certificate": "प्रमाणपत्र अब उपलब्ध है",
"locked_certificate": "प्रमाणपत्र उपलब्ध नहीं हैं",
"locked_certificate_body_1": "आपके प्रशिक्षक को आपका प्रमाणपत्र अनलॉक करना होगा।",
"locked_certificate_body_1": "आपके प्रशिक्षक को आपका प्रमाणपत्र अनलॉक करना होगा.",
"locked_certificate_body_2": "यदि आपको अपने प्रमाणपत्र की आवश्यकता है, तो कृपया अपने प्रशिक्षक से संपर्क करें।",
"download_certificate": "प्रमाणपत्र डाउनलोड करें"
},
"landing_page": {
"editor": {
"title": {
@@ -822,11 +808,9 @@
"6": "प्रशिक्षक",
"7": "मूल्य निर्धारण"
},
"save": "बचाना",
"page_builder": "पेज बिल्डर",
"section": "अनुभाग",
"header_form": {
"title": "शीर्षक",
"description": "विवरण",
@@ -834,7 +818,6 @@
"replace_cover": "कवर छवि बदलें",
"replace": "प्रतिस्थापित करें"
},
"reviews_form": {
"add_reviews": "समीक्षाएँ जोड़ें",
"fullname": "पूरा नाम",
@@ -842,7 +825,6 @@
"rating": "रेटिंग",
"hide": "समीक्षा छिपाएँ"
},
"instructor_form": {
"upload": "प्रशिक्षक लोगो",
"name": "प्रशिक्षक का नाम",
@@ -852,7 +834,6 @@
"about_placeholder": "संरचना के बारे में एक संक्षिप्त पृष्ठभूमि",
"total": "पाठ्यक्रमों की कुल संख्या"
},
"pricing_form": {
"currency": "मुद्रा",
"cost": "लागत",
@@ -864,7 +845,6 @@
"gift": "उपहार के बारे में"
}
},
"upload_widget": {
"title": "बैनर विजेट",
"width": "1500 पिक्सेल से अधिक चौड़ी छवियाँ सबसे अच्छा काम करती हैं।",
@@ -872,16 +852,14 @@
"submit": "जमा करना",
"no_images": "कोई चित्र उपलब्ध नहीं."
},
"pricing_section": {
"free": "मुक्त",
"not_accepting": "यह पाठ्यक्रम वर्तमान में नए छात्रों को स्वीकार नहीं कर रहा है.",
"not_accepting": "यह पाठ्यक्रम वर्तमान में नए छात्रों को स्वीकार नहीं कर रहा है।",
"discount": "छूट",
"enroll": "अभी दाखिला लें",
"buy": "अभी खरीदें",
"bird": "प्रारंभिक पक्षी प्रस्ताव. यथाशीघ्र खरीदें"
},
"start_course": "कोर्स प्रारंभ करें",
"requirement": "मांग",
"description": "पाठ्यक्रम विवरण",
@@ -906,14 +884,13 @@
"message": "आपका संदेश",
"your_message": "आपका सन्देश यहां",
"submit": "जमा करना",
"successful_sub": "आपको सफलतापूर्वक जोड़ दिया गया है. सब्सक्राइब करने के लिए धन्यवाद.",
"successful_sub": "आपको सफलतापूर्वक जोड़ दिया गया है. सब्सक्राइब करने के लिए धन्यवाद।",
"enter": "अपना ईमेल दर्ज करें...",
"powered_by": "द्वारा संचालित",
"landing_page": "लैंडिंग पृष्ठ",
"explore": "पाठ्यक्रमों का अन्वेषण करें",
"find": "दुनिया भर के सर्वश्रेष्ठ शिक्षकों से ऐसे पाठ्यक्रम ढूंढें जो आपको पसंद आएंगे",
"find_course": "एक कोर्स खोजें...",
"reviews_modal": {
"title": "समीक्षा",
"rating": "रेटिंग",
@@ -922,7 +899,6 @@
"instructor": "प्रशिक्षक",
"courses": "पाठ्यक्रम"
},
"settings": {
"heading": "समायोजन",
"cover_image": "कवर छवि",
@@ -939,12 +915,12 @@
"disabled": "अक्षम",
"enabled": "सक्रिय",
"order": "आदेश पाठ टैब",
"drag": "अपने सामग्री टैब को पुनः क्रमित करने के लिए लेबल खींचें और छोड़ें",
"drag": "अपने सामग्री टैब को पुनः व्यवस्थित करने के लिए लेबल खींचें और छोड़ें",
"lesson_download": "पाठ डाउनलोड करें",
"available": "पंजीकृत छात्रों के लिए पाठ को पीडीएफ में डाउनलोड के लिए उपलब्ध कराएं",
"course_download": "कोर्स डाउनलोड करें",
"course_avail": "पंजीकृत छात्रों के लिए पाठ्यक्रम को डाउनलोड के लिए उपलब्ध कराएं",
"download": "डाउनलोड",
"download": "डाउनलोड करें",
"allow": "नए छात्रों को अनुमति दें",
"access": "नए छात्रों को इस पाठ्यक्रम तक पहुंचने की अनुमति दें",
"publish": "पाठ्यक्रम प्रकाशित करें",
@@ -957,7 +933,6 @@
}
}
},
"community": {
"title": "समुदाय",
"ask_button": "समुदाय से पूछें",
@@ -977,6 +952,7 @@
},
"find_question": "प्रश्न खोजें",
"asked": "पूछा",
"answers": "जवाब",
"no_question": "कोई सवाल नहीं पूछा",
"ask_a_question": "समुदाय से एक प्रश्न पूछें",
"delete": {
@@ -988,7 +964,6 @@
"yes": "हाँ, हटाएँ"
}
},
"audience": {
"title": "श्रोता",
"export": "निर्यात",
@@ -998,7 +973,6 @@
"email": "ईमेल",
"date_joined": "शामिल होने का दिनांक"
},
"lms_navigation": {
"home": "घर",
"my_learning": "मेरी सीख",
@@ -1007,7 +981,6 @@
"help": "मदद",
"settings": "समायोजन"
},
"my_learning": {
"heading": "मेरी सीख",
"progress": "प्रगति पर है",
@@ -1018,7 +991,6 @@
"not_completed": "कोई कोर्स पूरा नहीं हुआ",
"any_course": "आपके द्वारा पूरा किया गया कोई भी पाठ्यक्रम यहां प्रदर्शित किया जाएगा"
},
"exercises": {
"heading": "अभ्यास",
"not_submitted": "प्रस्तुत नही किया है",
@@ -1027,12 +999,10 @@
"graded": "ग्रेड दिया गया",
"lesson": "पाठ"
},
"snackbar": {
"success": "सफलता",
"something": "कुछ गलत हो गया - कृपया बाद में प्रयास करें",
"update": "अद्यतन",
"poll": {
"error": {
"creating_poll": "पोल बनाते समय एक त्रुटि उत्पन्न हुई",
@@ -1044,17 +1014,14 @@
"vote_once": "आप केवल एक बार वोट कर सकते हैं"
}
},
"exercise": {
"success": "सफलतापूर्वक बचाया",
"submission_updated": "सबमिशन को अद्यतन किया गया",
"error_fetching": "फ़ेचिंग अभ्यास विफल रहा, कृपया पृष्ठ पुनः लोड करें"
},
"materials": {
"apology": "हम क्षमा चाहते हैं, आपका पाठ सहेजने में त्रुटि हुई"
"apology": "हम क्षमा चाहते हैं, आपका पाठ सहेजने में त्रुटि हुई।"
},
"newsfeed": {
"success": {
"edit": "फ़ीड सफलतापूर्वक संपादित की गई",
@@ -1066,7 +1033,6 @@
"creating": "फ़ीड बनाना"
}
},
"people": {
"error": {
"missing_data": "संगठन डेटा अनुपलब्ध है, कृपया पृष्ठ पुनः लोड करें",
@@ -1076,7 +1042,6 @@
"copied": "क्लिपबोर्ड पर नकल"
}
},
"course_settings": {
"success": {
"download": "डाउनलोड पूर्ण",
@@ -1094,7 +1059,6 @@
"failed_deletion": "हटाना विफल, कृपया बाद में पुनः प्रयास करें"
}
},
"lms": {
"error": {
"username_exists": "उपयोगकर्ता का नाम पहले से मौजूद है",
@@ -1102,14 +1066,12 @@
"try_again": "कृपया पुन: प्रयास करें"
}
},
"team_members": {
"invite_sent": "आमंत्रण भेज दिया!",
"user_exists": "उपयोगकर्ता पहले से मौजूद है",
"invite_fail": "आमंत्रण भेजने में विफल, कृपया पुनः प्रयास करें",
"remove_fail": "उपयोगकर्ता को हटाने में विफल, कृपया पुनः प्रयास करें"
},
"landing_page_settings": {
"error": {
"file_size": "फ़ाइल का आकार 500kb से अधिक नहीं होना चाहिए",
@@ -1121,7 +1083,6 @@
"complete": "पूरा :)"
}
},
"course": {
"success": {
"comment_deleted": "टिप्पणी हटा दी गई",
@@ -1139,13 +1100,11 @@
"feed_fetch_error": "फ़ीड लाते समय एक त्रुटि उत्पन्न हुई"
}
},
"attendance": {
"error": {
"reload": "कुछ ठीक नहीं है. कृपया पुनः लोड करें और फिर से उपस्थिति लें"
}
},
"lessons": {
"success": {
"complete_marked": "पूर्ण के रूप में चिह्नित",
@@ -1155,62 +1114,53 @@
"try_later": "कुछ ठीक नहीं है - कृपया बाद में प्रयास करें"
}
},
"marks": {
"error": "अंक लाने में त्रुटि"
},
"submissions": {
"success": {
"grading": "ग्रेडिंग सहेजी गई और छात्र को सूचित किया गया"
}
},
"invite": {
"failed_join": "शामिल होना विफल रहा, कृपया अपने व्यवस्थापक से संपर्क करें"
},
"community": {
"error": {
"try_again": "त्रुटि - कृपया बाद में पुनः प्रयास करें",
"deleting_comments": "टिप्पणियाँ हटाने में त्रुटि",
"deleting_question": "प्रश्न हटाने में त्रुटि"
},
"success": {
"comment_submitted": "टिप्पणी सबमिट की गई!",
"success_delete": "सफलतापूर्वक मिटाया गया",
"question_submitted": "प्रश्न सबमिट किया गया!"
}
},
"signup": {
"disposable": "आपके द्वारा प्रदान किया गया ईमेल डिस्पोजेबल है"
},
"upgrade": {
"generate_fail": "सफलता उत्पन्न करने में विफल",
"failed": "विफल, कृपया बाद में पुनः प्रयास करें"
},
"setup": {
"info_lesson": "आपको एक पाठ बनाने की आवश्यकता है",
"info_course": "आपको एक कोर्स बनाने की आवश्यकता है"
"info_course": "आपको एक कोर्स बनाना होगा"
}
},
"content": {
"heading": "SvelteKit में अंतर्राष्ट्रीयकरण",
"toggle_label": "पसंदीदा भाषा चुनें",
"button_labels": {
"0": "{{value:number}}",
"1": "{{value:number}}",
"2": "{{value:number}}"
"0": "{{मूल्य:संख्या}}",
"1": "{{मूल्य:संख्या}}",
"2": "{{मूल्य:संख्या}}"
},
"body_text": "यह sveltekit-i18n लाइब्रेरी का उपयोग करके SvelteKit में i18n कार्यक्षमता प्रदर्शित करने के लिए एक छोटा सा उदाहरण है। sveltekit-i18n एक छोटी लाइब्रेरी है जिसमें कोई बाहरी निर्भरता नहीं है, जो Svelte और SvelteKit के लिए बनाई गई है। यह आपको सबसे सीधा sveltekit-i18n समाधान प्रदान करने के लिए @sveltekit-i18n/base और @sveltekit-i18n/parser-default को एक साथ जोड़ता है। {{dateValue:date}} तक प्रति सप्ताह npm डाउनलोड की कुल संख्या {{download:number}} है।",
"awards": "आपने {{award:gt; 0: {{award; 1:बिल्कुल {{award}} पुरस्कार जीता; default:{{award}} पुरस्कार जीते }}; default:कोई पुरस्कार नहीं जीता }} है।",
"date": "{{val:date}}",
"body_text": "यह sveltekit-i18n लाइब्रेरी का उपयोग करके SvelteKit में i18n कार्यक्षमता प्रदर्शित करने के लिए एक छोटा सा उदाहरण है। sveltekit-i18n एक छोटी लाइब्रेरी है जिसमें कोई बाहरी निर्भरता नहीं है, जो Svelte और SvelteKit के लिए बनाई गई है। यह आपको सबसे सीधा sveltekit-i18n समाधान प्रदान करने के लिए @sveltekit-i18n/base और @sveltekit-i18n/parser-default को एक साथ जोड़ता है। {{dateValue:date}} तक प्रति सप्ताह एनपीएम डाउनलोड की कुल संख्या {{download:number}} है।",
"awards": "आपके पास {{पुरस्कार:gt; 0: {{पुरस्कार; 1:बिल्कुल {{पुरस्कार}} पुरस्कार जीता; डिफ़ॉल्ट: {{पुरस्कार}} पुरस्कार जीता}}; डिफ़ॉल्ट: कोई पुरस्कार नहीं जीता}}!",
"date": "{{वैल:दिनांक}}",
"time": "केवल 'समय' फ़ॉर्मेटर उपलब्ध नहीं है, यह डेटटाइम फ़ॉर्मेटर होना चाहिए",
"number": "{{value:currency}}"
"number": "{{मूल्य:मुद्रा}}"
}
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -24,6 +24,7 @@
import { calDateDiff } from '$lib/utils/functions/date';
import { browser } from '$app/environment';
import { fetchCourses } from '$lib/components/Courses/api.js';
import { t } from '$lib/utils/functions/translations.js';
export let data;
const { slug } = data;
@@ -385,7 +386,8 @@
{:else}
<div class="py-10 px-5">
<a class="text-gray-500 dark:text-white text-md flex items-center" href={`/lms/community`}>
<ArrowLeftIcon size={24} class="carbon-icon dark:text-white" /> Go Back
<ArrowLeftIcon size={24} class="carbon-icon dark:text-white" />
{$t('community.ask.go_back')}
</a>
<div class="my-5 flex justify-between items-center">
{#if isEditMode}
@@ -472,7 +474,7 @@
</div>
<div class="my-8 font-bold">
{pluralize('answers', question.totalComments, true)}
{pluralize($t('community.answers'), question.totalComments, true)}
</div>
{#each question.comments as comment}
@@ -388,7 +388,8 @@
class="text-gray-500 dark:text-white text-md flex items-center"
href={`${$currentOrgPath}/community`}
>
<ArrowLeftIcon size={24} class="carbon-icon dark:text-white" /> Go Back
<ArrowLeftIcon size={24} class="carbon-icon dark:text-white" />
{$t('community.ask.go_back')}
</a>
<div class="my-5 flex justify-between items-center">
{#if isEditMode}
@@ -475,7 +476,7 @@
</div>
<div class="my-8 font-bold">
{pluralize('answers', question.totalComments, true)}
{pluralize($t('community.answers'), question.totalComments, true)}
</div>
{#each question.comments as comment}
@@ -18,6 +18,7 @@
import QuizQuestion from '$lib/components/Org/Quiz/QuizQuestion.svelte';
import { snackbar } from '$lib/components/Snackbar/store';
import { supabase } from '$lib/utils/functions/supabase';
import { t } from '$lib/utils/functions/translations';
export let data;
const { quizId } = data;
@@ -250,7 +251,7 @@
<div class="w-full flex justify-center mb-4">
{#if currentQuestion.options.length < allOptions.length}
<PrimaryButton
label="+ Add more answers"
label={$t('components.quiz.add_more')}
variant={VARIANTS.CONTAINED_WHITE}
onClick={addOption}
className="mr-5"
@@ -258,7 +259,7 @@
{/if}
{#if currentQuestion.options.length > 0}
<PrimaryButton
label="- Remove last answer"
label={$t('components.quiz.remove_last')}
variant={VARIANTS.CONTAINED_WHITE}
onClick={deleteOption}
/>
+77 -37
View File
@@ -319,6 +319,9 @@ importers:
'@types/lodash':
specifier: ^4.14.196
version: 4.14.196
all-object-keys:
specifier: ^2.2.0
version: 2.2.0
autoprefixer:
specifier: ^10.4.14
version: 10.4.14(postcss@8.4.24)
@@ -337,6 +340,9 @@ importers:
eslint-config-custom:
specifier: workspace:*
version: link:../../packages/eslint-config-custom
jessy:
specifier: ^3.1.1
version: 3.1.1
jest:
specifier: ^29.7.0
version: 29.7.0(@types/node@18.11.10)(ts-node@10.9.2)
@@ -1616,7 +1622,7 @@ packages:
'@babel/traverse': 7.23.4
'@babel/types': 7.23.4
convert-source-map: 1.9.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -1639,7 +1645,7 @@ packages:
'@babel/traverse': 7.23.4
'@babel/types': 7.23.4
convert-source-map: 2.0.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -1662,7 +1668,7 @@ packages:
'@babel/traverse': 7.23.9
'@babel/types': 7.23.9
convert-source-map: 2.0.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -1796,7 +1802,7 @@ packages:
'@babel/core': 7.22.9
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
lodash.debounce: 4.0.8
resolve: 1.22.8
transitivePeerDependencies:
@@ -3111,7 +3117,7 @@ packages:
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.23.4
'@babel/types': 7.23.4
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -3129,7 +3135,7 @@ packages:
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.23.9
'@babel/types': 7.23.9
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -3483,7 +3489,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
ajv: 6.12.6
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
espree: 9.6.1
globals: 13.23.0
ignore: 5.3.0
@@ -3500,7 +3506,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
ajv: 6.12.6
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
espree: 9.6.1
globals: 13.24.0
ignore: 5.3.1
@@ -3553,7 +3559,7 @@ packages:
engines: {node: '>=10.10.0'}
dependencies:
'@humanwhocodes/object-schema': 2.0.1
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -3564,7 +3570,7 @@ packages:
engines: {node: '>=10.10.0'}
dependencies:
'@humanwhocodes/object-schema': 2.0.2
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -4310,8 +4316,8 @@ packages:
typescript:
optional: true
dependencies:
debug: 4.3.4(supports-color@8.1.1)
extract-zip: 2.0.1(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
extract-zip: 2.0.1
progress: 2.0.3
proxy-agent: 6.3.0
tar-fs: 3.0.4
@@ -5824,7 +5830,7 @@ packages:
vite: ^4.0.0
dependencies:
'@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.1.2)(vite@4.4.8)
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
svelte: 4.1.2
vite: 4.4.8(@types/node@18.11.10)(sass@1.64.2)
transitivePeerDependencies:
@@ -5838,7 +5844,7 @@ packages:
vite: ^4.0.0
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.1.2)(vite@4.4.8)
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.5
@@ -6257,7 +6263,7 @@ packages:
'@typescript-eslint/type-utils': 6.12.0(eslint@8.57.0)(typescript@5.3.2)
'@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.3.2)
'@typescript-eslint/visitor-keys': 6.12.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.0
@@ -6283,7 +6289,7 @@ packages:
'@typescript-eslint/types': 6.12.0
'@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2)
'@typescript-eslint/visitor-keys': 6.12.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
eslint: 8.57.0
typescript: 5.3.2
transitivePeerDependencies:
@@ -6318,7 +6324,7 @@ packages:
dependencies:
'@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2)
'@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.3.2)
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
eslint: 8.57.0
ts-api-utils: 1.0.3(typescript@5.3.2)
typescript: 5.3.2
@@ -6347,7 +6353,7 @@ packages:
dependencies:
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/visitor-keys': 5.62.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
globby: 11.1.0
is-glob: 4.0.3
semver: 7.5.4
@@ -6368,7 +6374,7 @@ packages:
dependencies:
'@typescript-eslint/types': 6.12.0
'@typescript-eslint/visitor-keys': 6.12.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
globby: 11.1.0
is-glob: 4.0.3
semver: 7.5.4
@@ -6636,7 +6642,7 @@ packages:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
dependencies:
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
dev: false
@@ -6645,7 +6651,7 @@ packages:
resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==}
engines: {node: '>= 14'}
dependencies:
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -6697,6 +6703,13 @@ packages:
uri-js: 4.4.1
dev: true
/all-object-keys@2.2.0:
resolution: {integrity: sha512-x8eEZ/ZhC6OjCKanec3y7DpCj/Kymife0yVkq56XDWUwZcZotzC0ejgO5/dbgRiBVMRb09dY+JP9dySCHysl9A==}
engines: {node: '>=8'}
dependencies:
try-catch: 3.0.1
dev: true
/ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@@ -8647,7 +8660,6 @@ packages:
dependencies:
ms: 2.1.2
supports-color: 5.5.0
dev: false
/debug@4.3.4(supports-color@8.1.1):
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
@@ -8660,6 +8672,7 @@ packages:
dependencies:
ms: 2.1.2
supports-color: 8.1.1
dev: true
/decamelize-keys@1.1.1:
resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
@@ -9286,7 +9299,7 @@ packages:
eslint: '*'
eslint-plugin-import: '*'
dependencies:
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
enhanced-resolve: 5.15.0
eslint: 8.57.0
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
@@ -9483,7 +9496,7 @@ packages:
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@jridgewell/sourcemap-codec': 1.4.15
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
eslint: 8.57.0
eslint-compat-utils: 0.1.2(eslint@8.57.0)
esutils: 2.0.3
@@ -9595,7 +9608,7 @@ packages:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.2.2
@@ -9642,7 +9655,7 @@ packages:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.2.2
@@ -9930,6 +9943,20 @@ packages:
/extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
/extract-zip@2.0.1:
resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
engines: {node: '>= 10.17.0'}
hasBin: true
dependencies:
debug: 4.3.4(supports-color@5.5.0)
get-stream: 5.2.0
yauzl: 2.10.0
optionalDependencies:
'@types/yauzl': 2.10.3
transitivePeerDependencies:
- supports-color
dev: false
/extract-zip@2.0.1(supports-color@8.1.1):
resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
engines: {node: '>= 10.17.0'}
@@ -9942,6 +9969,7 @@ packages:
'@types/yauzl': 2.10.3
transitivePeerDependencies:
- supports-color
dev: true
/extsprintf@1.3.0:
resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
@@ -10318,7 +10346,7 @@ packages:
dependencies:
basic-ftp: 5.0.4
data-uri-to-buffer: 6.0.2
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
fs-extra: 11.2.0
transitivePeerDependencies:
- supports-color
@@ -10563,6 +10591,7 @@ packages:
/has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
dev: true
/has-property-descriptors@1.0.1:
resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==}
@@ -10816,7 +10845,7 @@ packages:
engines: {node: '>= 14'}
dependencies:
agent-base: 7.1.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
dev: false
@@ -10835,7 +10864,7 @@ packages:
engines: {node: '>= 6'}
dependencies:
agent-base: 6.0.2
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
dev: false
@@ -10845,7 +10874,7 @@ packages:
engines: {node: '>= 14'}
dependencies:
agent-base: 7.1.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -10980,7 +11009,7 @@ packages:
dependencies:
'@ioredis/commands': 1.2.0
cluster-key-slot: 1.1.2
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
denque: 2.1.0
lodash.defaults: 4.2.0
lodash.isarguments: 3.1.0
@@ -11394,7 +11423,7 @@ packages:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
engines: {node: '>=10'}
dependencies:
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
istanbul-lib-coverage: 3.2.2
source-map: 0.6.1
transitivePeerDependencies:
@@ -11428,6 +11457,11 @@ packages:
'@pkgjs/parseargs': 0.11.0
dev: false
/jessy@3.1.1:
resolution: {integrity: sha512-Eivuwu3H8qfm4DldbyBci4RJMgoPK3pT3BCzIWNrGPOatkl4jh91PO4LZp7N2zIz8jQlYqs5bPKOkf138jRYqw==}
engines: {node: '>=4'}
dev: true
/jest-changed-files@29.7.0:
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -13001,7 +13035,7 @@ packages:
resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
dependencies:
'@types/debug': 4.1.12
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
decode-named-character-reference: 1.0.2
micromark-core-commonmark: 1.1.0
micromark-factory-space: 1.1.0
@@ -13798,7 +13832,7 @@ packages:
dependencies:
'@tootallnate/quickjs-emscripten': 0.23.0
agent-base: 7.1.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
get-uri: 6.0.3
http-proxy-agent: 7.0.1
https-proxy-agent: 7.0.4
@@ -14359,7 +14393,7 @@ packages:
engines: {node: '>= 14'}
dependencies:
agent-base: 7.1.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
http-proxy-agent: 7.0.1
https-proxy-agent: 7.0.4
lru-cache: 7.18.3
@@ -14413,7 +14447,7 @@ packages:
'@puppeteer/browsers': 1.4.6(typescript@5.3.2)
chromium-bidi: 0.4.16(devtools-protocol@0.0.1147663)
cross-fetch: 4.0.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
devtools-protocol: 0.0.1147663
typescript: 5.3.2
ws: 8.13.0
@@ -15246,7 +15280,7 @@ packages:
engines: {node: '>= 14'}
dependencies:
agent-base: 7.1.0
debug: 4.3.4(supports-color@8.1.1)
debug: 4.3.4(supports-color@5.5.0)
socks: 2.7.3
transitivePeerDependencies:
- supports-color
@@ -15719,6 +15753,7 @@ packages:
engines: {node: '>=10'}
dependencies:
has-flag: 4.0.0
dev: true
/supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
@@ -16287,6 +16322,11 @@ packages:
resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
dev: false
/try-catch@3.0.1:
resolution: {integrity: sha512-91yfXw1rr/P6oLpHSyHDOHm0vloVvUoo9FVdw8YwY05QjJQG9OT0LUxe2VRAzmHG+0CUOmI3nhxDUMLxDN/NEQ==}
engines: {node: '>=6'}
dev: true
/ts-api-utils@1.0.3(typescript@5.3.2):
resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
engines: {node: '>=16.13.0'}