All checks were successful
Deploy to production / deploy (push) Successful in 2m51s
- Updated lessons on numbers to include detailed sections for "Zahlen 1–20," "Zahlen: Zehner," "Zahlen: Hunderter," and "Zahlen: Tausender," focusing on foundational numerical concepts in Bisaya. - Introduced various exercise types such as multiple-choice, gap-fill, and transformation tasks to improve learner engagement and comprehension of numerical expressions. - Enhanced didactics with clear learning goals, core patterns, grammar focus, speaking prompts, and practical tasks to support effective learning. - Added review lessons to reinforce key concepts and ensure continuity in learning progression.
1181 lines
46 KiB
JavaScript
Executable File
1181 lines
46 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
||
/**
|
||
* Script zum Erstellen eines vollständigen 6-Wochen Bisaya-Kurses
|
||
*
|
||
* Verwendung:
|
||
* node backend/scripts/create-bisaya-course.js <languageId> <ownerHashedId>
|
||
*/
|
||
|
||
import { sequelize } from '../utils/sequelize.js';
|
||
import VocabCourse from '../models/community/vocab_course.js';
|
||
import VocabCourseLesson from '../models/community/vocab_course_lesson.js';
|
||
import User from '../models/community/user.js';
|
||
import crypto from 'crypto';
|
||
import { getBisayaLessonPedagogy } from './bisaya-course-phase2-pedagogy.js';
|
||
import { BISAYA_PHASE3_DIDACTICS, BISAYA_PHASE3_LESSONS } from './bisaya-course-phase3-extension.js';
|
||
import { BISAYA_PHASE4_DIDACTICS, BISAYA_PHASE4_LESSONS } from './bisaya-course-phase4-extension.js';
|
||
import { BISAYA_PHASE5_DIDACTICS, BISAYA_PHASE5_LESSONS } from './bisaya-course-phase5-extension.js';
|
||
|
||
const LESSON_DIDACTICS = {
|
||
'Begrüßungen & Höflichkeit': {
|
||
learningGoals: [
|
||
'Einfache Begrüßungen verstehen und selbst verwenden.',
|
||
'Tageszeitbezogene Grüße und einfache Verabschiedungen unterscheiden.',
|
||
'Höfliche Reaktionen wie Danke und Bitte passend einsetzen.',
|
||
'Ein kurzes Begrüßungs-Mini-Gespräch laut üben.',
|
||
'Eine kurze Abend- und Schlafensroutine im Familienalltag sprechen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Kumusta ka?', gloss: 'Wie geht es dir?' },
|
||
{ target: 'Maayong buntag.', gloss: 'Guten Morgen.' },
|
||
{ target: 'Maayong adlaw.', gloss: 'Guten Tag.' },
|
||
{ target: 'Maayong gabii.', gloss: 'Guten Abend.' },
|
||
{ target: 'Maayong gabii, matulog na ta.', gloss: 'Guten Abend, wir legen uns schlafen.' },
|
||
{ target: 'Katulog og maayo.', gloss: 'Schlaf gut.' },
|
||
{ target: 'Kapoy na ka?', gloss: 'Bist du müde?' },
|
||
{ target: 'Matulog na ta.', gloss: 'Lass uns schlafen gehen.' },
|
||
{ target: 'Inom sa og tubig.', gloss: 'Trink Wasser.' },
|
||
{ target: 'Patya ang suga.', gloss: 'Mach das Licht aus.' },
|
||
{ target: 'Tabuni ang imong kaugalingon.', gloss: 'Deck dich zu.' },
|
||
{ target: 'Ugma nasad.', gloss: 'Bis morgen wieder.' },
|
||
{ target: 'Damgo og nindot.', gloss: 'Träum schön.' },
|
||
{ target: 'Amping.', gloss: 'Pass auf dich auf.' },
|
||
{ target: 'Babay.', gloss: 'Tschüss.' },
|
||
{ target: 'Maayo ko.', gloss: 'Mir geht es gut.' },
|
||
{ target: 'Salamat.', gloss: 'Danke.' },
|
||
{ target: 'Palihug.', gloss: 'Bitte.' }
|
||
],
|
||
grammarFocus: [
|
||
{
|
||
title: 'Kurzantworten mit ko',
|
||
text: 'Mit "ko" sprichst du über dich selbst: "Maayo ko."',
|
||
example: 'Maayo ko. = Mir geht es gut.'
|
||
},
|
||
{
|
||
title: 'Maayong + Tageszeit',
|
||
text: 'Mit "Maayong" kannst du Grüße für verschiedene Tageszeiten bilden.',
|
||
example: 'Maayong buntag. / Maayong gabii.'
|
||
},
|
||
{
|
||
title: 'Abend und Schlafen',
|
||
text: 'Im Familienalltag folgen auf einen Abendgruß oft direkte Schlafens- oder Fürsorgeformeln.',
|
||
example: 'Maayong gabii. / Katulog og maayo.'
|
||
},
|
||
{
|
||
title: 'Sanfte Schlafensroutine',
|
||
text: 'Kurze Fragen nach Müdigkeit und kleine Aufforderungen klingen im Familienalltag natürlicher als lange Sätze.',
|
||
example: 'Kapoy na ka? Matulog na ta. Inom sa og tubig.'
|
||
},
|
||
{
|
||
title: 'Familiäre Abendformeln',
|
||
text: 'Am Abend folgen oft sehr kurze Handlungsformeln wie Licht aus, zudecken oder ein Schlafwunsch.',
|
||
example: 'Patya ang suga. Tabuni ang imong kaugalingon. Damgo og nindot.'
|
||
}
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Mini-Gespräch',
|
||
prompt: 'Begrüße eine Person, frage nach dem Befinden und reagiere höflich.',
|
||
cue: 'Kumusta ka? Maayo ko. Salamat.'
|
||
},
|
||
{
|
||
title: 'Verabschiedung',
|
||
prompt: 'Verabschiede dich kurz und wünsche, dass die andere Person auf sich aufpasst.',
|
||
cue: 'Babay. Amping.'
|
||
},
|
||
{
|
||
title: 'Abend und Schlaf',
|
||
prompt: 'Wünsche einen guten Abend, eine gute Nacht und dass die Person gut schlafen soll.',
|
||
cue: 'Maayong gabii. Katulog og maayo.'
|
||
},
|
||
{
|
||
title: 'Schlafensroutine',
|
||
prompt: 'Frage, ob die Person müde ist, und leite dann sanft zum Schlafengehen über.',
|
||
cue: 'Kapoy na ka? Matulog na ta. Inom sa og tubig.'
|
||
},
|
||
{
|
||
title: 'Vor dem Schlafen',
|
||
prompt: 'Bitte darum, das Licht auszumachen, sich zuzudecken, und wünsche eine gute Nacht bis morgen.',
|
||
cue: 'Patya ang suga. Tabuni ang imong kaugalingon. Ugma nasad. Damgo og nindot.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Alltag',
|
||
text: 'Sprich die Begrüßung dreimal laut und variiere die Antwort.'
|
||
}
|
||
]
|
||
},
|
||
'Familienwörter': {
|
||
learningGoals: [
|
||
'Die wichtigsten Familienbezeichnungen sicher erkennen.',
|
||
'Familienmitglieder und Großeltern mit respektvollen Wörtern ansprechen.',
|
||
'Kurze Sätze über die eigene Familie bilden.'
|
||
],
|
||
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 Dodong nako.', gloss: 'Das ist mein jüngerer Bruder.' },
|
||
{ target: 'Si Inday nako.', gloss: 'Das ist meine jüngere 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 richtest du an ältere Geschwister (oder respektvoll an andere). Dodong und Inday nutzt du für jüngere Brüder bzw. Schwestern; „Ading“ ist eine weiche Anrede an jüngere Geschwister.',
|
||
example: 'Kuya, palihug. / Si Dodong nako.'
|
||
},
|
||
{
|
||
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 vier Familienmitglieder mit kurzen Sätzen vor.',
|
||
cue: 'Si Nanay. Si Tatay. Si Kuya nako. Si Dodong nako.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Familienpraxis',
|
||
text: 'Nenne laut die acht Kern-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: 'Kumusta na ang Dodong?', gloss: 'Wie geht es dem jüngeren Bruder?' },
|
||
{ target: 'Kumusta na ang Inday?', gloss: 'Wie geht es der jüngeren Schwester?' },
|
||
{ 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: [
|
||
'Fürsorgliche Fragen rund ums Essen verstehen.',
|
||
'Einladungen zum Essen passend beantworten.',
|
||
'Kurze Essens-Dialoge laut üben.'
|
||
],
|
||
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: '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: '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.'
|
||
}
|
||
]
|
||
},
|
||
'Alltagsgespräche - Teil 1': {
|
||
learningGoals: [
|
||
'Alltagsaktivitäten in ganzen Sätzen beschreiben.',
|
||
'Nach Tagesplan, Aufgaben und Rückkehr fragen.',
|
||
'Kurze Familienabsprachen für den Tag sicher führen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Unsa imong buhat karon?', gloss: 'Was machst du heute?' },
|
||
{ target: 'Nagluto ko para sa panihapon.', gloss: 'Ich koche für das Abendessen.' },
|
||
{ target: 'Naglimpyo ko sa balay.', gloss: 'Ich putze das Haus.' },
|
||
{ target: 'Human na ka sa trabaho?', gloss: 'Bist du mit der Arbeit fertig?' },
|
||
{ target: 'Dali lang ko mubalik.', gloss: 'Ich komme gleich wieder.' },
|
||
{ target: 'Naa koy lakaw karong hapon.', gloss: 'Ich habe heute Nachmittag etwas zu erledigen.' },
|
||
{ target: 'Magpahuway ko gamay unya.', gloss: 'Ich ruhe mich später kurz aus.' },
|
||
{ target: 'Tawagi ko kung mahuman ka.', gloss: 'Ruf mich an, wenn du fertig bist.' }
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Tagesablauf abstimmen',
|
||
prompt: 'Frage nach dem Plan und sage, was du heute erledigst.',
|
||
cue: 'Unsa imong buhat karon? Naglimpyo ko sa balay.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Alltagscheck',
|
||
text: 'Sprich vier Sätze zu deinem heutigen Ablauf: Aufgabe, Erledigung, Rückkehr und Pause.'
|
||
}
|
||
]
|
||
},
|
||
'Haus & Familie': {
|
||
learningGoals: [
|
||
'Wichtige Wörter für Haus, Räume und Familie zuordnen und aussprechen.',
|
||
'Mit „Naa … sa …“ sagen, wo sich jemand oder etwas im Haus befindet.',
|
||
'Kurze Sätze über Zuhause und Familie verstehen und nachsprechen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Balay', gloss: 'Haus' },
|
||
{ target: 'Kwarto', gloss: 'Zimmer' },
|
||
{ target: 'Kusina', gloss: 'Küche' },
|
||
{ target: 'Sala', gloss: 'Wohnzimmer' },
|
||
{ target: 'Banyo', gloss: 'Badezimmer' },
|
||
{ target: 'Pultahan', gloss: 'Tür' },
|
||
{ target: 'Bintana', gloss: 'Fenster' },
|
||
{ target: 'Atop', gloss: 'Dach' },
|
||
{ target: 'Pamilya', gloss: 'Familie' },
|
||
{ target: 'Among pamilya', gloss: 'unsere Familie' },
|
||
{ target: 'Naa ko sa balay.', gloss: 'Ich bin zu Hause.' },
|
||
{ target: 'Naa sila sa kusina.', gloss: 'Sie sind in der Küche.' },
|
||
{ target: 'Asa ang kusina?', gloss: 'Wo ist die Küche?' },
|
||
{ target: 'Ang among balay.', gloss: 'Unser Haus.' }
|
||
],
|
||
grammarFocus: [
|
||
{
|
||
title: 'Naa … sa … für Ort',
|
||
text: '„Naa“ drückt aus, dass jemand oder etwas irgendwo ist; „sa“ verbindet mit dem Ort.',
|
||
example: 'Naa ko sa balay. Naa sila sa kusina.'
|
||
},
|
||
{
|
||
title: 'among = unser (Plural inklusiv)',
|
||
text: '„Among“ passt zu „wir/unsere“ im Sinne von Familie oder Gruppe.',
|
||
example: 'Among pamilya. Ang among balay.'
|
||
}
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Räume benennen',
|
||
prompt: 'Nenne Küche, Wohnzimmer und Badezimmer auf Bisaya.',
|
||
cue: 'Kusina, sala, banyo.'
|
||
},
|
||
{
|
||
title: 'Wer ist wo?',
|
||
prompt: 'Sage, dass du zu Hause bist, und frage, wo die Küche ist.',
|
||
cue: 'Naa ko sa balay. Asa ang kusina?'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Rundgang',
|
||
text: 'Geh in Gedanken durch dein Zuhause und benenne jeden Raum laut auf Bisaya.'
|
||
}
|
||
]
|
||
},
|
||
'Zeitformen - Grundlagen': {
|
||
learningGoals: [
|
||
'Vergangenheit, laufende Handlung und Zukunft in einfachen Alltagssätzen unterscheiden.',
|
||
'Zeitmarker (ni-, nag-/ga-, mo-) mit Zeitwörtern sinnvoll kombinieren.',
|
||
'Zwischen denselben Verben in drei Zeitbezügen sicher wechseln.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Ni-kaon ko ganiha.', gloss: 'Ich habe vorhin gegessen.' },
|
||
{ target: 'Nagkaon ko karon.', gloss: 'Ich esse gerade jetzt.' },
|
||
{ target: 'Mo-kaon ko unya.', gloss: 'Ich werde später essen.' },
|
||
{ target: 'Ni-adto ko sa merkado ganiha.', gloss: 'Ich bin vorhin zum Markt gegangen.' },
|
||
{ target: 'Naa ko sa merkado karon.', gloss: 'Ich bin jetzt auf dem Markt.' },
|
||
{ target: 'Mo-adto ko sa merkado ugma.', gloss: 'Ich werde morgen zum Markt gehen.' },
|
||
{ target: 'Nipalit ko og isda ganiha.', gloss: 'Ich habe vorhin Fisch gekauft.' },
|
||
{ target: 'Mupalit ko og isda ugma.', gloss: 'Ich werde morgen Fisch kaufen.' }
|
||
],
|
||
grammarFocus: [
|
||
{
|
||
title: 'Vergangenheit mit ni-',
|
||
text: 'ni- markiert im Grundkurs häufig abgeschlossene Handlungen in der Vergangenheit.',
|
||
example: 'Ni-kaon ko ganiha.'
|
||
},
|
||
{
|
||
title: 'Laufende Handlung mit nag-/ga-',
|
||
text: 'Für gerade laufende oder aktuelle Handlungen wird oft nag-/ga- genutzt, häufig zusammen mit karon.',
|
||
example: 'Nagkaon ko karon.'
|
||
},
|
||
{
|
||
title: 'Zukunft/Absicht mit mo-',
|
||
text: 'mo- markiert im Kurs Zukünftiges oder Vorhaben und wird oft mit unya/ugma kombiniert.',
|
||
example: 'Mo-adto ko ugma.'
|
||
},
|
||
{
|
||
title: 'Zeitwörter als Klarsteller',
|
||
text: 'Wörter wie ganiha, karon und ugma helfen, den Zeitbezug eindeutig zu machen.',
|
||
example: 'ganiha (vorhin), karon (jetzt), ugma (morgen)'
|
||
}
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Dreierschritt Zeit',
|
||
prompt: 'Formuliere denselben Inhalt nacheinander für Vergangenheit, Gegenwart und Zukunft.',
|
||
cue: 'Ni-adto ko ganiha. Naa ko diri karon. Mo-adto ko ugma.'
|
||
},
|
||
{
|
||
title: 'Tagesplanung mit Zeiten',
|
||
prompt: 'Sage, was du vorhin getan hast, was du jetzt machst und was du später tun wirst.',
|
||
cue: 'Nipalit ko ganiha. Nagluto ko karon. Mo-kaon ko unya.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Verb-Staffel',
|
||
text: 'Nimm drei Verben (z. B. kaon, adto, palit) und bilde jeweils Vergangenheit, Gegenwart und Zukunft laut.'
|
||
},
|
||
{
|
||
title: 'Zeitkarten',
|
||
text: 'Ziehe zufällig ein Zeitwort (ganiha/karon/unya/ugma) und bilde sofort einen passenden Satz.'
|
||
}
|
||
]
|
||
},
|
||
'Zeit & Datum': {
|
||
learningGoals: [
|
||
'Die drei wichtigsten Zeitwörter (gestern/heute/morgen) sicher erkennen.',
|
||
'Zeitmarker in kurzen Sätzen verwenden (ganiha/karon/ugma).',
|
||
'Einfache Datums- und Zeitfragen verstehen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Ganiha', gloss: 'vorhin / früher heute' },
|
||
{ target: 'Gahapon', gloss: 'gestern' },
|
||
{ target: 'Karon', gloss: 'jetzt / heute' },
|
||
{ target: 'Ugma', gloss: 'morgen' },
|
||
{ target: 'Unya', gloss: 'später' },
|
||
{ target: 'Unsang adlaw karon?', gloss: 'Welcher Wochentag ist heute?' },
|
||
{ target: 'Alas pila na?', gloss: 'Wie spät ist es?' }
|
||
],
|
||
grammarFocus: [
|
||
{
|
||
title: 'Zeitmarker statt komplexer Tempora',
|
||
text: 'Cebuano nutzt häufig Zeitwörter wie karon, gahapon und ugma, um den Zeitpunkt klarzumachen.',
|
||
example: 'Ni-adto ko gahapon. Mo-adto ko ugma.'
|
||
}
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Gestern-heute-morgen',
|
||
prompt: 'Sprich drei Mini-Sätze mit denselben Verb über gestern, heute und morgen.',
|
||
cue: 'Ni-adto ko gahapon. Naa ko diri karon. Mo-adto ko ugma.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Zeitanker',
|
||
text: 'Nenne fünf Aktivitäten und hänge je nach Zeitpunkt „gahapon“, „karon“ oder „ugma“ an.'
|
||
}
|
||
]
|
||
},
|
||
'Einkaufen & Preise': {
|
||
learningGoals: [
|
||
'Preise erfragen und auf einfache Antworten reagieren.',
|
||
'Beim Einkauf höflich nachfragen oder um einen besseren Preis bitten.',
|
||
'Einen kurzen Markt-Dialog mit Frage und Antwort führen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' },
|
||
{ target: 'Mahal ba ni?', gloss: 'Ist das teuer?' },
|
||
{ target: 'Pwede barato?', gloss: 'Geht es günstiger?' },
|
||
{ target: 'Sige, paliton nako.', gloss: 'Okay, ich nehme es.' },
|
||
{ target: 'Unsaon pagbayad?', gloss: 'Wie bezahle ich?' }
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Kaufgespräch',
|
||
prompt: 'Frage nach dem Preis, handle kurz und entscheide dann, ob du kaufst.',
|
||
cue: 'Tagpila ni? Pwede barato? Sige, paliton nako.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Preisrunde',
|
||
text: 'Frage zu drei Gegenständen laut nach dem Preis und antworte dir jeweils selbst.'
|
||
}
|
||
]
|
||
},
|
||
'Zahlen 1–20': {
|
||
learningGoals: [
|
||
'Die Grundzahlen 1–10 sicher sprechen und zuordnen.',
|
||
'Zahlen 11–19 als Zehner-plus-Einer erkennen.',
|
||
'Die Zahl 20 (baynte) sicher verwenden.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Usa', gloss: 'eins' },
|
||
{ target: 'Duha', gloss: 'zwei' },
|
||
{ target: 'Tulo', gloss: 'drei' },
|
||
{ target: 'Upat', gloss: 'vier' },
|
||
{ target: 'Lima', gloss: 'fünf' },
|
||
{ target: 'Unom', gloss: 'sechs' },
|
||
{ target: 'Pito', gloss: 'sieben' },
|
||
{ target: 'Walo', gloss: 'acht' },
|
||
{ target: 'Siyam', gloss: 'neun' },
|
||
{ target: 'Napulo', gloss: 'zehn' },
|
||
{ target: 'Napulog-usa', gloss: 'elf' },
|
||
{ target: 'Baynte', gloss: 'zwanzig' }
|
||
],
|
||
grammarFocus: [
|
||
{
|
||
title: 'Aufbau 11–19',
|
||
text: 'Häufig „napulo + Zahl“ oder feste Kurzformen; im Kurs zuerst die häufigsten Varianten üben.',
|
||
example: 'Napulog-usa (11), …, baynte (20).'
|
||
}
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Zählen bis 20',
|
||
prompt: 'Zähle laut von 1 bis 10 und dann in Einzelschritten bis 20.',
|
||
cue: 'Usa, duha, tulo … baynte.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Zahlenreihe',
|
||
text: 'Schreibe die Ziffern 1–20 auf Zettel und sage zu jeder die Bisaya-Form laut.'
|
||
}
|
||
]
|
||
},
|
||
'Zahlen: Zehner': {
|
||
learningGoals: [
|
||
'Die runden Zehner 20–90 sicher erkennen und aussprechen.',
|
||
'Zehner mit kleinen Zahlen kombinieren (z. B. 25).',
|
||
'Zehner im Alltag (Preis, Menge) wiedererkennen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Baynte', gloss: 'zwanzig' },
|
||
{ target: 'Traysenta', gloss: 'dreißig' },
|
||
{ target: 'Kwarenta', gloss: 'vierzig' },
|
||
{ target: 'Singkwenta', gloss: 'fünfzig' },
|
||
{ target: 'Sesenta', gloss: 'sechzig' },
|
||
{ target: 'Setenta', gloss: 'siebzig' },
|
||
{ target: 'Otsenta', gloss: 'achtzig' },
|
||
{ target: 'Nobenta', gloss: 'neunzig' }
|
||
],
|
||
grammarFocus: [
|
||
{
|
||
title: 'Spanische Zehnerformen',
|
||
text: 'Im Alltag sind spanisch geprägte Zehner sehr verbreitet; regionale Aussprache kann leicht variieren.',
|
||
example: 'Baynte pesos. Traysenta.'
|
||
}
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Nur Zehner',
|
||
prompt: 'Nenne nacheinander 20, 30, … 90 auf Bisaya.',
|
||
cue: 'Baynte, traysenta, kwarenta … nobenta.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Zehnerkarten',
|
||
text: 'Ziehe eine Karte mit 20/30/… und bilde sofort einen kurzen Preis-Satz.'
|
||
}
|
||
]
|
||
},
|
||
'Zahlen: Hunderter': {
|
||
learningGoals: [
|
||
'Hunderter mit „ka gatos“ bilden und verstehen.',
|
||
'Zwischen 100, 200 und 900 unterscheiden.',
|
||
'Einfache Mengenangaben mit Hundertern formulieren.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Usa ka gatos', gloss: 'einhundert' },
|
||
{ target: 'Duha ka gatos', gloss: 'zweihundert' },
|
||
{ target: 'Tulo ka gatos', gloss: 'dreihundert' },
|
||
{ target: 'Upat ka gatos', gloss: 'vierhundert' },
|
||
{ target: 'Lima ka gatos', gloss: 'fünfhundert' }
|
||
],
|
||
grammarFocus: [
|
||
{
|
||
title: 'Zahl + ka gatos',
|
||
text: '„Gatos“ entspricht oft der Idee von Hundert; davor steht die Anzahl.',
|
||
example: 'Duha ka gatos (200).'
|
||
}
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Hunderter hören',
|
||
prompt: 'Sage drei Hunderter-Beträge laut und wiederhole sie.',
|
||
cue: 'Usa ka gatos. Duha ka gatos. Tulo ka gatos.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Preis grob',
|
||
text: 'Übe, große Beträge in Hunderter-Schritten zu nennen (z. B. 300, 500).'
|
||
}
|
||
]
|
||
},
|
||
'Zahlen: Tausender': {
|
||
learningGoals: [
|
||
'Tausender mit „libo“ sicher bilden.',
|
||
'Große Beträge (z. B. Gehalt, Miete, Rechnungen) grob einordnen.',
|
||
'Einfache Kombinationen aus Tausend und Hundert verstehen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Usa ka libo', gloss: 'eintausend' },
|
||
{ target: 'Duha ka libo', gloss: 'zweitausend' },
|
||
{ target: 'Tulo ka libo', gloss: 'dreitausend' },
|
||
{ target: 'Usa ka libo ug lima ka gatos', gloss: 'eintausendfünfhundert (typische Struktur)' }
|
||
],
|
||
grammarFocus: [
|
||
{
|
||
title: 'libo = Tausend',
|
||
text: 'Mit „usa/duha/… ka libo“ bildest du Tausender; oft folgen noch Hunderter oder kleinere Teile.',
|
||
example: 'Duha ka libo.'
|
||
}
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Große Zahl',
|
||
prompt: 'Nenne einen vierstelligen Betrag in groben Tausender-Schritten.',
|
||
cue: 'Usa ka libo. Duha ka libo.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Realitätsanker',
|
||
text: 'Nenne zwei reale Beträge (z. B. Preis für Handy, Miete) und sage sie in groben Tausender-Schritten auf Bisaya.'
|
||
}
|
||
]
|
||
},
|
||
'Woche 2 - Wiederholung': {
|
||
learningGoals: [
|
||
'Die zentralen Muster von Lektion 11–21 sicher wiedererkennen.',
|
||
'Orte, Zeitangaben und Preisfragen in einem Durchgang kombinieren.',
|
||
'Kurze Alltagssituationen ohne Hilfe formulieren.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Naa ko sa balay.', gloss: 'Ich bin zu Hause.' },
|
||
{ target: 'Asa ka moadto unya?', gloss: 'Wohin gehst du später?' },
|
||
{ target: 'Mo-adto ko ugma.', gloss: 'Ich gehe morgen.' },
|
||
{ target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' },
|
||
{ target: 'Baynte pesos.', gloss: 'Zwanzig Peso.' }
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Woche-2-Mix',
|
||
prompt: 'Baue einen Mini-Dialog mit Ort, Zeit und Preis.',
|
||
cue: 'Asa ka moadto unya? Tagpila ni? Baynte pesos.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Spiral-Wiederholung',
|
||
text: 'Sprich nacheinander je einen Satz zu Ort, Zeit und Einkauf.'
|
||
}
|
||
]
|
||
},
|
||
'Woche 2 - Vokabeltest': {
|
||
learningGoals: [
|
||
'Wortschatz aus Woche 2 schnell abrufen.',
|
||
'Ähnliche Zeit- und Ortswörter sicher unterscheiden.',
|
||
'Zahlen und Preisvokabeln fehlerfrei zuordnen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Balay', gloss: 'Haus' },
|
||
{ target: 'Kusina', gloss: 'Küche' },
|
||
{ target: 'Karon', gloss: 'heute/jetzt' },
|
||
{ target: 'Ugma', gloss: 'morgen' },
|
||
{ target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' },
|
||
{ target: 'Baynte', gloss: 'zwanzig' }
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Selbsttest',
|
||
text: 'Nimm zehn Wörter aus Woche 2 und übersetze sie laut in beide Richtungen.'
|
||
}
|
||
]
|
||
},
|
||
'Alltagsgespräche - Teil 2': {
|
||
learningGoals: [
|
||
'Ziele, Wege und Zeitpunkte im Alltag genauer angeben.',
|
||
'Verabredungen und Rückkehrzeiten in ganzen Sätzen formulieren.',
|
||
'Einkaufs- und Familienwege natürlich besprechen.'
|
||
],
|
||
corePatterns: [
|
||
{ target: 'Asa ka moadto unya?', gloss: 'Wohin gehst du später?' },
|
||
{ target: 'Moadto ko sa merkado unya.', gloss: 'Ich gehe später zum Markt.' },
|
||
{ target: 'Unsa imong plano karong gabii?', gloss: 'Was ist dein Plan heute Abend?' },
|
||
{ target: 'Magkita mi sa silingan karon.', gloss: 'Wir treffen jetzt die Nachbarn.' },
|
||
{ target: 'Mupalit ko ug pagkaon para sa balay.', gloss: 'Ich kaufe Essen für zu Hause.' },
|
||
{ target: 'Mahimo ba ta magkita ugma buntag?', gloss: 'Können wir uns morgen früh treffen?' },
|
||
{ target: 'Unsa orasa ka mouli?', gloss: 'Um wie viel Uhr kommst du nach Hause?' },
|
||
{ target: 'Mouli ko mga alas sais.', gloss: 'Ich komme gegen sechs nach Hause.' }
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Weg und Zeit planen',
|
||
prompt: 'Frage nach Ziel und Uhrzeit und gib eine konkrete Antwort.',
|
||
cue: 'Asa ka moadto unya? Mouli ko mga alas sais.'
|
||
}
|
||
],
|
||
practicalTasks: [
|
||
{
|
||
title: 'Planungsdialog',
|
||
text: 'Baue einen Mini-Dialog mit Zielort, Uhrzeit und Rückkehr in mindestens vier Sätzen.'
|
||
}
|
||
]
|
||
},
|
||
'Woche 1 - Wiederholung': {
|
||
learningGoals: [
|
||
'Die Kernmuster der ersten Woche ohne Hilfe wiederholen.',
|
||
'Zwischen Begrüßung, Familie und Fürsorge schneller wechseln.',
|
||
'Eine kurze Alltagssequenz frei sprechen.'
|
||
],
|
||
corePatterns: [
|
||
'Kumusta ka?',
|
||
'Palangga taka.',
|
||
'Nikaon na ka?',
|
||
'Wala ko kasabot.'
|
||
],
|
||
speakingPrompts: [
|
||
{
|
||
title: 'Freie Wiederholung',
|
||
prompt: 'Begrüße jemanden, drücke Zuneigung aus und frage fürsorglich nach dem Essen.',
|
||
cue: 'Kumusta ka? Palangga taka. Nikaon na ka?'
|
||
}
|
||
]
|
||
},
|
||
'Woche 1 - Vokabeltest': {
|
||
learningGoals: [
|
||
'Die wichtigsten Wörter der ersten Woche schnell abrufen.',
|
||
'Bedeutung und Gebrauch zentraler Wörter unterscheiden.',
|
||
'Von einzelnen Wörtern zu kurzen Sätzen übergehen.'
|
||
],
|
||
corePatterns: [
|
||
'Kumusta',
|
||
'Salamat',
|
||
'Lami',
|
||
'Mingaw ko nimo'
|
||
]
|
||
},
|
||
...BISAYA_PHASE3_DIDACTICS,
|
||
...BISAYA_PHASE4_DIDACTICS,
|
||
...BISAYA_PHASE5_DIDACTICS
|
||
};
|
||
|
||
const LESSONS = [
|
||
// WOCHE 1: Grundlagen & Aussprache
|
||
{ week: 1, day: 1, num: 1, type: 'conversation', title: 'Begrüßungen & Höflichkeit',
|
||
desc: 'Lerne die wichtigsten Begrüßungen und Höflichkeitsformeln',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: 'Philippiner schätzen Höflichkeit sehr. Lächeln ist wichtig!' },
|
||
|
||
{ week: 1, day: 1, num: 2, type: 'vocab', title: 'Überlebenssätze - Teil 1',
|
||
desc: 'Die 10 wichtigsten Sätze für den Alltag',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: 'Diese Sätze helfen dir sofort im Alltag weiter.' },
|
||
|
||
{ week: 1, day: 2, num: 3, type: 'vocab', title: 'Familienwörter',
|
||
desc: 'Mama, Papa, Kuya, Ate, Dodong, Inday, Lola, Lolo',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: 'Kuya und Ate für Ältere; Dodong und Inday für jüngere Geschwister. Kuya/Ate werden auch respektvoll außerhalb der Familie genutzt.' },
|
||
|
||
{ week: 1, day: 2, num: 4, type: 'conversation', title: 'Familien-Gespräche',
|
||
desc: 'Einfache Gespräche mit Familienmitgliedern',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: 'Familienkonversationen sind herzlicher als formelle Gespräche.' },
|
||
|
||
{ week: 1, day: 3, num: 5, type: 'conversation', title: 'Gefühle & Zuneigung',
|
||
desc: 'Mingaw ko nimo, Palangga taka und mehr',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: 'Palangga taka ist wärmer als "I love you" im Familienkontext.' },
|
||
|
||
{ week: 1, day: 3, num: 6, type: 'vocab', title: 'Überlebenssätze - Teil 2',
|
||
desc: 'Weitere wichtige Alltagssätze',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 1, day: 4, num: 7, type: 'conversation', title: 'Essen & Fürsorge',
|
||
desc: 'Nikaon ka? Kaon ta! Lami!',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: 'Essen = Liebe! "Nikaon na ka?" ist sehr fürsorglich.' },
|
||
|
||
{ week: 1, day: 4, num: 8, type: 'vocab', title: 'Essen & Trinken',
|
||
desc: 'Wichtige Wörter rund ums Essen',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 1, day: 5, num: 9, type: 'review', title: 'Woche 1 - Wiederholung',
|
||
desc: 'Wiederhole alle Inhalte der ersten Woche',
|
||
targetMin: 30, targetScore: 80, review: false,
|
||
cultural: 'Wiederholung ist der Schlüssel zum Erfolg!' },
|
||
|
||
{ week: 1, day: 5, num: 10, type: 'vocab', title: 'Woche 1 - Vokabeltest',
|
||
desc: 'Teste dein Wissen aus Woche 1',
|
||
targetMin: 15, targetScore: 80, review: true,
|
||
cultural: null },
|
||
|
||
// WOCHE 2: Alltag & Familie
|
||
{ week: 2, day: 1, num: 11, type: 'conversation', title: 'Alltagsgespräche - Teil 1',
|
||
desc: 'Wie war dein Tag? Was machst du?',
|
||
targetMin: 25, targetScore: 80, review: false,
|
||
cultural: 'Alltagsgespräche sind wichtig für echte Kommunikation.' },
|
||
|
||
{ week: 2, day: 1, num: 12, type: 'vocab', title: 'Haus & Familie',
|
||
desc: 'Haus, Räume, Familie: Balay, kwarto, kusina, sala, banyo, pamilya',
|
||
targetMin: 22, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 2, day: 2, num: 13, type: 'conversation', title: 'Alltagsgespräche - Teil 2',
|
||
desc: 'Wohin gehst du? Was machst du heute?',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: null },
|
||
|
||
{ week: 2, day: 2, num: 14, type: 'vocab', title: 'Ort & Richtung',
|
||
desc: 'Asa, dinhi, didto, padulong',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 2, day: 3, num: 15, type: 'grammar', title: 'Zeitformen - Grundlagen',
|
||
desc: 'Ni-kaon ko, Mo-kaon ko - Vergangenheit und Zukunft',
|
||
targetMin: 25, targetScore: 75, review: true,
|
||
cultural: 'Cebuano hat keine komplexen Zeiten wie Deutsch. Zeit wird mit Präfixen ausgedrückt.' },
|
||
|
||
{ week: 2, day: 3, num: 16, type: 'vocab', title: 'Zeit & Datum',
|
||
desc: 'Karon, ugma, gahapon, karon adlaw',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 2, day: 4, num: 17, type: 'conversation', title: 'Einkaufen & Preise',
|
||
desc: 'Tagpila ni? Pwede barato?',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: 'Handeln ist in den Philippinen üblich und erwartet.' },
|
||
|
||
{ week: 2, day: 4, num: 18, type: 'vocab', title: 'Zahlen 1–20',
|
||
desc: 'Grundzahlen und Zahlen bis 20 (usa … baynte)',
|
||
targetMin: 22, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 2, day: 4, num: 19, type: 'vocab', title: 'Zahlen: Zehner',
|
||
desc: 'Runde Zehner von 20 bis 90',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 2, day: 4, num: 20, type: 'vocab', title: 'Zahlen: Hunderter',
|
||
desc: 'Hunderter bis 900 (usa ka gatos … siyam ka gatos)',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 2, day: 4, num: 21, type: 'vocab', title: 'Zahlen: Tausender',
|
||
desc: 'Tausender und große Beträge (libo)',
|
||
targetMin: 18, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 2, day: 5, num: 22, type: 'review', title: 'Woche 2 - Wiederholung',
|
||
desc: 'Wiederhole alle Inhalte der zweiten Woche',
|
||
targetMin: 30, targetScore: 80, review: false,
|
||
cultural: null },
|
||
|
||
{ week: 2, day: 5, num: 23, type: 'vocab', title: 'Woche 2 - Vokabeltest',
|
||
desc: 'Teste dein Wissen aus Woche 2',
|
||
targetMin: 15, targetScore: 80, review: true,
|
||
cultural: null },
|
||
|
||
// WOCHE 3: Vertiefung
|
||
{ week: 3, day: 1, num: 24, type: 'conversation', title: 'Gefühle & Emotionen',
|
||
desc: 'Nalipay, nasubo, nahadlok, naguol',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: 'Emotionen auszudrücken ist wichtig für echte Verbindung.' },
|
||
|
||
{ week: 3, day: 1, num: 25, type: 'vocab', title: 'Gefühle & Emotionen',
|
||
desc: 'Wörter für verschiedene Gefühle',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 3, day: 2, num: 26, type: 'conversation', title: 'Gesundheit & Wohlbefinden',
|
||
desc: 'Sakit, maayo, tambal, doktor',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: null },
|
||
|
||
{ week: 3, day: 2, num: 27, type: 'vocab', title: 'Körper & Gesundheit',
|
||
desc: 'Wörter rund um den Körper und Gesundheit',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 3, day: 3, num: 28, type: 'grammar', title: 'Höflichkeitsformen',
|
||
desc: 'Palihug, Pwede, Tabang',
|
||
targetMin: 20, targetScore: 75, review: true,
|
||
cultural: 'Höflichkeit ist extrem wichtig in der philippinischen Kultur.' },
|
||
|
||
{ week: 3, day: 3, num: 29, type: 'conversation', title: 'Bitten & Fragen',
|
||
desc: 'Wie man höflich fragt und bittet',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: null },
|
||
|
||
{ week: 3, day: 4, num: 30, type: 'conversation', title: 'Kinder & Familie',
|
||
desc: 'Gespräche mit und über Kinder',
|
||
targetMin: 15, targetScore: 80, review: false,
|
||
cultural: 'Kinder sind sehr wichtig in philippinischen Familien.' },
|
||
|
||
{ week: 3, day: 4, num: 31, type: 'vocab', title: 'Kinder & Spiel',
|
||
desc: 'Wörter für Kinder und Spielsachen',
|
||
targetMin: 20, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 3, day: 5, num: 32, type: 'review', title: 'Woche 3 - Wiederholung',
|
||
desc: 'Wiederhole alle Inhalte der dritten Woche',
|
||
targetMin: 30, targetScore: 80, review: false,
|
||
cultural: null },
|
||
|
||
{ week: 3, day: 5, num: 33, type: 'vocab', title: 'Woche 3 - Vokabeltest',
|
||
desc: 'Teste dein Wissen aus Woche 3',
|
||
targetMin: 15, targetScore: 80, review: true,
|
||
cultural: null },
|
||
|
||
// WOCHE 4: Freies Sprechen
|
||
{ week: 4, day: 1, num: 34, type: 'conversation', title: 'Freies Gespräch - Thema 1',
|
||
desc: 'Übe freies Sprechen zu verschiedenen Themen',
|
||
targetMin: 20, targetScore: 75, review: false,
|
||
cultural: 'Fehler sind okay! Philippiner schätzen das Bemühen.' },
|
||
|
||
{ week: 4, day: 1, num: 35, type: 'vocab', title: 'Wiederholung - Woche 1 & 2',
|
||
desc: 'Wiederhole wichtige Vokabeln aus den ersten beiden Wochen',
|
||
targetMin: 25, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 4, day: 2, num: 36, type: 'conversation', title: 'Freies Gespräch - Thema 2',
|
||
desc: 'Weitere Übung im freien Sprechen',
|
||
targetMin: 20, targetScore: 75, review: false,
|
||
cultural: null },
|
||
|
||
{ week: 4, day: 2, num: 37, type: 'vocab', title: 'Wiederholung - Woche 3',
|
||
desc: 'Wiederhole wichtige Vokabeln aus Woche 3',
|
||
targetMin: 25, targetScore: 85, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 4, day: 3, num: 38, type: 'conversation', title: 'Komplexere Gespräche',
|
||
desc: 'Längere Gespräche zu verschiedenen Themen',
|
||
targetMin: 25, targetScore: 75, review: false,
|
||
cultural: 'Je mehr du sprichst, desto besser wirst du!' },
|
||
|
||
{ week: 4, day: 3, num: 39, type: 'review', title: 'Gesamtwiederholung',
|
||
desc: 'Wiederhole alle wichtigen Inhalte des Kurses',
|
||
targetMin: 30, targetScore: 80, review: false,
|
||
cultural: null },
|
||
|
||
{ week: 4, day: 4, num: 40, type: 'conversation', title: 'Praktische Übung',
|
||
desc: 'Simuliere echte Gesprächssituationen',
|
||
targetMin: 25, targetScore: 75, review: false,
|
||
cultural: null },
|
||
|
||
{ week: 4, day: 4, num: 41, type: 'vocab', title: 'Abschlusstest - Vokabeln',
|
||
desc: 'Finaler Vokabeltest über den gesamten Kurs',
|
||
targetMin: 20, targetScore: 80, review: true,
|
||
cultural: null },
|
||
|
||
{ week: 4, day: 5, num: 42, type: 'review', title: 'Abschlussprüfung',
|
||
desc: 'Finale Prüfung über alle Kursinhalte',
|
||
targetMin: 30, targetScore: 80, review: false,
|
||
cultural: 'Gratulation zum Abschluss des Kurses!' },
|
||
|
||
{ week: 4, day: 5, num: 43, type: 'culture', title: 'Kulturelle Tipps & Tricks',
|
||
desc: 'Wichtige kulturelle Hinweise für den Alltag',
|
||
targetMin: 15, targetScore: 0, review: false,
|
||
cultural: 'Kulturelles Verständnis ist genauso wichtig wie die Sprache selbst.' },
|
||
|
||
...BISAYA_PHASE3_LESSONS,
|
||
...BISAYA_PHASE4_LESSONS,
|
||
...BISAYA_PHASE5_LESSONS
|
||
];
|
||
|
||
async function createBisayaCourse(languageId, ownerHashedId) {
|
||
try {
|
||
// Finde User
|
||
const user = await User.findOne({ where: { hashedId: ownerHashedId } });
|
||
if (!user) {
|
||
throw new Error(`User mit hashedId ${ownerHashedId} nicht gefunden`);
|
||
}
|
||
|
||
// Prüfe, ob Sprache existiert
|
||
const [lang] = await sequelize.query(
|
||
`SELECT id FROM community.vocab_language WHERE id = :langId`,
|
||
{ replacements: { langId: languageId }, type: sequelize.QueryTypes.SELECT }
|
||
);
|
||
if (!lang) {
|
||
throw new Error(`Sprache mit ID ${languageId} nicht gefunden`);
|
||
}
|
||
|
||
// Erstelle Kurs
|
||
const shareCode = crypto.randomBytes(8).toString('hex');
|
||
const course = await VocabCourse.create({
|
||
ownerUserId: user.id,
|
||
title: 'Bisaya für Familien - Alltag & Stabilisierung',
|
||
description: 'Lerne Bisaya (Cebuano) praxisnah für den Familienalltag. Der Pfad verbindet Schnellstart, Alltagsmodule und Stabilisierungsblöcke mit Spiralwiederholung, Fehlertraining und freier Produktion.',
|
||
languageId: Number(languageId),
|
||
difficultyLevel: 1,
|
||
isPublic: true,
|
||
shareCode
|
||
});
|
||
|
||
console.log(`✅ Kurs erstellt: ${course.id} - "${course.title}"`);
|
||
console.log(` Share-Code: ${shareCode}`);
|
||
|
||
// Erstelle Lektionen
|
||
for (const lessonData of LESSONS) {
|
||
const pedagogy = getBisayaLessonPedagogy(lessonData.num) || {};
|
||
const lesson = await VocabCourseLesson.create({
|
||
courseId: course.id,
|
||
chapterId: null, // Wird später mit Vokabeln verknüpft
|
||
lessonNumber: lessonData.num,
|
||
title: lessonData.title,
|
||
description: lessonData.desc,
|
||
weekNumber: lessonData.week,
|
||
dayNumber: lessonData.day,
|
||
lessonType: lessonData.type,
|
||
culturalNotes: lessonData.cultural,
|
||
learningGoals: LESSON_DIDACTICS[lessonData.title]?.learningGoals || [],
|
||
corePatterns: LESSON_DIDACTICS[lessonData.title]?.corePatterns || [],
|
||
grammarFocus: LESSON_DIDACTICS[lessonData.title]?.grammarFocus || [],
|
||
speakingPrompts: LESSON_DIDACTICS[lessonData.title]?.speakingPrompts || [],
|
||
practicalTasks: LESSON_DIDACTICS[lessonData.title]?.practicalTasks || [],
|
||
targetMinutes: lessonData.targetMin,
|
||
targetScorePercent: lessonData.targetScore,
|
||
requiresReview: lessonData.review,
|
||
didacticMode: pedagogy.didacticMode || null,
|
||
phaseLabel: pedagogy.phaseLabel || null,
|
||
blockNumber: pedagogy.blockNumber ?? null,
|
||
difficultyWeight: pedagogy.difficultyWeight ?? null,
|
||
newUnitTarget: pedagogy.newUnitTarget ?? null,
|
||
reviewWeight: pedagogy.reviewWeight ?? null,
|
||
isIntensiveReview: Boolean(pedagogy.isIntensiveReview)
|
||
});
|
||
console.log(` ✅ Lektion ${lessonData.num}: ${lessonData.title} (Woche ${lessonData.week}, Tag ${lessonData.day})`);
|
||
}
|
||
|
||
console.log(`\n🎉 Kurs erfolgreich erstellt mit ${LESSONS.length} Lektionen!`);
|
||
console.log(`\n📊 Kurs-Statistik:`);
|
||
console.log(` - Gesamte Lektionen: ${LESSONS.length}`);
|
||
console.log(` - Vokabel-Lektionen: ${LESSONS.filter(l => l.type === 'vocab').length}`);
|
||
console.log(` - Konversations-Lektionen: ${LESSONS.filter(l => l.type === 'conversation').length}`);
|
||
console.log(` - Grammatik-Lektionen: ${LESSONS.filter(l => l.type === 'grammar').length}`);
|
||
console.log(` - Wiederholungs-Lektionen: ${LESSONS.filter(l => l.type === 'review').length}`);
|
||
console.log(` - Durchschnittliche Zeit pro Tag: ~${Math.round(LESSONS.reduce((sum, l) => sum + l.targetMin, 0) / (15 * 5))} Minuten`);
|
||
console.log(`\n💡 Nächste Schritte:`);
|
||
console.log(` 1. Füge Vokabeln zu den Vokabel-Lektionen hinzu`);
|
||
console.log(` 2. Erstelle Grammatik-Übungen für die Grammatik-Lektionen`);
|
||
console.log(` 3. Teile den Kurs mit anderen (Share-Code: ${shareCode})`);
|
||
|
||
return course;
|
||
} catch (error) {
|
||
console.error('❌ Fehler beim Erstellen des Kurses:', error);
|
||
throw error;
|
||
}
|
||
}
|
||
|
||
// CLI-Aufruf
|
||
const languageId = process.argv[2];
|
||
const ownerHashedId = process.argv[3];
|
||
|
||
if (!languageId || !ownerHashedId) {
|
||
console.error('Verwendung: node create-bisaya-course.js <languageId> <ownerHashedId>');
|
||
console.error('Beispiel: node create-bisaya-course.js 1 abc123def456');
|
||
process.exit(1);
|
||
}
|
||
|
||
createBisayaCourse(languageId, ownerHashedId)
|
||
.then(() => {
|
||
process.exit(0);
|
||
})
|
||
.catch((error) => {
|
||
console.error(error);
|
||
process.exit(1);
|
||
});
|