feat(localization): enhance course progress and review messaging across multiple languages
All checks were successful
Deploy to production / deploy (push) Successful in 2m52s

- Added new confirmation titles and messages for resetting and marking lessons as complete in admin and user interfaces.
- Expanded course flow and review scheduling messages to improve clarity and user guidance in Cebuano, German, Spanish, and English.
- Introduced a new section in the VocabCourseView to display today's recommended steps for users, enhancing the learning experience.
- Updated localization files to ensure consistent messaging and improved user engagement across all supported languages.
This commit is contained in:
Torsten Schulz (local)
2026-04-02 13:49:59 +02:00
parent edbf22ac5b
commit 3d2ccd620a
10 changed files with 311 additions and 54 deletions

View File

@@ -113,6 +113,7 @@
<script>
import apiClient from '@/utils/axios.js';
import { confirmAction } from '@/utils/feedback.js';
import AdminUserSearch from '@/components/admin/AdminUserSearch.vue';
export default {
@@ -243,20 +244,23 @@ export default {
this.loadingVocabCourseDetail = false;
}
},
adminResetVocabLesson() {
async adminResetVocabLesson() {
if (!this.selected || !this.selectedVocabLessonId || this.vocabResetSubmitting) {
return;
}
const lesson = this.vocabCourseLessons.find((l) => String(l.id) === String(this.selectedVocabLessonId));
const lessonLabel = lesson ? `${lesson.lessonNumber}. ${lesson.title}` : this.selectedVocabLessonId;
const msg = this.$t('admin.vocabLessonReset.confirm', {
lesson: lessonLabel,
username: this.selected.username
const confirmed = await confirmAction(this, {
title: this.$t('admin.vocabLessonReset.confirmTitle'),
message: this.$t('admin.vocabLessonReset.confirm', {
lesson: lessonLabel,
username: this.selected.username
})
});
if (!window.confirm(msg)) {
if (!confirmed) {
return;
}
this.runAdminVocabReset();
await this.runAdminVocabReset();
},
async runAdminVocabReset() {
this.vocabResetSubmitting = true;
@@ -272,19 +276,22 @@ export default {
this.vocabResetSubmitting = false;
}
},
adminMarkVocabLessonsThrough() {
async adminMarkVocabLessonsThrough() {
if (!this.selected || !this.selectedVocabCourseId || !this.canMarkVocabThrough || this.vocabMarkSubmitting) {
return;
}
const n = Number(this.vocabMarkThroughNumber);
const msg = this.$t('admin.vocabLessonMarkComplete.confirm', {
n,
username: this.selected.username
const confirmed = await confirmAction(this, {
title: this.$t('admin.vocabLessonMarkComplete.confirmTitle'),
message: this.$t('admin.vocabLessonMarkComplete.confirm', {
n,
username: this.selected.username
})
});
if (!window.confirm(msg)) {
if (!confirmed) {
return;
}
this.runAdminVocabMarkThrough();
await this.runAdminVocabMarkThrough();
},
async runAdminVocabMarkThrough() {
this.vocabMarkSubmitting = true;