feat(bisaya-course): enhance lesson content for temporal grammar and exercises
All checks were successful
Deploy to production / deploy (push) Successful in 2m52s

- Updated learning goals to emphasize distinguishing between past, present, and future in everyday sentences.
- Revised core patterns to include specific examples for each tense, improving clarity and context for learners.
- Expanded grammar focus sections to provide detailed explanations of time markers and their usage.
- Introduced new exercises for practicing grammar focus, including multiple-choice questions and transformation tasks, enhancing student engagement with temporal aspects of the language.
- Updated speaking prompts and practical tasks to reflect the new content structure, ensuring a comprehensive learning experience.
This commit is contained in:
Torsten Schulz (local)
2026-04-15 13:25:15 +02:00
parent feda7d90f2
commit cc791501c9
3 changed files with 186 additions and 43 deletions

View File

@@ -598,6 +598,43 @@ function buildTaskSentenceExercise(lesson, didactics, pattern) {
};
}
function buildGrammarFocusCheckExercise(lesson, didactics) {
const focus = Array.isArray(didactics?.grammarFocus) ? didactics.grammarFocus[0] : null;
const text = normalizeText(focus?.text || '');
if (!text) return null;
const lower = text.toLowerCase();
let question = `Welcher Marker passt im Schwerpunkt "${lesson.title}" typischerweise für eine Zukunftsaussage?`;
let options = ['mo-', 'ni-', 'nag-/ga-', 'ka-'];
let correctAnswer = 0;
let explanation = 'Im Grundkurs wird mo- als Marker für Zukunft/Absicht verwendet.';
if (lower.includes('vergangen')) {
question = `Welcher Marker passt im Schwerpunkt "${lesson.title}" typischerweise für eine vergangene Handlung?`;
options = ['ni-', 'mo-', 'nag-/ga-', 'ka-'];
correctAnswer = 0;
explanation = 'Im Grundkurs steht ni- typischerweise für abgeschlossene Vergangenheit.';
} else if (lower.includes('gegenwart') || lower.includes('laufende')) {
question = `Welcher Marker passt im Schwerpunkt "${lesson.title}" typischerweise für eine laufende Handlung?`;
options = ['nag-/ga-', 'ni-', 'mo-', 'ka-'];
correctAnswer = 0;
explanation = 'Nag-/ga- markiert im Kurs eine laufende Handlung in der Gegenwart.';
}
return {
exerciseTypeId: 2,
title: `${lesson.title}: Grammatikfokus prüfen`,
instruction: 'Wähle die passendste Antwort.',
questionData: {
type: 'multiple_choice',
question,
options
},
answerData: { type: 'multiple_choice', correctAnswer },
explanation
};
}
function buildSpeakingExercise(lessonTitle, didactics, fallbackPattern) {
const speakingPrompt = Array.isArray(didactics.speakingPrompts) ? didactics.speakingPrompts[0] : null;
const expectedText = normalizeText(speakingPrompt?.cue || fallbackPattern);
@@ -722,6 +759,7 @@ function generateExercisesFromDidactics(lesson) {
buildChoiceExercise(lesson, didactics, patternB, lessonPool, 1),
buildContextGapExercise(lesson, didactics, patternA),
buildTaskSentenceExercise(lesson, didactics, patternB),
buildGrammarFocusCheckExercise(lesson, didactics),
buildSpeakingExercise(lesson.title, didactics, patternA)
];
if (String(lesson.title || '').toLowerCase().includes('zeitformen')) {
@@ -1826,6 +1864,23 @@ const BISAYA_EXERCISES = {
},
explanation: 'Das Präfix "Ni-" zeigt die Vergangenheit an. "Ni-kaon ko" bedeutet "Ich habe gegessen".'
},
{
exerciseTypeId: 4, // transformation
title: 'Gegenwart verstehen',
instruction: 'Was bedeutet "Nagkaon ko karon"?',
questionData: {
type: 'transformation',
text: 'Nagkaon ko karon',
sourceLanguage: 'Bisaya',
targetLanguage: 'Deutsch'
},
answerData: {
type: 'transformation',
correct: 'Ich esse gerade jetzt',
alternatives: ['Ich esse jetzt', 'Ich bin gerade am Essen']
},
explanation: 'nag- plus "karon" markiert hier eine laufende Handlung in der Gegenwart.'
},
{
exerciseTypeId: 4, // transformation
title: 'Zukunft verstehen',
@@ -1849,54 +1904,98 @@ const BISAYA_EXERCISES = {
instruction: 'Setze die richtigen Präfixe ein.',
questionData: {
type: 'gap_fill',
text: '{gap}-kaon ko (Vergangenheit) | {gap}-kaon ko (Zukunft)',
gaps: 2
text: '{gap}-kaon ko ganiha (Vergangenheit) | {gap}kaon ko karon (Gegenwart) | {gap}-kaon ko ugma (Zukunft)',
gaps: 3
},
answerData: {
type: 'gap_fill',
answers: ['Ni', 'Mo']
answers: ['Ni', 'Nag', 'Mo']
},
explanation: 'Ni- für Vergangenheit, Mo- für Zukunft.'
explanation: 'Ni- für Vergangenheit, nag- für laufende Gegenwart, mo- für Zukunft.'
},
withTypeName('pattern_drill', {
title: 'Zeitmuster anwenden',
instruction: 'Bilde mit demselben Muster einen Zukunftssatz.',
instruction: 'Bilde mit demselben Verb drei Zeitformen.',
questionData: {
type: 'pattern_drill',
question: 'Verwende das Muster für "gehen".',
pattern: 'Mo- + Verb + ko'
question: 'Verwende das Verb "adto" in Vergangenheit, Gegenwart und Zukunft.',
pattern: 'Ni- / Nag- / Mo- + adto + ko'
},
answerData: {
modelAnswer: 'Mo-adto ko.',
correct: ['Mo-adto ko.', 'Moadto ko.']
modelAnswer: 'Ni-adto ko. Nag-adto ko karon. Mo-adto ko.',
correct: ['Ni-adto ko. Nag-adto ko karon. Mo-adto ko.', 'Niadto ko. Nagadto ko karon. Moadto ko.']
},
explanation: 'Mit "Mo-" kannst du ein einfaches Zukunftsmuster bilden.'
explanation: 'Das Drillmuster trainiert den direkten Wechsel derselben Handlung über drei Zeitbezüge.'
}),
{
exerciseTypeId: 3,
title: 'Vergangenheit und Zukunft bauen',
instruction: 'Schreibe beide Formen nacheinander auf.',
title: 'Drei Zeiten nacheinander bauen',
instruction: 'Schreibe Vergangenheit, Gegenwart und Zukunft nacheinander auf.',
questionData: {
type: 'sentence_building',
question: 'Formuliere: "Ich habe gegessen. Ich werde essen."',
tokens: ['Ni-kaon', 'ko', 'Mo-kaon', 'ko']
question: 'Formuliere: "Ich habe gegessen. Ich esse jetzt. Ich werde später essen."',
tokens: ['Ni-kaon', 'ko', 'Nagkaon', 'ko', 'karon', 'Mo-kaon', 'ko', 'unya']
},
answerData: {
correct: ['Ni-kaon ko. Mo-kaon ko.', 'Nikaon ko. Mokaon ko.']
correct: [
'Ni-kaon ko. Nagkaon ko karon. Mo-kaon ko unya.',
'Nikaon ko. Nagkaon ko karon. Mokaon ko unya.'
]
},
explanation: 'Die Übung trainiert den direkten Wechsel zwischen den beiden Zeitmarkern.'
explanation: 'Die Übung trainiert den systematischen Wechsel zwischen Vergangenheit, Gegenwart und Zukunft.'
},
{
exerciseTypeId: 2,
title: 'Ni- oder Mo- wählen',
instruction: 'Wähle das Präfix für die Zukunft.',
title: 'Zeitmarker auswählen',
instruction: 'Wähle den passenden Marker für eine laufende Handlung.',
questionData: {
type: 'multiple_choice',
question: 'Welches Präfix steht typischerweise für die Zukunft?',
options: ['Mo-', 'Ni-', 'Ka-', 'Gi-']
question: 'Welcher Marker passt typischerweise zu einer laufenden Handlung in der Gegenwart?',
options: ['Nag-/ga-', 'Ni-', 'Mo-', 'Gi-']
},
answerData: { type: 'multiple_choice', correctAnswer: 0 },
explanation: '„Mo-" markiert Zukunft, „Ni-" markiert Vergangenheit.'
explanation: 'Nag-/ga- steht hier für laufende Gegenwart, ni- für Vergangenheit und mo- für Zukunft.'
},
{
exerciseTypeId: 2,
title: 'Zeitwort zuordnen',
instruction: 'Wähle das passende Zeitwort zur Zukunft.',
questionData: {
type: 'multiple_choice',
question: 'Welches Zeitwort passt am besten zu einer Zukunftsaussage?',
options: ['ugma', 'ganiha', 'karon', 'didto']
},
answerData: { type: 'multiple_choice', correctAnswer: 0 },
explanation: '„ugma" bedeutet morgen und unterstützt Zukunftsformen.'
},
withTypeName('dialog_completion', {
title: 'Zeitwechsel im Mini-Dialog',
instruction: 'Ergänze eine passende Zukunftsantwort.',
questionData: {
type: 'dialog_completion',
question: 'A sagt, was vorhin war. B reagiert mit Zukunft.',
dialog: ['A: Ni-kaon ko ganiha.', 'B: ...']
},
answerData: {
modelAnswer: 'Mo-kaon ko unya.',
correct: ['Mo-kaon ko unya.', 'Mokaon ko unya.']
},
explanation: 'Der Dialog trainiert den Wechsel von Vergangenheit auf Zukunft.'
}),
{
exerciseTypeId: 8,
title: 'Zeitformen frei anwenden',
instruction: 'Sprich drei kurze Sätze: gestern/jetzt/morgen.',
questionData: {
type: 'speaking_from_memory',
question: 'Nutze ein Verb in Vergangenheit, Gegenwart und Zukunft.',
expectedText: 'Ni-..., nag-..., mo-...',
keywords: ['ni', 'nag', 'mo', 'ganiha', 'karon', 'ugma']
},
answerData: {
type: 'speaking_from_memory'
},
explanation: 'Zum Abschluss nutzt du die Zeitmarker ohne Vorgabe frei im eigenen Mini-Output.'
}
],