From 0421b2bc0012f7380b9e0806befeb82a5f515874 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Wed, 1 Apr 2026 14:30:31 +0200 Subject: [PATCH] feat(bisaya-course): expand lesson didactics with new topics and detailed grammar focus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added new lesson topics including 'Überlebenssätze - Teil 1', 'Familien-Gespräche', 'Gefühle & Zuneigung', and 'Überlebenssätze - Teil 2' to enhance the curriculum. - Updated existing lessons with more detailed learning goals, core patterns, grammar focus, speaking prompts, and practical tasks to improve learner engagement and comprehension. - Refactored core patterns to include glosses for better understanding of vocabulary context. - Enhanced the structure of lesson didactics to provide a more comprehensive learning experience for users. --- .../scripts/apply-bisaya-course-refresh.js | 148 ++++++++++- backend/scripts/create-bisaya-course.js | 231 +++++++++++++++++- backend/scripts/update-bisaya-didactics.js | 158 +++++++++++- frontend/src/views/social/VocabLessonView.vue | 30 ++- 4 files changed, 534 insertions(+), 33 deletions(-) diff --git a/backend/scripts/apply-bisaya-course-refresh.js b/backend/scripts/apply-bisaya-course-refresh.js index b09adaa..f3676ad 100644 --- a/backend/scripts/apply-bisaya-course-refresh.js +++ b/backend/scripts/apply-bisaya-course-refresh.js @@ -61,17 +61,115 @@ const LESSON_DIDACTICS = { 'Familienwörter': { learningGoals: [ 'Die wichtigsten Familienbezeichnungen sicher erkennen.', - 'Familienmitglieder mit respektvollen Wörtern ansprechen.', + 'Familienmitglieder und Großeltern mit respektvollen Wörtern ansprechen.', 'Kurze Sätze über die eigene Familie bilden.' ], - corePatterns: ['Si Nanay', 'Si Tatay', 'Kuya nako', 'Ate nako'], + corePatterns: [ + { target: 'Si Nanay.', gloss: 'Das ist Mama.' }, + { target: 'Si Tatay.', gloss: 'Das ist Papa.' }, + { target: 'Si Kuya nako.', gloss: 'Das ist mein älterer Bruder.' }, + { target: 'Si Ate nako.', gloss: 'Das ist meine ältere Schwester.' }, + { target: 'Si Lola nako.', gloss: 'Das ist meine Großmutter.' }, + { target: 'Si Lolo nako.', gloss: 'Das ist mein Großvater.' } + ], grammarFocus: [ - { title: 'Respekt in Familienanreden', text: 'Kuya und Ate werden nicht nur in der Familie, sondern auch respektvoll für ältere Personen benutzt.', example: 'Kuya, palihug.' } + { title: 'Respekt in Familienanreden', text: 'Kuya und Ate werden nicht nur in der Familie, sondern auch respektvoll für ältere Personen benutzt.', example: 'Kuya, palihug.' }, + { title: 'si als Personenmarker', text: 'Mit "si" markierst du im einfachen Satz eine konkrete Person.', example: 'Si Nanay. Si Tatay.' } ], speakingPrompts: [ - { title: 'Meine Familie', prompt: 'Stelle zwei Familienmitglieder mit einem kurzen Satz vor.', cue: 'Si Nanay. Si Kuya.' } + { title: 'Meine Familie', prompt: 'Stelle vier Familienmitglieder mit kurzen Sätzen vor.', cue: 'Si Nanay. Si Tatay. Si Lola nako. Si Kuya nako.' } ], - practicalTasks: [{ title: 'Familienpraxis', text: 'Nenne laut fünf Familienwörter und bilde danach zwei Mini-Sätze.' }] + practicalTasks: [{ title: 'Familienpraxis', text: 'Nenne laut sechs Familienwörter und bilde danach drei Mini-Sätze über deine Familie.' }] + }, + 'Überlebenssätze - Teil 1': { + learningGoals: [ + 'Zentrale Notfall- und Verständnisfragen schnell abrufen.', + 'Höflich um Wiederholung, Hilfe und langsamere Sprache bitten.', + 'Drei Überlebenssätze hintereinander sicher sprechen.' + ], + corePatterns: [ + { target: 'Wala ko kasabot.', gloss: 'Ich verstehe nicht.' }, + { target: 'Palihug ka mubalik?', gloss: 'Kannst du das bitte wiederholen?' }, + { target: 'Asa ang CR?', gloss: 'Wo ist die Toilette?' }, + { target: 'Hinay-hinay lang.', gloss: 'Bitte langsam.' }, + { target: 'Tabangi ko, palihug.', gloss: 'Hilf mir bitte.' }, + { target: 'Unsay pasabot ani?', gloss: 'Was bedeutet das?' } + ], + grammarFocus: [ + { title: 'Bitte-Formeln mit palihug', text: '"Palihug" macht Bitten höflich und taucht in vielen Überlebenssätzen auf.', example: 'Palihug ka mubalik? / Tabangi ko, palihug.' }, + { title: 'Kurze Verständnisfragen', text: 'Sehr kurze Fragen helfen dir im Alltag oft mehr als lange Sätze.', example: 'Unsay pasabot ani? Asa ang CR?' } + ], + speakingPrompts: [ + { title: 'Wenn du etwas nicht verstehst', prompt: 'Sage, dass du etwas nicht verstehst, und bitte um Wiederholung.', cue: 'Wala ko kasabot. Palihug ka mubalik?' }, + { title: 'Soforthilfe', prompt: 'Bitte um Hilfe und frage dann nach der Toilette oder nach der Bedeutung eines Wortes.', cue: 'Tabangi ko, palihug. Asa ang CR?' } + ], + practicalTasks: [{ title: 'Alltagsanker', text: 'Sprich alle sechs Überlebenssätze laut durch und ordne sie drei Alltagssituationen zu.' }] + }, + 'Familien-Gespräche': { + learningGoals: [ + 'Kurze Familiengespräche sicher verstehen.', + 'Nach Familienmitgliedern fragen und einfache Antworten geben.', + 'Ein Mini-Gespräch über Hunger und Zuhause nachsprechen.' + ], + corePatterns: [ + { target: 'Kumusta ka, Nanay?', gloss: 'Wie geht es dir, Mama?' }, + { target: 'Asa si Tatay?', gloss: 'Wo ist Papa?' }, + { target: 'Naa siya sa balay.', gloss: 'Er ist zu Hause.' }, + { target: 'Kumusta na ang Kuya?', gloss: 'Wie geht es dem älteren Bruder?' }, + { target: 'Gutom na ko, Nanay.', gloss: 'Ich habe Hunger, Mama.' }, + { target: 'Hapit na ang pagkaon.', gloss: 'Das Essen ist fast fertig.' } + ], + grammarFocus: [ + { title: 'naa für Ort und Vorhandensein', text: '"Naa" hilft dir, über Orte und Vorhandensein zu sprechen.', example: 'Naa siya sa balay.' } + ], + speakingPrompts: [ + { title: 'Familien-Mini-Dialog', prompt: 'Frage nach einem Familienmitglied und reagiere dann mit einer kurzen Antwort.', cue: 'Asa si Tatay? Naa siya sa balay.' } + ], + practicalTasks: [{ title: 'Gesprächspraxis', text: 'Spiele einen kurzen Familienaustausch mit Frage, Antwort und Fürsorge nach.' }] + }, + 'Gefühle & Zuneigung': { + learningGoals: [ + 'Wichtige Gefühle und Zuneigungsformeln sicher unterscheiden.', + 'Freundliche Nähe und Vermissen sprachlich ausdrücken.', + 'Zwischen positiven und negativen Gefühlen wechseln.' + ], + corePatterns: [ + { target: 'Palangga taka.', gloss: 'Ich hab dich lieb.' }, + { target: 'Ganahan ko nimo.', gloss: 'Ich mag dich.' }, + { target: 'Gimingaw ko nimo.', gloss: 'Ich vermisse dich.' }, + { target: 'Nalipay ko.', gloss: 'Ich bin glücklich.' }, + { target: 'Nasubo ko.', gloss: 'Ich bin traurig.' }, + { target: 'Nalipay ko nga nakita ka.', gloss: 'Ich freue mich, dich zu sehen.' } + ], + grammarFocus: [ + { title: 'ko für eigene Gefühle', text: 'Viele Gefühlsaussagen bauen direkt auf dem Muster "Gefühl + ko" auf.', example: 'Nalipay ko. Nasubo ko.' } + ], + speakingPrompts: [ + { title: 'Gefühl ausdrücken', prompt: 'Sage, dass du jemanden magst oder vermisst, und ergänze danach ein einfaches Gefühl.', cue: 'Ganahan ko nimo. Nalipay ko.' } + ], + practicalTasks: [{ title: 'Herzsprache', text: 'Lies drei Zuneigungsformeln laut und entscheide danach: liebhaben, mögen oder vermissen?' }] + }, + 'Überlebenssätze - Teil 2': { + learningGoals: [ + 'Weitere zentrale Alltagsfragen sicher sprechen.', + 'Höflich Entschuldigung, Nachfrage und Hilfesprache verbinden.', + 'Im Alltag Preise, Dinge und Sprache klar ansprechen.' + ], + corePatterns: [ + { target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' }, + { target: 'Unsa ni?', gloss: 'Was ist das?' }, + { target: 'Pasensya.', gloss: 'Entschuldigung.' }, + { target: 'Dili ko mag-Bisaya.', gloss: 'Ich spreche kein Bisaya.' }, + { target: 'Palihug isulat ni.', gloss: 'Bitte schreib das auf.' }, + { target: 'Nawala ko.', gloss: 'Ich habe mich verlaufen.' } + ], + grammarFocus: [ + { title: 'Kurze Markt- und Orientierungssprache', text: 'Kurze Fragewörter plus ein Nomen reichen oft, um im Alltag voranzukommen.', example: 'Tagpila ni? Unsa ni?' } + ], + speakingPrompts: [ + { title: 'Auf dem Markt', prompt: 'Frage nach Preis und Bedeutung eines Gegenstands und bitte dann darum, etwas aufzuschreiben.', cue: 'Tagpila ni? Unsa ni? Palihug isulat ni.' } + ], + practicalTasks: [{ title: 'Unterwegs', text: 'Sprich drei Sätze für Einkauf, Nachfrage und Orientierung laut hintereinander.' }] }, 'Essen & Fürsorge': { learningGoals: [ @@ -79,15 +177,49 @@ const LESSON_DIDACTICS = { 'Einladungen zum Essen passend beantworten.', 'Kurze Essens-Dialoge laut üben.' ], - corePatterns: ['Nikaon na ka?', 'Kaon ta.', 'Gusto ka mokaon?', 'Lami kaayo.'], + corePatterns: [ + { target: 'Nikaon na ka?', gloss: 'Hast du schon gegessen?' }, + { target: 'Kaon ta.', gloss: 'Lass uns essen.' }, + { target: 'Gusto ka mokaon?', gloss: 'Möchtest du essen?' }, + { target: 'Gutom na ko.', gloss: 'Ich habe Hunger.' }, + { target: 'Palihug, hatagi ko ug tubig.', gloss: 'Bitte gib mir Wasser.' }, + { target: 'Salamat sa pagkaon.', gloss: 'Danke für das Essen.' }, + { target: 'Busog na ko.', gloss: 'Ich bin satt.' }, + { target: 'Lami kaayo.', gloss: 'Sehr lecker.' } + ], grammarFocus: [ - { title: 'na als Zustandsmarker', text: '"na" markiert oft etwas, das bereits eingetreten ist oder jetzt gilt.', example: 'Nikaon na ka?' } + { title: 'na als Zustandsmarker', text: '"na" markiert oft etwas, das bereits eingetreten ist oder jetzt gilt.', example: 'Nikaon na ka?' }, + { title: 'Bitten mit hatagi ko', text: 'Mit "hatagi ko" bittest du konkret darum, dass dir etwas gegeben wird.', example: 'Palihug, hatagi ko ug tubig.' } ], speakingPrompts: [ - { title: 'Fürsorge-Dialog', prompt: 'Frage, ob jemand schon gegessen hat, und biete Essen oder Wasser an.', cue: 'Nikaon na ka? Gusto ka mokaon?' } + { title: 'Fürsorge-Dialog', prompt: 'Frage, ob jemand schon gegessen hat, und biete Essen oder Wasser an.', cue: 'Nikaon na ka? Gusto ka mokaon?' }, + { title: 'Beim Essen reagieren', prompt: 'Sage, dass du Hunger hast, bitte um Wasser und reagiere danach auf das Essen.', cue: 'Gutom na ko. Palihug, hatagi ko ug tubig. Lami kaayo.' } ], practicalTasks: [{ title: 'Rollenspiel', text: 'Spiele ein kurzes Gespräch zwischen Gastgeber und Gast beim Essen.' }] }, + 'Essen & Trinken': { + learningGoals: [ + 'Wichtige Essens- und Trinkwörter schnell erkennen.', + 'Zwischen Grundnahrungsmitteln, Getränken und Beilagen unterscheiden.', + 'Mit den neuen Wörtern kurze Einkaufs- oder Tischsätze bauen.' + ], + corePatterns: [ + { target: 'Kan-on', gloss: 'gekochter Reis' }, + { target: 'Tubig', gloss: 'Wasser' }, + { target: 'Isda', gloss: 'Fisch' }, + { target: 'Manok', gloss: 'Huhn' }, + { target: 'Gulay', gloss: 'Gemüse' }, + { target: 'Prutas', gloss: 'Obst' }, + { target: 'Gatas', gloss: 'Milch' } + ], + grammarFocus: [ + { title: 'Wortschatz statt ganzer Sätze', text: 'In dieser Lektion sammelst du bewusst Grundwörter, damit du später kurze Essenssätze daraus bauen kannst.', example: 'Kan-on. Tubig. Isda.' } + ], + speakingPrompts: [ + { title: 'Auf dem Tisch', prompt: 'Nenne drei Dinge, die auf dem Tisch stehen oder die du essen und trinken möchtest.', cue: 'Kan-on, isda ug tubig.' } + ], + practicalTasks: [{ title: 'Küchenrunde', text: 'Zeige nacheinander auf sieben Lebensmittel oder stelle sie dir vor und sprich jedes Wort laut aus.' }] + }, 'Zeitformen - Grundlagen': { learningGoals: [ 'Ni- und Mo- als einfache Zeitmarker unterscheiden.', diff --git a/backend/scripts/create-bisaya-course.js b/backend/scripts/create-bisaya-course.js index 843e65d..ad143e9 100755 --- a/backend/scripts/create-bisaya-course.js +++ b/backend/scripts/create-bisaya-course.js @@ -109,33 +109,190 @@ const LESSON_DIDACTICS = { 'Familienwörter': { learningGoals: [ 'Die wichtigsten Familienbezeichnungen sicher erkennen.', - 'Familienmitglieder mit respektvollen Wörtern ansprechen.', + 'Familienmitglieder und Großeltern mit respektvollen Wörtern ansprechen.', 'Kurze Sätze über die eigene Familie bilden.' ], corePatterns: [ - 'Si Nanay', - 'Si Tatay', - 'Kuya nako', - 'Ate nako' + { target: 'Si Nanay.', gloss: 'Das ist Mama.' }, + { target: 'Si Tatay.', gloss: 'Das ist Papa.' }, + { target: 'Si Kuya nako.', gloss: 'Das ist mein älterer Bruder.' }, + { target: 'Si Ate nako.', gloss: 'Das ist meine ältere Schwester.' }, + { target: 'Si Lola nako.', gloss: 'Das ist meine Großmutter.' }, + { target: 'Si Lolo nako.', gloss: 'Das ist mein Großvater.' } ], grammarFocus: [ { title: 'Respekt in Familienanreden', text: 'Kuya und Ate werden nicht nur in der Familie, sondern auch respektvoll für ältere Personen benutzt.', example: 'Kuya, palihug.' + }, + { + title: 'si als Personenmarker', + text: 'Mit "si" markierst du im einfachen Satz eine konkrete Person.', + example: 'Si Nanay. Si Tatay.' } ], speakingPrompts: [ { title: 'Meine Familie', - prompt: 'Stelle zwei Familienmitglieder mit einem kurzen Satz vor.', - cue: 'Si Nanay. Si Kuya.' + prompt: 'Stelle vier Familienmitglieder mit kurzen Sätzen vor.', + cue: 'Si Nanay. Si Tatay. Si Lola nako. Si Kuya nako.' } ], practicalTasks: [ { title: 'Familienpraxis', - text: 'Nenne laut fünf Familienwörter und bilde danach zwei Mini-Sätze.' + text: 'Nenne laut sechs Familienwörter und bilde danach drei Mini-Sätze über deine Familie.' + } + ] + }, + 'Überlebenssätze - Teil 1': { + learningGoals: [ + 'Zentrale Notfall- und Verständnisfragen schnell abrufen.', + 'Höflich um Wiederholung, Hilfe und langsamere Sprache bitten.', + 'Drei Überlebenssätze hintereinander sicher sprechen.' + ], + corePatterns: [ + { target: 'Wala ko kasabot.', gloss: 'Ich verstehe nicht.' }, + { target: 'Palihug ka mubalik?', gloss: 'Kannst du das bitte wiederholen?' }, + { target: 'Asa ang CR?', gloss: 'Wo ist die Toilette?' }, + { target: 'Hinay-hinay lang.', gloss: 'Bitte langsam.' }, + { target: 'Tabangi ko, palihug.', gloss: 'Hilf mir bitte.' }, + { target: 'Unsay pasabot ani?', gloss: 'Was bedeutet das?' } + ], + grammarFocus: [ + { + title: 'Bitte-Formeln mit palihug', + text: '"Palihug" macht Bitten höflich und taucht in vielen Überlebenssätzen auf.', + example: 'Palihug ka mubalik? / Tabangi ko, palihug.' + }, + { + title: 'Kurze Verständnisfragen', + text: 'Sehr kurze Fragen helfen dir im Alltag oft mehr als lange Sätze.', + example: 'Unsay pasabot ani? Asa ang CR?' + } + ], + speakingPrompts: [ + { + title: 'Wenn du etwas nicht verstehst', + prompt: 'Sage, dass du etwas nicht verstehst, und bitte um Wiederholung.', + cue: 'Wala ko kasabot. Palihug ka mubalik?' + }, + { + title: 'Soforthilfe', + prompt: 'Bitte um Hilfe und frage dann nach der Toilette oder nach der Bedeutung eines Wortes.', + cue: 'Tabangi ko, palihug. Asa ang CR?' + } + ], + practicalTasks: [ + { + title: 'Alltagsanker', + text: 'Sprich alle sechs Überlebenssätze laut durch und ordne sie drei Alltagssituationen zu.' + } + ] + }, + 'Familien-Gespräche': { + learningGoals: [ + 'Kurze Familiengespräche sicher verstehen.', + 'Nach Familienmitgliedern fragen und einfache Antworten geben.', + 'Ein Mini-Gespräch über Hunger und Zuhause nachsprechen.' + ], + corePatterns: [ + { target: 'Kumusta ka, Nanay?', gloss: 'Wie geht es dir, Mama?' }, + { target: 'Asa si Tatay?', gloss: 'Wo ist Papa?' }, + { target: 'Naa siya sa balay.', gloss: 'Er ist zu Hause.' }, + { target: 'Kumusta na ang Kuya?', gloss: 'Wie geht es dem älteren Bruder?' }, + { target: 'Gutom na ko, Nanay.', gloss: 'Ich habe Hunger, Mama.' }, + { target: 'Hapit na ang pagkaon.', gloss: 'Das Essen ist fast fertig.' } + ], + grammarFocus: [ + { + title: 'naa für Ort und Vorhandensein', + text: '"Naa" hilft dir, über Orte und Vorhandensein zu sprechen.', + example: 'Naa siya sa balay.' + } + ], + speakingPrompts: [ + { + title: 'Familien-Mini-Dialog', + prompt: 'Frage nach einem Familienmitglied und reagiere dann mit einer kurzen Antwort.', + cue: 'Asa si Tatay? Naa siya sa balay.' + } + ], + practicalTasks: [ + { + title: 'Gesprächspraxis', + text: 'Spiele einen kurzen Familienaustausch mit Frage, Antwort und Fürsorge nach.' + } + ] + }, + 'Gefühle & Zuneigung': { + learningGoals: [ + 'Wichtige Gefühle und Zuneigungsformeln sicher unterscheiden.', + 'Freundliche Nähe und Vermissen sprachlich ausdrücken.', + 'Zwischen positiven und negativen Gefühlen wechseln.' + ], + corePatterns: [ + { target: 'Palangga taka.', gloss: 'Ich hab dich lieb.' }, + { target: 'Ganahan ko nimo.', gloss: 'Ich mag dich.' }, + { target: 'Gimingaw ko nimo.', gloss: 'Ich vermisse dich.' }, + { target: 'Nalipay ko.', gloss: 'Ich bin glücklich.' }, + { target: 'Nasubo ko.', gloss: 'Ich bin traurig.' }, + { target: 'Nalipay ko nga nakita ka.', gloss: 'Ich freue mich, dich zu sehen.' } + ], + grammarFocus: [ + { + title: 'ko für eigene Gefühle', + text: 'Viele Gefühlsaussagen bauen direkt auf dem Muster "Gefühl + ko" auf.', + example: 'Nalipay ko. Nasubo ko.' + } + ], + speakingPrompts: [ + { + title: 'Gefühl ausdrücken', + prompt: 'Sage, dass du jemanden magst oder vermisst, und ergänze danach ein einfaches Gefühl.', + cue: 'Ganahan ko nimo. Nalipay ko.' + } + ], + practicalTasks: [ + { + title: 'Herzsprache', + text: 'Lies drei Zuneigungsformeln laut und entscheide danach: liebhaben, mögen oder vermissen?' + } + ] + }, + 'Überlebenssätze - Teil 2': { + learningGoals: [ + 'Weitere zentrale Alltagsfragen sicher sprechen.', + 'Höflich Entschuldigung, Nachfrage und Hilfesprache verbinden.', + 'Im Alltag Preise, Dinge und Sprache klar ansprechen.' + ], + corePatterns: [ + { target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' }, + { target: 'Unsa ni?', gloss: 'Was ist das?' }, + { target: 'Pasensya.', gloss: 'Entschuldigung.' }, + { target: 'Dili ko mag-Bisaya.', gloss: 'Ich spreche kein Bisaya.' }, + { target: 'Palihug isulat ni.', gloss: 'Bitte schreib das auf.' }, + { target: 'Nawala ko.', gloss: 'Ich habe mich verlaufen.' } + ], + grammarFocus: [ + { + title: 'Kurze Markt- und Orientierungssprache', + text: 'Kurze Fragewörter plus ein Nomen reichen oft, um im Alltag voranzukommen.', + example: 'Tagpila ni? Unsa ni?' + } + ], + speakingPrompts: [ + { + title: 'Auf dem Markt', + prompt: 'Frage nach Preis und Bedeutung eines Gegenstands und bitte dann darum, etwas aufzuschreiben.', + cue: 'Tagpila ni? Unsa ni? Palihug isulat ni.' + } + ], + practicalTasks: [ + { + title: 'Unterwegs', + text: 'Sprich drei Sätze für Einkauf, Nachfrage und Orientierung laut hintereinander.' } ] }, @@ -146,16 +303,25 @@ const LESSON_DIDACTICS = { 'Kurze Essens-Dialoge laut üben.' ], corePatterns: [ - 'Nikaon na ka?', - 'Kaon ta.', - 'Gusto ka mokaon?', - 'Lami kaayo.' + { target: 'Nikaon na ka?', gloss: 'Hast du schon gegessen?' }, + { target: 'Kaon ta.', gloss: 'Lass uns essen.' }, + { target: 'Gusto ka mokaon?', gloss: 'Möchtest du essen?' }, + { target: 'Gutom na ko.', gloss: 'Ich habe Hunger.' }, + { target: 'Palihug, hatagi ko ug tubig.', gloss: 'Bitte gib mir Wasser.' }, + { target: 'Salamat sa pagkaon.', gloss: 'Danke für das Essen.' }, + { target: 'Busog na ko.', gloss: 'Ich bin satt.' }, + { target: 'Lami kaayo.', gloss: 'Sehr lecker.' } ], grammarFocus: [ { title: 'na als Zustandsmarker', text: '"na" markiert oft etwas, das bereits eingetreten ist oder jetzt gilt.', example: 'Nikaon na ka?' + }, + { + title: 'Bitten mit hatagi ko', + text: 'Mit "hatagi ko" bittest du konkret darum, dass dir etwas gegeben wird.', + example: 'Palihug, hatagi ko ug tubig.' } ], speakingPrompts: [ @@ -163,6 +329,11 @@ const LESSON_DIDACTICS = { title: 'Fürsorge-Dialog', prompt: 'Frage, ob jemand schon gegessen hat, und biete Essen oder Wasser an.', cue: 'Nikaon na ka? Gusto ka mokaon?' + }, + { + title: 'Beim Essen reagieren', + prompt: 'Sage, dass du Hunger hast, bitte um Wasser und reagiere danach auf das Essen.', + cue: 'Gutom na ko. Palihug, hatagi ko ug tubig. Lami kaayo.' } ], practicalTasks: [ @@ -172,6 +343,42 @@ const LESSON_DIDACTICS = { } ] }, + 'Essen & Trinken': { + learningGoals: [ + 'Wichtige Essens- und Trinkwörter schnell erkennen.', + 'Zwischen Grundnahrungsmitteln, Getränken und Beilagen unterscheiden.', + 'Mit den neuen Wörtern kurze Einkaufs- oder Tischsätze bauen.' + ], + corePatterns: [ + { target: 'Kan-on', gloss: 'gekochter Reis' }, + { target: 'Tubig', gloss: 'Wasser' }, + { target: 'Isda', gloss: 'Fisch' }, + { target: 'Manok', gloss: 'Huhn' }, + { target: 'Gulay', gloss: 'Gemüse' }, + { target: 'Prutas', gloss: 'Obst' }, + { target: 'Gatas', gloss: 'Milch' } + ], + grammarFocus: [ + { + title: 'Wortschatz statt ganzer Sätze', + text: 'In dieser Lektion sammelst du bewusst Grundwörter, damit du später kurze Essenssätze daraus bauen kannst.', + example: 'Kan-on. Tubig. Isda.' + } + ], + speakingPrompts: [ + { + title: 'Auf dem Tisch', + prompt: 'Nenne drei Dinge, die auf dem Tisch stehen oder die du essen und trinken möchtest.', + cue: 'Kan-on, isda ug tubig.' + } + ], + practicalTasks: [ + { + title: 'Küchenrunde', + text: 'Zeige nacheinander auf sieben Lebensmittel oder stelle sie dir vor und sprich jedes Wort laut aus.' + } + ] + }, 'Zeitformen - Grundlagen': { learningGoals: [ 'Ni- und Mo- als einfache Zeitmarker unterscheiden.', diff --git a/backend/scripts/update-bisaya-didactics.js b/backend/scripts/update-bisaya-didactics.js index f0b742b..3948ab4 100644 --- a/backend/scripts/update-bisaya-didactics.js +++ b/backend/scripts/update-bisaya-didactics.js @@ -59,18 +59,124 @@ const LESSON_DIDACTICS = { 'Familienwörter': { learningGoals: [ 'Die wichtigsten Familienbezeichnungen sicher erkennen.', - 'Familienmitglieder mit respektvollen Wörtern ansprechen.', + 'Familienmitglieder und Großeltern mit respektvollen Wörtern ansprechen.', 'Kurze Sätze über die eigene Familie bilden.' ], - corePatterns: ['Si Nanay', 'Si Tatay', 'Kuya nako', 'Ate nako'], + corePatterns: [ + { target: 'Si Nanay.', gloss: 'Das ist Mama.' }, + { target: 'Si Tatay.', gloss: 'Das ist Papa.' }, + { target: 'Si Kuya nako.', gloss: 'Das ist mein älterer Bruder.' }, + { target: 'Si Ate nako.', gloss: 'Das ist meine ältere Schwester.' }, + { target: 'Si Lola nako.', gloss: 'Das ist meine Großmutter.' }, + { target: 'Si Lolo nako.', gloss: 'Das ist mein Großvater.' } + ], grammarFocus: [ - { title: 'Respekt in Familienanreden', text: 'Kuya und Ate werden nicht nur in der Familie, sondern auch respektvoll für ältere Personen benutzt.', example: 'Kuya, palihug.' } + { title: 'Respekt in Familienanreden', text: 'Kuya und Ate werden nicht nur in der Familie, sondern auch respektvoll für ältere Personen benutzt.', example: 'Kuya, palihug.' }, + { title: 'si als Personenmarker', text: 'Mit "si" markierst du im einfachen Satz eine konkrete Person.', example: 'Si Nanay. Si Tatay.' } ], speakingPrompts: [ - { title: 'Meine Familie', prompt: 'Stelle zwei Familienmitglieder mit einem kurzen Satz vor.', cue: 'Si Nanay. Si Kuya.' } + { title: 'Meine Familie', prompt: 'Stelle vier Familienmitglieder mit kurzen Sätzen vor.', cue: 'Si Nanay. Si Tatay. Si Lola nako. Si Kuya nako.' } ], practicalTasks: [ - { title: 'Familienpraxis', text: 'Nenne laut fünf Familienwörter und bilde danach zwei Mini-Sätze.' } + { title: 'Familienpraxis', text: 'Nenne laut sechs Familienwörter und bilde danach drei Mini-Sätze über deine Familie.' } + ] + }, + 'Überlebenssätze - Teil 1': { + learningGoals: [ + 'Zentrale Notfall- und Verständnisfragen schnell abrufen.', + 'Höflich um Wiederholung, Hilfe und langsamere Sprache bitten.', + 'Drei Überlebenssätze hintereinander sicher sprechen.' + ], + corePatterns: [ + { target: 'Wala ko kasabot.', gloss: 'Ich verstehe nicht.' }, + { target: 'Palihug ka mubalik?', gloss: 'Kannst du das bitte wiederholen?' }, + { target: 'Asa ang CR?', gloss: 'Wo ist die Toilette?' }, + { target: 'Hinay-hinay lang.', gloss: 'Bitte langsam.' }, + { target: 'Tabangi ko, palihug.', gloss: 'Hilf mir bitte.' }, + { target: 'Unsay pasabot ani?', gloss: 'Was bedeutet das?' } + ], + grammarFocus: [ + { title: 'Bitte-Formeln mit palihug', text: '"Palihug" macht Bitten höflich und taucht in vielen Überlebenssätzen auf.', example: 'Palihug ka mubalik? / Tabangi ko, palihug.' }, + { title: 'Kurze Verständnisfragen', text: 'Sehr kurze Fragen helfen dir im Alltag oft mehr als lange Sätze.', example: 'Unsay pasabot ani? Asa ang CR?' } + ], + speakingPrompts: [ + { title: 'Wenn du etwas nicht verstehst', prompt: 'Sage, dass du etwas nicht verstehst, und bitte um Wiederholung.', cue: 'Wala ko kasabot. Palihug ka mubalik?' }, + { title: 'Soforthilfe', prompt: 'Bitte um Hilfe und frage dann nach der Toilette oder nach der Bedeutung eines Wortes.', cue: 'Tabangi ko, palihug. Asa ang CR?' } + ], + practicalTasks: [ + { title: 'Alltagsanker', text: 'Sprich alle sechs Überlebenssätze laut durch und ordne sie drei Alltagssituationen zu.' } + ] + }, + 'Familien-Gespräche': { + learningGoals: [ + 'Kurze Familiengespräche sicher verstehen.', + 'Nach Familienmitgliedern fragen und einfache Antworten geben.', + 'Ein Mini-Gespräch über Hunger und Zuhause nachsprechen.' + ], + corePatterns: [ + { target: 'Kumusta ka, Nanay?', gloss: 'Wie geht es dir, Mama?' }, + { target: 'Asa si Tatay?', gloss: 'Wo ist Papa?' }, + { target: 'Naa siya sa balay.', gloss: 'Er ist zu Hause.' }, + { target: 'Kumusta na ang Kuya?', gloss: 'Wie geht es dem älteren Bruder?' }, + { target: 'Gutom na ko, Nanay.', gloss: 'Ich habe Hunger, Mama.' }, + { target: 'Hapit na ang pagkaon.', gloss: 'Das Essen ist fast fertig.' } + ], + grammarFocus: [ + { title: 'naa für Ort und Vorhandensein', text: '"Naa" hilft dir, über Orte und Vorhandensein zu sprechen.', example: 'Naa siya sa balay.' } + ], + speakingPrompts: [ + { title: 'Familien-Mini-Dialog', prompt: 'Frage nach einem Familienmitglied und reagiere dann mit einer kurzen Antwort.', cue: 'Asa si Tatay? Naa siya sa balay.' } + ], + practicalTasks: [ + { title: 'Gesprächspraxis', text: 'Spiele einen kurzen Familienaustausch mit Frage, Antwort und Fürsorge nach.' } + ] + }, + 'Gefühle & Zuneigung': { + learningGoals: [ + 'Wichtige Gefühle und Zuneigungsformeln sicher unterscheiden.', + 'Freundliche Nähe und Vermissen sprachlich ausdrücken.', + 'Zwischen positiven und negativen Gefühlen wechseln.' + ], + corePatterns: [ + { target: 'Palangga taka.', gloss: 'Ich hab dich lieb.' }, + { target: 'Ganahan ko nimo.', gloss: 'Ich mag dich.' }, + { target: 'Gimingaw ko nimo.', gloss: 'Ich vermisse dich.' }, + { target: 'Nalipay ko.', gloss: 'Ich bin glücklich.' }, + { target: 'Nasubo ko.', gloss: 'Ich bin traurig.' }, + { target: 'Nalipay ko nga nakita ka.', gloss: 'Ich freue mich, dich zu sehen.' } + ], + grammarFocus: [ + { title: 'ko für eigene Gefühle', text: 'Viele Gefühlsaussagen bauen direkt auf dem Muster "Gefühl + ko" auf.', example: 'Nalipay ko. Nasubo ko.' } + ], + speakingPrompts: [ + { title: 'Gefühl ausdrücken', prompt: 'Sage, dass du jemanden magst oder vermisst, und ergänze danach ein einfaches Gefühl.', cue: 'Ganahan ko nimo. Nalipay ko.' } + ], + practicalTasks: [ + { title: 'Herzsprache', text: 'Lies drei Zuneigungsformeln laut und entscheide danach: liebhaben, mögen oder vermissen?' } + ] + }, + 'Überlebenssätze - Teil 2': { + learningGoals: [ + 'Weitere zentrale Alltagsfragen sicher sprechen.', + 'Höflich Entschuldigung, Nachfrage und Hilfesprache verbinden.', + 'Im Alltag Preise, Dinge und Sprache klar ansprechen.' + ], + corePatterns: [ + { target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' }, + { target: 'Unsa ni?', gloss: 'Was ist das?' }, + { target: 'Pasensya.', gloss: 'Entschuldigung.' }, + { target: 'Dili ko mag-Bisaya.', gloss: 'Ich spreche kein Bisaya.' }, + { target: 'Palihug isulat ni.', gloss: 'Bitte schreib das auf.' }, + { target: 'Nawala ko.', gloss: 'Ich habe mich verlaufen.' } + ], + grammarFocus: [ + { title: 'Kurze Markt- und Orientierungssprache', text: 'Kurze Fragewörter plus ein Nomen reichen oft, um im Alltag voranzukommen.', example: 'Tagpila ni? Unsa ni?' } + ], + speakingPrompts: [ + { title: 'Auf dem Markt', prompt: 'Frage nach Preis und Bedeutung eines Gegenstands und bitte dann darum, etwas aufzuschreiben.', cue: 'Tagpila ni? Unsa ni? Palihug isulat ni.' } + ], + practicalTasks: [ + { title: 'Unterwegs', text: 'Sprich drei Sätze für Einkauf, Nachfrage und Orientierung laut hintereinander.' } ] }, 'Essen & Fürsorge': { @@ -79,17 +185,53 @@ const LESSON_DIDACTICS = { 'Einladungen zum Essen passend beantworten.', 'Kurze Essens-Dialoge laut üben.' ], - corePatterns: ['Nikaon na ka?', 'Kaon ta.', 'Gusto ka mokaon?', 'Lami kaayo.'], + corePatterns: [ + { target: 'Nikaon na ka?', gloss: 'Hast du schon gegessen?' }, + { target: 'Kaon ta.', gloss: 'Lass uns essen.' }, + { target: 'Gusto ka mokaon?', gloss: 'Möchtest du essen?' }, + { target: 'Gutom na ko.', gloss: 'Ich habe Hunger.' }, + { target: 'Palihug, hatagi ko ug tubig.', gloss: 'Bitte gib mir Wasser.' }, + { target: 'Salamat sa pagkaon.', gloss: 'Danke für das Essen.' }, + { target: 'Busog na ko.', gloss: 'Ich bin satt.' }, + { target: 'Lami kaayo.', gloss: 'Sehr lecker.' } + ], grammarFocus: [ - { title: 'na als Zustandsmarker', text: '"na" markiert oft etwas, das bereits eingetreten ist oder jetzt gilt.', example: 'Nikaon na ka?' } + { title: 'na als Zustandsmarker', text: '"na" markiert oft etwas, das bereits eingetreten ist oder jetzt gilt.', example: 'Nikaon na ka?' }, + { title: 'Bitten mit hatagi ko', text: 'Mit "hatagi ko" bittest du konkret darum, dass dir etwas gegeben wird.', example: 'Palihug, hatagi ko ug tubig.' } ], speakingPrompts: [ - { title: 'Fürsorge-Dialog', prompt: 'Frage, ob jemand schon gegessen hat, und biete Essen oder Wasser an.', cue: 'Nikaon na ka? Gusto ka mokaon?' } + { title: 'Fürsorge-Dialog', prompt: 'Frage, ob jemand schon gegessen hat, und biete Essen oder Wasser an.', cue: 'Nikaon na ka? Gusto ka mokaon?' }, + { title: 'Beim Essen reagieren', prompt: 'Sage, dass du Hunger hast, bitte um Wasser und reagiere danach auf das Essen.', cue: 'Gutom na ko. Palihug, hatagi ko ug tubig. Lami kaayo.' } ], practicalTasks: [ { title: 'Rollenspiel', text: 'Spiele ein kurzes Gespräch zwischen Gastgeber und Gast beim Essen.' } ] }, + 'Essen & Trinken': { + learningGoals: [ + 'Wichtige Essens- und Trinkwörter schnell erkennen.', + 'Zwischen Grundnahrungsmitteln, Getränken und Beilagen unterscheiden.', + 'Mit den neuen Wörtern kurze Einkaufs- oder Tischsätze bauen.' + ], + corePatterns: [ + { target: 'Kan-on', gloss: 'gekochter Reis' }, + { target: 'Tubig', gloss: 'Wasser' }, + { target: 'Isda', gloss: 'Fisch' }, + { target: 'Manok', gloss: 'Huhn' }, + { target: 'Gulay', gloss: 'Gemüse' }, + { target: 'Prutas', gloss: 'Obst' }, + { target: 'Gatas', gloss: 'Milch' } + ], + grammarFocus: [ + { title: 'Wortschatz statt ganzer Sätze', text: 'In dieser Lektion sammelst du bewusst Grundwörter, damit du später kurze Essenssätze daraus bauen kannst.', example: 'Kan-on. Tubig. Isda.' } + ], + speakingPrompts: [ + { title: 'Auf dem Tisch', prompt: 'Nenne drei Dinge, die auf dem Tisch stehen oder die du essen und trinken möchtest.', cue: 'Kan-on, isda ug tubig.' } + ], + practicalTasks: [ + { title: 'Küchenrunde', text: 'Zeige nacheinander auf sieben Lebensmittel oder stelle sie dir vor und sprich jedes Wort laut aus.' } + ] + }, 'Zeitformen - Grundlagen': { learningGoals: [ 'Ni- und Mo- als einfache Zeitmarker unterscheiden.', diff --git a/frontend/src/views/social/VocabLessonView.vue b/frontend/src/views/social/VocabLessonView.vue index 9d512bf..c9c270a 100644 --- a/frontend/src/views/social/VocabLessonView.vue +++ b/frontend/src/views/social/VocabLessonView.vue @@ -2385,6 +2385,7 @@ export default { return this.vocabTrainerStats[key]; }, normalizeRepeatQueue(queue = []) { + const repeatIntervals = this.getRepeatIntervals(); if (!Array.isArray(queue)) { return []; } @@ -2392,37 +2393,56 @@ export default { .map((entry) => ({ key: String(entry?.key || '').trim(), dueAfter: Math.max(0, Number(entry?.dueAfter) || 0), - stageIndex: Math.max(0, Math.min(VOCAB_REPEAT_INTERVALS.length - 1, Number(entry?.stageIndex) || 0)) + stageIndex: Math.max(0, Math.min(repeatIntervals.length - 1, Number(entry?.stageIndex) || 0)) })) .filter((entry) => entry.key); }, + getRepeatIntervals() { + const availableCount = new Set( + [...this.trainableLessonVocab, ...this.vocabTrainerMixedPool].map((vocab) => this.getVocabKey(vocab)) + ).size; + const maxSpacing = Math.max(1, Math.min(4, availableCount - 1)); + + if (maxSpacing <= 1) { + return [1, 1, 1]; + } + if (maxSpacing === 2) { + return [1, 1, 2]; + } + if (maxSpacing === 3) { + return [1, 2, 3]; + } + return VOCAB_REPEAT_INTERVALS; + }, queueFailedVocab(vocab) { + const repeatIntervals = this.getRepeatIntervals(); const key = this.getVocabKey(vocab); const existing = this.vocabTrainerRepeatQueue.find((entry) => entry.key === key); if (existing) { - existing.dueAfter = VOCAB_REPEAT_INTERVALS[0]; + existing.dueAfter = repeatIntervals[0]; existing.stageIndex = 0; return; } this.vocabTrainerRepeatQueue.push({ key, - dueAfter: VOCAB_REPEAT_INTERVALS[0], + dueAfter: repeatIntervals[0], stageIndex: 0 }); }, resolveRepeatedVocab(vocab) { + const repeatIntervals = this.getRepeatIntervals(); const key = this.getVocabKey(vocab); const entryIndex = this.vocabTrainerRepeatQueue.findIndex((entry) => entry.key === key && entry.dueAfter <= 0); if (entryIndex === -1) { return; } const entry = this.vocabTrainerRepeatQueue[entryIndex]; - if (entry.stageIndex >= VOCAB_REPEAT_INTERVALS.length - 1) { + if (entry.stageIndex >= repeatIntervals.length - 1) { this.vocabTrainerRepeatQueue.splice(entryIndex, 1); return; } entry.stageIndex += 1; - entry.dueAfter = VOCAB_REPEAT_INTERVALS[entry.stageIndex]; + entry.dueAfter = repeatIntervals[entry.stageIndex]; }, advanceRepeatQueue(completedKey = '') { this.vocabTrainerRepeatQueue = this.vocabTrainerRepeatQueue