Implement textarea validation for character limits in submission service; enhance user feedback with error messages for minimum and maximum character requirements. Update translations and UI components to support new validation features.
This commit is contained in:
@@ -520,7 +520,7 @@
|
||||
"send_email": "Send invitationsmail til importerede brugere",
|
||||
"submit": "Importer brugere",
|
||||
"back": "Tilbage til Publikum",
|
||||
"snackbar_success": "Importerede {importerede} brugere ({skipped} eksisterede allerede, {emailsSent} e-mails sendt)",
|
||||
"snackbar_success": "{imported} nye invitationer, {assigned} eksisterende studerende med kursusadgang, {pendingInvitesRenewed} afventende invitationer fornyet ({emailsSent} e-mails sendt)",
|
||||
"snackbar_no_emails": "Indtast venligst mindst én e-mailadresse",
|
||||
"snackbar_failed": "Kunne ikke importere brugere"
|
||||
}
|
||||
@@ -1164,10 +1164,17 @@
|
||||
"shared_question": {
|
||||
"textarea": {
|
||||
"take": {
|
||||
"placeholder": "Skriv dit svar"
|
||||
"placeholder": "Skriv dit svar",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "Eleverne vil svare med lang tekst"
|
||||
"placeholder": "Eleverne vil svare med lang tekst",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
},
|
||||
"hotspot": {
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
"send_email": "Senden Sie Einladungs-E-Mails an importierte Benutzer",
|
||||
"submit": "Benutzer importieren",
|
||||
"back": "Zurück zum Publikum",
|
||||
"snackbar_success": "Importierte {imported} Benutzer ({skipped} existierte bereits, {emailsSent} E-Mails wurden gesendet)",
|
||||
"snackbar_success": "{imported} neue Einladungen, {assigned} bestehende Studierende mit Kurszugang, {pendingInvitesRenewed} ausstehende Einladungen erneuert ({emailsSent} E-Mails gesendet)",
|
||||
"snackbar_no_emails": "Bitte geben Sie mindestens eine E-Mail-Adresse ein",
|
||||
"snackbar_failed": "Benutzer konnten nicht importiert werden"
|
||||
}
|
||||
@@ -1164,10 +1164,17 @@
|
||||
"shared_question": {
|
||||
"textarea": {
|
||||
"take": {
|
||||
"placeholder": "Schreiben Sie Ihre Antwort"
|
||||
"placeholder": "Schreiben Sie Ihre Antwort",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "Die Lernenden antworten mit einem langen Text"
|
||||
"placeholder": "Die Lernenden antworten mit einem langen Text",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
},
|
||||
"hotspot": {
|
||||
|
||||
@@ -983,6 +983,18 @@
|
||||
"deadline_helper": "Students must meet the completion percentage before this datetime (local time). Leave empty for no deadline.",
|
||||
"threshold_label": "Minimum completion (%)",
|
||||
"threshold_helper": "Combined lesson and exercise progress required to earn the certificate (0–100). Default is 100%.",
|
||||
"final_exercise_label": "Final exercise (optional)",
|
||||
"final_exercise_none": "None — no extra exercise score",
|
||||
"final_exercise_helper": "When set, students must reach at least the minimum score on this exercise (best attempt counts) in addition to the completion percentage above.",
|
||||
"min_exercise_score_label": "Minimum score on final exercise (%)",
|
||||
"min_exercise_score_helper": "Score is a percentage of the total points possible on that exercise (0–100).",
|
||||
"blocker_progress": "Your course progress is {current}%; {required}% is required.",
|
||||
"blocker_deadline": "The certification deadline has passed.",
|
||||
"blocker_no_content": "This course has no lessons or exercises to complete.",
|
||||
"blocker_final_not_submitted": "Submit the required exercise \"{exerciseTitle}\" to qualify for the certificate.",
|
||||
"blocker_final_pending": "Your attempt on \"{exerciseTitle}\" is still being graded.",
|
||||
"blocker_final_score": "Your best score on \"{exerciseTitle}\" is {bestPercent}%; {requiredPercent}% is required.",
|
||||
"blocker_final_misconfigured": "The certification exercise \"{exerciseTitle}\" has no points configured; ask your instructor to fix it.",
|
||||
"email_message_label": "Certification email message",
|
||||
"email_message_helper": "Optional message shown in the email when a student meets the requirements. A link to the certificate page is always included.",
|
||||
"email_message_placeholder": "e.g. We are proud of your progress — keep learning!"
|
||||
@@ -1268,6 +1280,10 @@
|
||||
"all_exercises": {
|
||||
"heading": "All Exercise",
|
||||
"questions": "Questions",
|
||||
"settings": "Settings",
|
||||
"settings_allow_multiple": "Allow multiple attempts",
|
||||
"settings_allow_multiple_helper": "Students can submit more than once and review past attempts on the results screen.",
|
||||
"settings_save": "Save settings",
|
||||
"submissions": "Submissions",
|
||||
"save": "Save",
|
||||
"preview": "Preview",
|
||||
@@ -1340,6 +1356,10 @@
|
||||
}
|
||||
},
|
||||
"view_mode": {
|
||||
"attempt_counter": "Attempt {current} of {total}",
|
||||
"previous_try": "Previous attempt",
|
||||
"next_try": "Next attempt",
|
||||
"try_again": "Try again",
|
||||
"no_question": "No question added for this exercise",
|
||||
"empty_description": "Click the Edit button to add.",
|
||||
"empty_edit_hint_prefix": "Click the ",
|
||||
@@ -1578,11 +1598,18 @@
|
||||
}
|
||||
},
|
||||
"textarea": {
|
||||
"edit": {
|
||||
"placeholder": "Learners will answer with long-form text"
|
||||
},
|
||||
"take": {
|
||||
"placeholder": "Write your answer"
|
||||
"placeholder": "Write your answer",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "Learners will answer with long-form text",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2096,7 +2123,7 @@
|
||||
"send_email": "Send invitation email to imported users",
|
||||
"submit": "Import Users",
|
||||
"back": "Back to Audience",
|
||||
"snackbar_success": "Imported {imported} users ({skipped} already existed, {emailsSent} emails sent)",
|
||||
"snackbar_success": "{imported} new invites, {assigned} existing students given course access, {pendingInvitesRenewed} pending invites renewed ({emailsSent} emails sent)",
|
||||
"snackbar_no_emails": "Please enter at least one email address",
|
||||
"snackbar_failed": "Failed to import users"
|
||||
},
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
"send_email": "Enviar correo electrónico de invitación a usuarios importados",
|
||||
"submit": "Importar usuarios",
|
||||
"back": "Volver a la audiencia",
|
||||
"snackbar_success": "Usuarios importados {importados} ({skipped} ya existía, {emailsSent} correos electrónicos enviados)",
|
||||
"snackbar_success": "{imported} invitaciones nuevas, {assigned} estudiantes existentes con acceso al curso, {pendingInvitesRenewed} invitaciones pendientes renovadas ({emailsSent} correos enviados)",
|
||||
"snackbar_no_emails": "Por favor ingrese al menos una dirección de correo electrónico",
|
||||
"snackbar_failed": "No se pudieron importar usuarios"
|
||||
}
|
||||
@@ -1164,10 +1164,17 @@
|
||||
"shared_question": {
|
||||
"textarea": {
|
||||
"take": {
|
||||
"placeholder": "Escribe tu respuesta"
|
||||
"placeholder": "Escribe tu respuesta",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "Los alumnos responderán con un texto extenso."
|
||||
"placeholder": "Los alumnos responderán con un texto extenso.",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
},
|
||||
"hotspot": {
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
"send_email": "Envoyer un e-mail d'invitation aux utilisateurs importés",
|
||||
"submit": "Importer des utilisateurs",
|
||||
"back": "Retour au public",
|
||||
"snackbar_success": "Utilisateurs {importés} importés ({skipped} existait déjà, {emailsSent} e-mails envoyés)",
|
||||
"snackbar_success": "{imported} nouvelles invitations, {assigned} étudiants existants avec accès au cours, {pendingInvitesRenewed} invitations en attente renouvelées ({emailsSent} e-mails envoyés)",
|
||||
"snackbar_no_emails": "Veuillez saisir au moins une adresse e-mail",
|
||||
"snackbar_failed": "Échec de l'importation des utilisateurs"
|
||||
}
|
||||
@@ -1164,10 +1164,17 @@
|
||||
"shared_question": {
|
||||
"textarea": {
|
||||
"take": {
|
||||
"placeholder": "Écrivez votre réponse"
|
||||
"placeholder": "Écrivez votre réponse",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "Les apprenants répondront avec un texte long"
|
||||
"placeholder": "Les apprenants répondront avec un texte long",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
},
|
||||
"hotspot": {
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
"send_email": "आयातित उपयोगकर्ताओं को आमंत्रण ईमेल भेजें",
|
||||
"submit": "उपयोगकर्ता आयात करें",
|
||||
"back": "दर्शकों के पास वापस जाएँ",
|
||||
"snackbar_success": "आयातित {आयातित} उपयोगकर्ता ({स्किप्ड} पहले से मौजूद थे, {ईमेल्ससेंट} ईमेल भेजे गए)",
|
||||
"snackbar_success": "{imported} नए निमंत्रण, {assigned} मौजूदा छात्रों को पाठ्यक्रम पहुंच, {pendingInvitesRenewed} लंबित निमंत्रण नवीकृत ({emailsSent} ईमेल भेजे गए)",
|
||||
"snackbar_no_emails": "कृपया कम से कम एक ईमेल पता दर्ज करें",
|
||||
"snackbar_failed": "उपयोगकर्ताओं को आयात करने में विफल"
|
||||
}
|
||||
@@ -1164,10 +1164,17 @@
|
||||
"shared_question": {
|
||||
"textarea": {
|
||||
"take": {
|
||||
"placeholder": "अपना उत्तर लिखें"
|
||||
"placeholder": "अपना उत्तर लिखें",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "शिक्षार्थी लंबे प्रारूप वाले पाठ के साथ उत्तर देंगे"
|
||||
"placeholder": "शिक्षार्थी लंबे प्रारूप वाले पाठ के साथ उत्तर देंगे",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
},
|
||||
"hotspot": {
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
"send_email": "Wyślij wiadomość e-mail z zaproszeniem do zaimportowanych użytkowników",
|
||||
"submit": "Importuj użytkowników",
|
||||
"back": "Powrót do Publiczności",
|
||||
"snackbar_success": "Zaimportowani użytkownicy: {imported} ({skipped} już istniało, wysłano e-maile: {emailsSent})",
|
||||
"snackbar_success": "{imported} nowych zaproszeń, {assigned} istniejących studentów z dostępem do kursu, {pendingInvitesRenewed} odnowionych oczekujących zaproszeń (wysłano e-maile: {emailsSent})",
|
||||
"snackbar_no_emails": "Proszę podać przynajmniej jeden adres e-mail",
|
||||
"snackbar_failed": "Nie udało się zaimportować użytkowników"
|
||||
}
|
||||
@@ -1164,10 +1164,17 @@
|
||||
"shared_question": {
|
||||
"textarea": {
|
||||
"take": {
|
||||
"placeholder": "Napisz swoją odpowiedź"
|
||||
"placeholder": "Napisz swoją odpowiedź",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "Uczniowie będą odpowiadać za pomocą długiego tekstu"
|
||||
"placeholder": "Uczniowie będą odpowiadać za pomocą długiego tekstu",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
},
|
||||
"hotspot": {
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
"send_email": "Enviar e-mail de convite para usuários importados",
|
||||
"submit": "Importar usuários",
|
||||
"back": "Voltar ao público",
|
||||
"snackbar_success": "Usuários {importados} importados ({skipped} já existia, {emailsSent} emails enviados)",
|
||||
"snackbar_success": "{imported} novos convites, {assigned} estudantes existentes com acesso ao curso, {pendingInvitesRenewed} convites pendentes renovados ({emailsSent} e-mails enviados)",
|
||||
"snackbar_no_emails": "Insira pelo menos um endereço de e-mail",
|
||||
"snackbar_failed": "Falha ao importar usuários"
|
||||
}
|
||||
@@ -1164,10 +1164,17 @@
|
||||
"shared_question": {
|
||||
"textarea": {
|
||||
"take": {
|
||||
"placeholder": "Escreva sua resposta"
|
||||
"placeholder": "Escreva sua resposta",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "Os alunos responderão com texto longo"
|
||||
"placeholder": "Os alunos responderão com texto longo",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
},
|
||||
"hotspot": {
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
"send_email": "Отправить электронное письмо с приглашением импортированным пользователям",
|
||||
"submit": "Импортировать пользователей",
|
||||
"back": "Вернуться к аудитории",
|
||||
"snackbar_success": "Импортированные пользователи: {imported} ({skiped} уже существует, писем отправлено: {emailsSent})",
|
||||
"snackbar_success": "{imported} новых приглашений, {assigned} существующих студентов с доступом к курсу, {pendingInvitesRenewed} обновлённых ожидающих приглашений (отправлено писем: {emailsSent})",
|
||||
"snackbar_no_emails": "Пожалуйста, введите хотя бы один адрес электронной почты",
|
||||
"snackbar_failed": "Не удалось импортировать пользователей."
|
||||
}
|
||||
@@ -1164,10 +1164,17 @@
|
||||
"shared_question": {
|
||||
"textarea": {
|
||||
"take": {
|
||||
"placeholder": "Напишите свой ответ"
|
||||
"placeholder": "Напишите свой ответ",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "Учащиеся будут отвечать длинным текстом"
|
||||
"placeholder": "Учащиеся будут отвечать длинным текстом",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
},
|
||||
"hotspot": {
|
||||
|
||||
@@ -520,7 +520,7 @@
|
||||
"send_email": "Gửi email lời mời tới người dùng đã nhập",
|
||||
"submit": "Nhập người dùng",
|
||||
"back": "Quay lại Đối tượng",
|
||||
"snackbar_success": "Đã nhập {imported} người dùng ({skipped} đã tồn tại, đã gửi email {emailsSent})",
|
||||
"snackbar_success": "{imported} lời mời mới, {assigned} học viên hiện có được quyền truy cập khóa học, {pendingInvitesRenewed} lời mời đang chờ được gia hạn ({emailsSent} email đã gửi)",
|
||||
"snackbar_no_emails": "Vui lòng nhập ít nhất một địa chỉ email",
|
||||
"snackbar_failed": "Không thể nhập người dùng"
|
||||
}
|
||||
@@ -1164,10 +1164,17 @@
|
||||
"shared_question": {
|
||||
"textarea": {
|
||||
"take": {
|
||||
"placeholder": "Viết câu trả lời của bạn"
|
||||
"placeholder": "Viết câu trả lời của bạn",
|
||||
"min_error": "Answer must be at least {min} characters.",
|
||||
"max_error": "Answer must be at most {max} characters.",
|
||||
"range_error": "Answer must be between {min} and {max} characters."
|
||||
},
|
||||
"edit": {
|
||||
"placeholder": "Người học sẽ trả lời bằng văn bản dài"
|
||||
"placeholder": "Người học sẽ trả lời bằng văn bản dài",
|
||||
"min_characters_label": "Minimum characters",
|
||||
"min_characters_placeholder": "Minimum characters",
|
||||
"max_characters_label": "Maximum characters",
|
||||
"max_characters_placeholder": "Maximum characters"
|
||||
}
|
||||
},
|
||||
"hotspot": {
|
||||
|
||||
Reference in New Issue
Block a user