diff --git a/backend/scripts/update-food-care-exercises.js b/backend/scripts/update-food-care-exercises.js new file mode 100755 index 0000000..f960c1d --- /dev/null +++ b/backend/scripts/update-food-care-exercises.js @@ -0,0 +1,722 @@ +#!/usr/bin/env node +/** + * Script zum Erstellen von Übungen für die "Essen & Fürsorge" und "Essen & Trinken" Lektionen + * + * Verwendung: + * node backend/scripts/update-food-care-exercises.js + * + * Erstellt Gesprächsübungen für die "Essen & Fürsorge" und "Essen & Trinken" Lektionen in allen Bisaya-Kursen. + */ + +import { sequelize } from '../utils/sequelize.js'; +import VocabCourseLesson from '../models/community/vocab_course_lesson.js'; +import VocabGrammarExercise from '../models/community/vocab_grammar_exercise.js'; +import VocabCourse from '../models/community/vocab_course.js'; +import User from '../models/community/user.js'; +import crypto from 'crypto'; +import bcrypt from 'bcryptjs'; +import { Op } from 'sequelize'; + +// Essen & Fürsorge / Essen & Trinken auf Bisaya mit verschiedenen Muttersprachen +const FOOD_CARE_CONVERSATIONS = { + // Deutsch -> Bisaya + 'Deutsch': { + 'Essen & Fürsorge': [ + { + bisaya: 'Gutom na ko.', + native: 'Ich habe Hunger.', + explanation: '"Gutom" bedeutet "Hunger", "na" ist "schon", "ko" ist "ich"' + }, + { + bisaya: 'Gihikap ko.', + native: 'Ich habe Durst.', + explanation: '"Gihikap" bedeutet "Durst haben", "ko" ist "ich"' + }, + { + bisaya: 'Gusto ka mokaon?', + native: 'Möchtest du essen?', + explanation: '"Gusto" bedeutet "möchten", "ka" ist "du", "mokaon" ist "essen"' + }, + { + bisaya: 'Oo, gusto ko.', + native: 'Ja, ich möchte.', + explanation: '"Oo" ist "Ja", "gusto ko" ist "ich möchte"' + }, + { + bisaya: 'Unsa ang gusto nimo?', + native: 'Was möchtest du?', + explanation: '"Unsa" ist "Was", "ang" ist Artikel, "gusto nimo" ist "du möchtest"' + }, + { + bisaya: 'Gusto ko ug kan-on.', + native: 'Ich möchte Reis.', + explanation: '"Gusto ko" ist "ich möchte", "ug" ist "und/ein", "kan-on" ist "Reis"' + }, + { + bisaya: 'Palihug, hatagi ko ug tubig.', + native: 'Bitte gib mir Wasser.', + explanation: '"Palihug" ist "Bitte", "hatagi" ist "geben", "ko" ist "mir", "ug tubig" ist "Wasser"' + }, + { + bisaya: 'Salamat sa pagkaon.', + native: 'Danke für das Essen.', + explanation: '"Salamat" ist "Danke", "sa pagkaon" ist "für das Essen"' + }, + { + bisaya: 'Lami kaayo!', + native: 'Sehr lecker!', + explanation: '"Lami" bedeutet "lecker", "kaayo" ist "sehr"' + }, + { + bisaya: 'Busog na ko.', + native: 'Ich bin satt.', + explanation: '"Busog" bedeutet "satt", "na" ist "schon", "ko" ist "ich"' + }, + { + bisaya: 'Kumusta ang pagkaon?', + native: 'Wie schmeckt das Essen?', + explanation: '"Kumusta" ist "Wie", "ang pagkaon" ist "das Essen"' + }, + { + bisaya: 'Maayo kaayo ang pagkaon.', + native: 'Das Essen ist sehr gut.', + explanation: '"Maayo" ist "gut", "kaayo" ist "sehr", "ang pagkaon" ist "das Essen"' + } + ], + 'Essen & Trinken': [ + { + bisaya: 'Kan-on', + native: 'Reis', + explanation: '"Kan-on" ist das grundlegende Wort für "Reis"' + }, + { + bisaya: 'Tubig', + native: 'Wasser', + explanation: '"Tubig" bedeutet "Wasser"' + }, + { + bisaya: 'Pan', + native: 'Brot', + explanation: '"Pan" bedeutet "Brot"' + }, + { + bisaya: 'Isda', + native: 'Fisch', + explanation: '"Isda" bedeutet "Fisch"' + }, + { + bisaya: 'Manok', + native: 'Huhn', + explanation: '"Manok" bedeutet "Huhn"' + }, + { + bisaya: 'Baboy', + native: 'Schwein', + explanation: '"Baboy" bedeutet "Schwein"' + }, + { + bisaya: 'Gulay', + native: 'Gemüse', + explanation: '"Gulay" bedeutet "Gemüse"' + }, + { + bisaya: 'Prutas', + native: 'Obst', + explanation: '"Prutas" bedeutet "Obst"' + }, + { + bisaya: 'Gatas', + native: 'Milch', + explanation: '"Gatas" bedeutet "Milch"' + }, + { + bisaya: 'Kape', + native: 'Kaffee', + explanation: '"Kape" bedeutet "Kaffee"' + }, + { + bisaya: 'Tsa', + native: 'Tee', + explanation: '"Tsa" bedeutet "Tee"' + }, + { + bisaya: 'Asin', + native: 'Salz', + explanation: '"Asin" bedeutet "Salz"' + }, + { + bisaya: 'Asukar', + native: 'Zucker', + explanation: '"Asukar" bedeutet "Zucker"' + }, + { + bisaya: 'Tinapay', + native: 'Brot (alternativ)', + explanation: '"Tinapay" ist eine alternative Bezeichnung für "Brot"' + }, + { + bisaya: 'Bugas', + native: 'Reis (roh)', + explanation: '"Bugas" ist ungekochter Reis, "kan-on" ist gekochter Reis' + } + ] + }, + // Englisch -> Bisaya + 'Englisch': { + 'Essen & Fürsorge': [ + { + bisaya: 'Gutom na ko.', + native: 'I am hungry.', + explanation: '"Gutom" means "hungry", "na" is "already", "ko" is "I"' + }, + { + bisaya: 'Gihikap ko.', + native: 'I am thirsty.', + explanation: '"Gihikap" means "thirsty", "ko" is "I"' + }, + { + bisaya: 'Gusto ka mokaon?', + native: 'Do you want to eat?', + explanation: '"Gusto" means "want", "ka" is "you", "mokaon" is "to eat"' + }, + { + bisaya: 'Oo, gusto ko.', + native: 'Yes, I want.', + explanation: '"Oo" is "Yes", "gusto ko" is "I want"' + }, + { + bisaya: 'Unsa ang gusto nimo?', + native: 'What do you want?', + explanation: '"Unsa" is "What", "ang" is article, "gusto nimo" is "you want"' + }, + { + bisaya: 'Gusto ko ug kan-on.', + native: 'I want rice.', + explanation: '"Gusto ko" is "I want", "ug" is "a/some", "kan-on" is "rice"' + }, + { + bisaya: 'Palihug, hatagi ko ug tubig.', + native: 'Please give me water.', + explanation: '"Palihug" is "Please", "hatagi" is "give", "ko" is "me", "ug tubig" is "water"' + }, + { + bisaya: 'Salamat sa pagkaon.', + native: 'Thank you for the food.', + explanation: '"Salamat" is "Thank you", "sa pagkaon" is "for the food"' + }, + { + bisaya: 'Lami kaayo!', + native: 'Very delicious!', + explanation: '"Lami" means "delicious", "kaayo" is "very"' + }, + { + bisaya: 'Busog na ko.', + native: 'I am full.', + explanation: '"Busog" means "full", "na" is "already", "ko" is "I"' + }, + { + bisaya: 'Kumusta ang pagkaon?', + native: 'How is the food?', + explanation: '"Kumusta" is "How", "ang pagkaon" is "the food"' + }, + { + bisaya: 'Maayo kaayo ang pagkaon.', + native: 'The food is very good.', + explanation: '"Maayo" is "good", "kaayo" is "very", "ang pagkaon" is "the food"' + } + ], + 'Essen & Trinken': [ + { + bisaya: 'Kan-on', + native: 'Rice', + explanation: '"Kan-on" is the basic word for "rice"' + }, + { + bisaya: 'Tubig', + native: 'Water', + explanation: '"Tubig" means "water"' + }, + { + bisaya: 'Pan', + native: 'Bread', + explanation: '"Pan" means "bread"' + }, + { + bisaya: 'Isda', + native: 'Fish', + explanation: '"Isda" means "fish"' + }, + { + bisaya: 'Manok', + native: 'Chicken', + explanation: '"Manok" means "chicken"' + }, + { + bisaya: 'Baboy', + native: 'Pig', + explanation: '"Baboy" means "pig"' + }, + { + bisaya: 'Gulay', + native: 'Vegetables', + explanation: '"Gulay" means "vegetables"' + }, + { + bisaya: 'Prutas', + native: 'Fruit', + explanation: '"Prutas" means "fruit"' + }, + { + bisaya: 'Gatas', + native: 'Milk', + explanation: '"Gatas" means "milk"' + }, + { + bisaya: 'Kape', + native: 'Coffee', + explanation: '"Kape" means "coffee"' + }, + { + bisaya: 'Tsa', + native: 'Tea', + explanation: '"Tsa" means "tea"' + }, + { + bisaya: 'Asin', + native: 'Salt', + explanation: '"Asin" means "salt"' + }, + { + bisaya: 'Asukar', + native: 'Sugar', + explanation: '"Asukar" means "sugar"' + }, + { + bisaya: 'Tinapay', + native: 'Bread (alternative)', + explanation: '"Tinapay" is an alternative term for "bread"' + }, + { + bisaya: 'Bugas', + native: 'Rice (uncooked)', + explanation: '"Bugas" is uncooked rice, "kan-on" is cooked rice' + } + ] + } +}; + +// Erweitere für weitere Sprachen (Spanisch, Französisch, Italienisch, Portugiesisch, Tagalog) +const ADDITIONAL_LANGUAGES = { + 'Spanisch': { + 'Essen & Fürsorge': [ + { bisaya: 'Gutom na ko.', native: 'Tengo hambre.', explanation: '"Gutom" significa "hambre", "na" es "ya", "ko" es "yo"' }, + { bisaya: 'Gihikap ko.', native: 'Tengo sed.', explanation: '"Gihikap" significa "sed", "ko" es "yo"' }, + { bisaya: 'Gusto ka mokaon?', native: '¿Quieres comer?', explanation: '"Gusto" significa "querer", "ka" es "tú", "mokaon" es "comer"' }, + { bisaya: 'Oo, gusto ko.', native: 'Sí, quiero.', explanation: '"Oo" es "Sí", "gusto ko" es "quiero"' }, + { bisaya: 'Unsa ang gusto nimo?', native: '¿Qué quieres?', explanation: '"Unsa" es "Qué", "ang" es artículo, "gusto nimo" es "quieres"' }, + { bisaya: 'Gusto ko ug kan-on.', native: 'Quiero arroz.', explanation: '"Gusto ko" es "quiero", "ug kan-on" es "arroz"' }, + { bisaya: 'Palihug, hatagi ko ug tubig.', native: 'Por favor, dame agua.', explanation: '"Palihug" es "Por favor", "hatagi" es "dar", "ko" es "me", "ug tubig" es "agua"' }, + { bisaya: 'Salamat sa pagkaon.', native: 'Gracias por la comida.', explanation: '"Salamat" es "Gracias", "sa pagkaon" es "por la comida"' }, + { bisaya: 'Lami kaayo!', native: '¡Muy delicioso!', explanation: '"Lami" significa "delicioso", "kaayo" es "muy"' }, + { bisaya: 'Busog na ko.', native: 'Estoy lleno.', explanation: '"Busog" significa "lleno", "na" es "ya", "ko" es "yo"' }, + { bisaya: 'Kumusta ang pagkaon?', native: '¿Cómo está la comida?', explanation: '"Kumusta" es "Cómo", "ang pagkaon" es "la comida"' }, + { bisaya: 'Maayo kaayo ang pagkaon.', native: 'La comida está muy buena.', explanation: '"Maayo" es "buena", "kaayo" es "muy", "ang pagkaon" es "la comida"' } + ], + 'Essen & Trinken': [ + { bisaya: 'Kan-on', native: 'Arroz', explanation: '"Kan-on" es la palabra básica para "arroz"' }, + { bisaya: 'Tubig', native: 'Agua', explanation: '"Tubig" significa "agua"' }, + { bisaya: 'Pan', native: 'Pan', explanation: '"Pan" significa "pan"' }, + { bisaya: 'Isda', native: 'Pescado', explanation: '"Isda" significa "pescado"' }, + { bisaya: 'Manok', native: 'Pollo', explanation: '"Manok" significa "pollo"' }, + { bisaya: 'Baboy', native: 'Cerdo', explanation: '"Baboy" significa "cerdo"' }, + { bisaya: 'Gulay', native: 'Verduras', explanation: '"Gulay" significa "verduras"' }, + { bisaya: 'Prutas', native: 'Fruta', explanation: '"Prutas" significa "fruta"' }, + { bisaya: 'Gatas', native: 'Leche', explanation: '"Gatas" significa "leche"' }, + { bisaya: 'Kape', native: 'Café', explanation: '"Kape" significa "café"' }, + { bisaya: 'Tsa', native: 'Té', explanation: '"Tsa" significa "té"' }, + { bisaya: 'Asin', native: 'Sal', explanation: '"Asin" significa "sal"' }, + { bisaya: 'Asukar', native: 'Azúcar', explanation: '"Asukar" significa "azúcar"' }, + { bisaya: 'Tinapay', native: 'Pan (alternativo)', explanation: '"Tinapay" es un término alternativo para "pan"' }, + { bisaya: 'Bugas', native: 'Arroz (crudo)', explanation: '"Bugas" es arroz crudo, "kan-on" es arroz cocido' } + ] + }, + 'Französisch': { + 'Essen & Fürsorge': [ + { bisaya: 'Gutom na ko.', native: 'J\'ai faim.', explanation: '"Gutom" signifie "faim", "na" est "déjà", "ko" est "je"' }, + { bisaya: 'Gihikap ko.', native: 'J\'ai soif.', explanation: '"Gihikap" signifie "soif", "ko" est "je"' }, + { bisaya: 'Gusto ka mokaon?', native: 'Tu veux manger?', explanation: '"Gusto" signifie "vouloir", "ka" est "tu", "mokaon" est "manger"' }, + { bisaya: 'Oo, gusto ko.', native: 'Oui, je veux.', explanation: '"Oo" est "Oui", "gusto ko" est "je veux"' }, + { bisaya: 'Unsa ang gusto nimo?', native: 'Que veux-tu?', explanation: '"Unsa" est "Que", "ang" est article, "gusto nimo" est "tu veux"' }, + { bisaya: 'Gusto ko ug kan-on.', native: 'Je veux du riz.', explanation: '"Gusto ko" est "je veux", "ug kan-on" est "riz"' }, + { bisaya: 'Palihug, hatagi ko ug tubig.', native: 'S\'il te plaît, donne-moi de l\'eau.', explanation: '"Palihug" est "S\'il te plaît", "hatagi" est "donner", "ko" est "moi", "ug tubig" est "eau"' }, + { bisaya: 'Salamat sa pagkaon.', native: 'Merci pour la nourriture.', explanation: '"Salamat" est "Merci", "sa pagkaon" est "pour la nourriture"' }, + { bisaya: 'Lami kaayo!', native: 'Très délicieux!', explanation: '"Lami" signifie "délicieux", "kaayo" est "très"' }, + { bisaya: 'Busog na ko.', native: 'Je suis rassasié.', explanation: '"Busog" signifie "rassasié", "na" est "déjà", "ko" est "je"' }, + { bisaya: 'Kumusta ang pagkaon?', native: 'Comment est la nourriture?', explanation: '"Kumusta" est "Comment", "ang pagkaon" est "la nourriture"' }, + { bisaya: 'Maayo kaayo ang pagkaon.', native: 'La nourriture est très bonne.', explanation: '"Maayo" est "bonne", "kaayo" est "très", "ang pagkaon" est "la nourriture"' } + ], + 'Essen & Trinken': [ + { bisaya: 'Kan-on', native: 'Riz', explanation: '"Kan-on" est le mot de base pour "riz"' }, + { bisaya: 'Tubig', native: 'Eau', explanation: '"Tubig" signifie "eau"' }, + { bisaya: 'Pan', native: 'Pain', explanation: '"Pan" signifie "pain"' }, + { bisaya: 'Isda', native: 'Poisson', explanation: '"Isda" signifie "poisson"' }, + { bisaya: 'Manok', native: 'Poulet', explanation: '"Manok" signifie "poulet"' }, + { bisaya: 'Baboy', native: 'Porc', explanation: '"Baboy" signifie "porc"' }, + { bisaya: 'Gulay', native: 'Légumes', explanation: '"Gulay" signifie "légumes"' }, + { bisaya: 'Prutas', native: 'Fruit', explanation: '"Prutas" signifie "fruit"' }, + { bisaya: 'Gatas', native: 'Lait', explanation: '"Gatas" signifie "lait"' }, + { bisaya: 'Kape', native: 'Café', explanation: '"Kape" signifie "café"' }, + { bisaya: 'Tsa', native: 'Thé', explanation: '"Tsa" signifie "thé"' }, + { bisaya: 'Asin', native: 'Sel', explanation: '"Asin" signifie "sel"' }, + { bisaya: 'Asukar', native: 'Sucre', explanation: '"Asukar" signifie "sucre"' }, + { bisaya: 'Tinapay', native: 'Pain (alternatif)', explanation: '"Tinapay" est un terme alternatif pour "pain"' }, + { bisaya: 'Bugas', native: 'Riz (cru)', explanation: '"Bugas" est riz cru, "kan-on" est riz cuit' } + ] + }, + 'Italienisch': { + 'Essen & Fürsorge': [ + { bisaya: 'Gutom na ko.', native: 'Ho fame.', explanation: '"Gutom" significa "fame", "na" è "già", "ko" è "io"' }, + { bisaya: 'Gihikap ko.', native: 'Ho sete.', explanation: '"Gihikap" significa "sete", "ko" è "io"' }, + { bisaya: 'Gusto ka mokaon?', native: 'Vuoi mangiare?', explanation: '"Gusto" significa "volere", "ka" è "tu", "mokaon" è "mangiare"' }, + { bisaya: 'Oo, gusto ko.', native: 'Sì, voglio.', explanation: '"Oo" è "Sì", "gusto ko" è "voglio"' }, + { bisaya: 'Unsa ang gusto nimo?', native: 'Cosa vuoi?', explanation: '"Unsa" è "Cosa", "ang" è articolo, "gusto nimo" è "vuoi"' }, + { bisaya: 'Gusto ko ug kan-on.', native: 'Voglio riso.', explanation: '"Gusto ko" è "voglio", "ug kan-on" è "riso"' }, + { bisaya: 'Palihug, hatagi ko ug tubig.', native: 'Per favore, dammi acqua.', explanation: '"Palihug" è "Per favore", "hatagi" è "dare", "ko" è "mi", "ug tubig" è "acqua"' }, + { bisaya: 'Salamat sa pagkaon.', native: 'Grazie per il cibo.', explanation: '"Salamat" è "Grazie", "sa pagkaon" è "per il cibo"' }, + { bisaya: 'Lami kaayo!', native: 'Molto delizioso!', explanation: '"Lami" significa "delizioso", "kaayo" è "molto"' }, + { bisaya: 'Busog na ko.', native: 'Sono sazio.', explanation: '"Busog" significa "sazio", "na" è "già", "ko" è "io"' }, + { bisaya: 'Kumusta ang pagkaon?', native: 'Com\'è il cibo?', explanation: '"Kumusta" è "Come", "ang pagkaon" è "il cibo"' }, + { bisaya: 'Maayo kaayo ang pagkaon.', native: 'Il cibo è molto buono.', explanation: '"Maayo" è "buono", "kaayo" è "molto", "ang pagkaon" è "il cibo"' } + ], + 'Essen & Trinken': [ + { bisaya: 'Kan-on', native: 'Riso', explanation: '"Kan-on" è la parola base per "riso"' }, + { bisaya: 'Tubig', native: 'Acqua', explanation: '"Tubig" significa "acqua"' }, + { bisaya: 'Pan', native: 'Pane', explanation: '"Pan" significa "pane"' }, + { bisaya: 'Isda', native: 'Pesce', explanation: '"Isda" significa "pesce"' }, + { bisaya: 'Manok', native: 'Pollo', explanation: '"Manok" significa "pollo"' }, + { bisaya: 'Baboy', native: 'Maiale', explanation: '"Baboy" significa "maiale"' }, + { bisaya: 'Gulay', native: 'Verdura', explanation: '"Gulay" significa "verdura"' }, + { bisaya: 'Prutas', native: 'Frutta', explanation: '"Prutas" significa "frutta"' }, + { bisaya: 'Gatas', native: 'Latte', explanation: '"Gatas" significa "latte"' }, + { bisaya: 'Kape', native: 'Caffè', explanation: '"Kape" significa "caffè"' }, + { bisaya: 'Tsa', native: 'Tè', explanation: '"Tsa" significa "tè"' }, + { bisaya: 'Asin', native: 'Sale', explanation: '"Asin" significa "sale"' }, + { bisaya: 'Asukar', native: 'Zucchero', explanation: '"Asukar" significa "zucchero"' }, + { bisaya: 'Tinapay', native: 'Pane (alternativo)', explanation: '"Tinapay" è un termine alternativo per "pane"' }, + { bisaya: 'Bugas', native: 'Riso (crudo)', explanation: '"Bugas" è riso crudo, "kan-on" è riso cotto' } + ] + }, + 'Portugiesisch': { + 'Essen & Fürsorge': [ + { bisaya: 'Gutom na ko.', native: 'Tenho fome.', explanation: '"Gutom" significa "fome", "na" é "já", "ko" é "eu"' }, + { bisaya: 'Gihikap ko.', native: 'Tenho sede.', explanation: '"Gihikap" significa "sede", "ko" é "eu"' }, + { bisaya: 'Gusto ka mokaon?', native: 'Quer comer?', explanation: '"Gusto" significa "querer", "ka" é "você", "mokaon" é "comer"' }, + { bisaya: 'Oo, gusto ko.', native: 'Sim, quero.', explanation: '"Oo" é "Sim", "gusto ko" é "quero"' }, + { bisaya: 'Unsa ang gusto nimo?', native: 'O que você quer?', explanation: '"Unsa" é "O que", "ang" é artigo, "gusto nimo" é "você quer"' }, + { bisaya: 'Gusto ko ug kan-on.', native: 'Quero arroz.', explanation: '"Gusto ko" é "quero", "ug kan-on" é "arroz"' }, + { bisaya: 'Palihug, hatagi ko ug tubig.', native: 'Por favor, me dê água.', explanation: '"Palihug" é "Por favor", "hatagi" é "dar", "ko" é "me", "ug tubig" é "água"' }, + { bisaya: 'Salamat sa pagkaon.', native: 'Obrigado pela comida.', explanation: '"Salamat" é "Obrigado", "sa pagkaon" é "pela comida"' }, + { bisaya: 'Lami kaayo!', native: 'Muito delicioso!', explanation: '"Lami" significa "delicioso", "kaayo" é "muito"' }, + { bisaya: 'Busog na ko.', native: 'Estou cheio.', explanation: '"Busog" significa "cheio", "na" é "já", "ko" é "eu"' }, + { bisaya: 'Kumusta ang pagkaon?', native: 'Como está a comida?', explanation: '"Kumusta" é "Como", "ang pagkaon" é "a comida"' }, + { bisaya: 'Maayo kaayo ang pagkaon.', native: 'A comida está muito boa.', explanation: '"Maayo" é "boa", "kaayo" é "muito", "ang pagkaon" é "a comida"' } + ], + 'Essen & Trinken': [ + { bisaya: 'Kan-on', native: 'Arroz', explanation: '"Kan-on" é a palavra básica para "arroz"' }, + { bisaya: 'Tubig', native: 'Água', explanation: '"Tubig" significa "água"' }, + { bisaya: 'Pan', native: 'Pão', explanation: '"Pan" significa "pão"' }, + { bisaya: 'Isda', native: 'Peixe', explanation: '"Isda" significa "peixe"' }, + { bisaya: 'Manok', native: 'Frango', explanation: '"Manok" significa "frango"' }, + { bisaya: 'Baboy', native: 'Porco', explanation: '"Baboy" significa "porco"' }, + { bisaya: 'Gulay', native: 'Legumes', explanation: '"Gulay" significa "legumes"' }, + { bisaya: 'Prutas', native: 'Fruta', explanation: '"Prutas" significa "fruta"' }, + { bisaya: 'Gatas', native: 'Leite', explanation: '"Gatas" significa "leite"' }, + { bisaya: 'Kape', native: 'Café', explanation: '"Kape" significa "café"' }, + { bisaya: 'Tsa', native: 'Chá', explanation: '"Tsa" significa "chá"' }, + { bisaya: 'Asin', native: 'Sal', explanation: '"Asin" significa "sal"' }, + { bisaya: 'Asukar', native: 'Açúcar', explanation: '"Asukar" significa "açúcar"' }, + { bisaya: 'Tinapay', native: 'Pão (alternativo)', explanation: '"Tinapay" é um termo alternativo para "pão"' }, + { bisaya: 'Bugas', native: 'Arroz (cru)', explanation: '"Bugas" é arroz cru, "kan-on" é arroz cozido' } + ] + }, + 'Tagalog': { + 'Essen & Fürsorge': [ + { bisaya: 'Gutom na ko.', native: 'Gutom na ako.', explanation: '"Gutom" ay "gutom", "na" ay "na", "ko" ay "ako"' }, + { bisaya: 'Gihikap ko.', native: 'Nauuhaw ako.', explanation: '"Gihikap" ay "nauuhaw", "ko" ay "ako"' }, + { bisaya: 'Gusto ka mokaon?', native: 'Gusto mo bang kumain?', explanation: '"Gusto" ay "gusto", "ka" ay "mo", "mokaon" ay "kumain"' }, + { bisaya: 'Oo, gusto ko.', native: 'Oo, gusto ko.', explanation: '"Oo" ay "Oo", "gusto ko" ay "gusto ko"' }, + { bisaya: 'Unsa ang gusto nimo?', native: 'Ano ang gusto mo?', explanation: '"Unsa" ay "Ano", "ang" ay "ang", "gusto nimo" ay "gusto mo"' }, + { bisaya: 'Gusto ko ug kan-on.', native: 'Gusto ko ng kanin.', explanation: '"Gusto ko" ay "gusto ko", "ug kan-on" ay "kanin"' }, + { bisaya: 'Palihug, hatagi ko ug tubig.', native: 'Pakiusap, bigyan mo ako ng tubig.', explanation: '"Palihug" ay "Pakiusap", "hatagi" ay "bigyan", "ko" ay "ako", "ug tubig" ay "tubig"' }, + { bisaya: 'Salamat sa pagkaon.', native: 'Salamat sa pagkain.', explanation: '"Salamat" ay "Salamat", "sa pagkaon" ay "sa pagkain"' }, + { bisaya: 'Lami kaayo!', native: 'Masarap talaga!', explanation: '"Lami" ay "masarap", "kaayo" ay "talaga"' }, + { bisaya: 'Busog na ko.', native: 'Busog na ako.', explanation: '"Busog" ay "busog", "na" ay "na", "ko" ay "ako"' }, + { bisaya: 'Kumusta ang pagkaon?', native: 'Kumusta ang pagkain?', explanation: '"Kumusta" ay "Kumusta", "ang pagkaon" ay "ang pagkain"' }, + { bisaya: 'Maayo kaayo ang pagkaon.', native: 'Mabuti talaga ang pagkain.', explanation: '"Maayo" ay "mabuti", "kaayo" ay "talaga", "ang pagkaon" ay "ang pagkain"' } + ], + 'Essen & Trinken': [ + { bisaya: 'Kan-on', native: 'Kanin', explanation: '"Kan-on" ay ang salitang base para sa "kanin"' }, + { bisaya: 'Tubig', native: 'Tubig', explanation: '"Tubig" ay "tubig"' }, + { bisaya: 'Pan', native: 'Tinapay', explanation: '"Pan" ay "tinapay"' }, + { bisaya: 'Isda', native: 'Isda', explanation: '"Isda" ay "isda"' }, + { bisaya: 'Manok', native: 'Manok', explanation: '"Manok" ay "manok"' }, + { bisaya: 'Baboy', native: 'Baboy', explanation: '"Baboy" ay "baboy"' }, + { bisaya: 'Gulay', native: 'Gulay', explanation: '"Gulay" ay "gulay"' }, + { bisaya: 'Prutas', native: 'Prutas', explanation: '"Prutas" ay "prutas"' }, + { bisaya: 'Gatas', native: 'Gatas', explanation: '"Gatas" ay "gatas"' }, + { bisaya: 'Kape', native: 'Kape', explanation: '"Kape" ay "kape"' }, + { bisaya: 'Tsa', native: 'Tsa', explanation: '"Tsa" ay "tsa"' }, + { bisaya: 'Asin', native: 'Asin', explanation: '"Asin" ay "asin"' }, + { bisaya: 'Asukar', native: 'Asukal', explanation: '"Asukar" ay "asukal"' }, + { bisaya: 'Tinapay', native: 'Tinapay', explanation: '"Tinapay" ay "tinapay"' }, + { bisaya: 'Bugas', native: 'Bigas', explanation: '"Bugas" ay "bigas", "kan-on" ay "kanin"' } + ] + } +}; + +// Kombiniere alle Sprachen +const ALL_FOOD_CARE = { ...FOOD_CARE_CONVERSATIONS, ...ADDITIONAL_LANGUAGES }; + +async function findOrCreateSystemUser() { + let systemUser = await User.findOne({ + where: { + username: { [Op.in]: ['system', 'admin', 'System', 'Admin'] } + } + }); + + if (!systemUser) { + console.error('❌ System-Benutzer nicht gefunden.'); + throw new Error('System user not found'); + } + + return systemUser; +} + +async function updateFoodCareExercises() { + await sequelize.authenticate(); + console.log('Datenbankverbindung erfolgreich hergestellt.\n'); + + const systemUser = await findOrCreateSystemUser(); + console.log(`Verwende System-Benutzer: ${systemUser.username} (ID: ${systemUser.id})\n`); + + // Finde alle Bisaya-Kurse + const [bisayaLanguage] = await sequelize.query( + `SELECT id FROM community.vocab_language WHERE name = 'Bisaya' LIMIT 1`, + { + type: sequelize.QueryTypes.SELECT + } + ); + + if (!bisayaLanguage) { + console.error('❌ Bisaya-Sprache nicht gefunden.'); + return; + } + + const courses = await VocabCourse.findAll({ + where: { languageId: bisayaLanguage.id }, + include: [ + { + model: sequelize.models.VocabLanguage, + as: 'nativeLanguage', + attributes: ['name'] + } + ] + }); + + console.log(`Gefunden: ${courses.length} Bisaya-Kurse\n`); + + let totalExercisesCreated = 0; + let totalLessonsUpdated = 0; + + for (const course of courses) { + console.log(`📚 Kurs: ${course.title} (ID: ${course.id})`); + const nativeLangName = course.nativeLanguage?.name || 'Deutsch'; + console.log(` Muttersprache: ${nativeLangName}`); + + // Finde "Essen & Fürsorge" und "Essen & Trinken" Lektionen + const lessons = await VocabCourseLesson.findAll({ + where: { + courseId: course.id, + title: ['Essen & Fürsorge', 'Essen & Trinken'] + }, + order: [['lessonNumber', 'ASC']] + }); + + console.log(` ${lessons.length} Lektion(en) gefunden\n`); + + for (const lesson of lessons) { + const conversations = ALL_FOOD_CARE[nativeLangName]?.[lesson.title]; + + if (!conversations || conversations.length === 0) { + console.log(` ⚠️ Lektion ${lesson.lessonNumber}: "${lesson.title}" - keine Übungen für Muttersprache "${nativeLangName}" definiert`); + continue; + } + + // Lösche bestehende Übungen + const deletedCount = await VocabGrammarExercise.destroy({ + where: { lessonId: lesson.id } + }); + + console.log(` 🗑️ Lektion ${lesson.lessonNumber}: "${lesson.title}" - ${deletedCount} alte Übung(en) gelöscht`); + + // Erstelle neue Übungen basierend auf dem Lektionstyp + let exerciseNumber = 1; + + if (lesson.title === 'Essen & Fürsorge') { + // Gesprächsübungen für "Essen & Fürsorge" + for (const conv of conversations) { + // Multiple Choice: Übersetzung von Muttersprache zu Bisaya + await VocabGrammarExercise.create({ + lessonId: lesson.id, + exerciseTypeId: 2, // multiple_choice + exerciseNumber: exerciseNumber++, + title: `Wie sagt man "${conv.native}"?`, + instruction: 'Wähle die richtige Übersetzung.', + questionData: JSON.stringify({ + type: 'multiple_choice', + question: `Wie sagt man "${conv.native}" auf Bisaya?`, + options: [ + conv.bisaya, + conversations[(exerciseNumber - 2 + 1) % conversations.length]?.bisaya || 'Salamat', + conversations[(exerciseNumber - 2 + 2) % conversations.length]?.bisaya || 'Maayo', + conversations[(exerciseNumber - 2 + 3) % conversations.length]?.bisaya || 'Palihug' + ] + }), + answerData: JSON.stringify({ + type: 'multiple_choice', + correctAnswer: 0 + }), + explanation: conv.explanation, + createdByUserId: course.ownerUserId || systemUser.id + }); + totalExercisesCreated++; + + // Multiple Choice: Übersetzung von Bisaya zu Muttersprache + await VocabGrammarExercise.create({ + lessonId: lesson.id, + exerciseTypeId: 2, // multiple_choice + exerciseNumber: exerciseNumber++, + title: `Was bedeutet "${conv.bisaya}"?`, + instruction: 'Wähle die richtige Übersetzung.', + questionData: JSON.stringify({ + type: 'multiple_choice', + question: `Was bedeutet "${conv.bisaya}"?`, + options: [ + conv.native, + conversations[(exerciseNumber - 3 + 1) % conversations.length]?.native || 'Danke', + conversations[(exerciseNumber - 3 + 2) % conversations.length]?.native || 'Bitte', + conversations[(exerciseNumber - 3 + 3) % conversations.length]?.native || 'Gut' + ] + }), + answerData: JSON.stringify({ + type: 'multiple_choice', + correctAnswer: 0 + }), + explanation: conv.explanation, + createdByUserId: course.ownerUserId || systemUser.id + }); + totalExercisesCreated++; + } + + // Transformation-Übungen + const selectedConvs = conversations.slice(0, 3); + for (const conv of selectedConvs) { + await VocabGrammarExercise.create({ + lessonId: lesson.id, + exerciseTypeId: 4, // transformation + exerciseNumber: exerciseNumber++, + title: `Übersetze: "${conv.native}"`, + instruction: 'Übersetze den Satz ins Bisaya.', + questionData: JSON.stringify({ + type: 'transformation', + text: conv.native, + sourceLanguage: nativeLangName, + targetLanguage: 'Bisaya' + }), + answerData: JSON.stringify({ + type: 'transformation', + correct: conv.bisaya, + alternatives: [] + }), + explanation: conv.explanation, + createdByUserId: course.ownerUserId || systemUser.id + }); + totalExercisesCreated++; + } + } else if (lesson.title === 'Essen & Trinken') { + // Vokabular-Übungen für "Essen & Trinken" + for (const vocab of conversations) { + // Multiple Choice: Muttersprache -> Bisaya + await VocabGrammarExercise.create({ + lessonId: lesson.id, + exerciseTypeId: 2, // multiple_choice + exerciseNumber: exerciseNumber++, + title: `Wie sagt man "${vocab.native}"?`, + instruction: 'Wähle die richtige Übersetzung.', + questionData: JSON.stringify({ + type: 'multiple_choice', + question: `Wie sagt man "${vocab.native}" auf Bisaya?`, + options: [ + vocab.bisaya, + conversations[(exerciseNumber - 2 + 1) % conversations.length]?.bisaya || 'Salamat', + conversations[(exerciseNumber - 2 + 2) % conversations.length]?.bisaya || 'Maayo', + conversations[(exerciseNumber - 2 + 3) % conversations.length]?.bisaya || 'Palihug' + ] + }), + answerData: JSON.stringify({ + type: 'multiple_choice', + correctAnswer: 0 + }), + explanation: vocab.explanation, + createdByUserId: course.ownerUserId || systemUser.id + }); + totalExercisesCreated++; + + // Multiple Choice: Bisaya -> Muttersprache + await VocabGrammarExercise.create({ + lessonId: lesson.id, + exerciseTypeId: 2, // multiple_choice + exerciseNumber: exerciseNumber++, + title: `Was bedeutet "${vocab.bisaya}"?`, + instruction: 'Wähle die richtige Übersetzung.', + questionData: JSON.stringify({ + type: 'multiple_choice', + question: `Was bedeutet "${vocab.bisaya}"?`, + options: [ + vocab.native, + conversations[(exerciseNumber - 3 + 1) % conversations.length]?.native || 'Danke', + conversations[(exerciseNumber - 3 + 2) % conversations.length]?.native || 'Bitte', + conversations[(exerciseNumber - 3 + 3) % conversations.length]?.native || 'Gut' + ] + }), + answerData: JSON.stringify({ + type: 'multiple_choice', + correctAnswer: 0 + }), + explanation: vocab.explanation, + createdByUserId: course.ownerUserId || systemUser.id + }); + totalExercisesCreated++; + } + } + } + + console.log(` ✅ ${lessons.length} Lektion(en) aktualisiert\n`); + totalLessonsUpdated += lessons.length; + } + + console.log(`\n🎉 Zusammenfassung:`); + console.log(` ${totalLessonsUpdated} Lektionen aktualisiert`); + console.log(` ${totalExercisesCreated} neue Grammatik-Übungen erstellt`); +} + +updateFoodCareExercises() + .then(() => { + sequelize.close(); + process.exit(0); + }) + .catch((error) => { + console.error('❌ Fehler:', error); + sequelize.close(); + process.exit(1); + }); diff --git a/backend/scripts/update-survival-sentences-exercises.js b/backend/scripts/update-survival-sentences-exercises.js index f8df321..71e520c 100755 --- a/backend/scripts/update-survival-sentences-exercises.js +++ b/backend/scripts/update-survival-sentences-exercises.js @@ -124,6 +124,81 @@ const SURVIVAL_EXERCISES = { }, explanation: '"Pasensya" bedeutet "Entschuldigung" oder "Entschuldige bitte" - wichtig für höfliche Kommunikation.' }, + { + exerciseTypeId: 2, // multiple_choice + title: 'Wie sagt man "Was ist das?"?', + instruction: 'Wähle die richtige Frage aus.', + questionData: { + type: 'multiple_choice', + question: 'Wie sagt man "Was ist das?" auf Bisaya?', + options: ['Unsa ni?', 'Asa ni?', 'Tagpila ni?', 'Kinsa ni?'] + }, + answerData: { + type: 'multiple_choice', + correctAnswer: 0 + }, + explanation: '"Unsa ni?" bedeutet "Was ist das?" - "Unsa" = "Was", "ni" = "das".' + }, + { + exerciseTypeId: 2, // multiple_choice + title: 'Wie sagt man "Bitte langsam"?', + instruction: 'Wähle die richtige Bitte aus.', + questionData: { + type: 'multiple_choice', + question: 'Wie sagt man "Bitte langsam" auf Bisaya?', + options: ['Hinay-hinay lang', 'Palihug lang', 'Maayo lang', 'Salamat lang'] + }, + answerData: { + type: 'multiple_choice', + correctAnswer: 0 + }, + explanation: '"Hinay-hinay lang" bedeutet "Bitte langsam" - sehr wichtig, wenn jemand zu schnell spricht!' + }, + { + exerciseTypeId: 2, // multiple_choice + title: 'Wie sagt man "Ich spreche kein Bisaya"?', + instruction: 'Wähle die richtige Aussage aus.', + questionData: { + type: 'multiple_choice', + question: 'Wie sagt man "Ich spreche kein Bisaya" auf Bisaya?', + options: ['Dili ko mag-Bisaya', 'Wala ko mag-Bisaya', 'Maayo ko mag-Bisaya', 'Salamat ko mag-Bisaya'] + }, + answerData: { + type: 'multiple_choice', + correctAnswer: 0 + }, + explanation: '"Dili ko mag-Bisaya" bedeutet "Ich spreche kein Bisaya" - nützlich, um zu erklären, dass du noch lernst.' + }, + { + exerciseTypeId: 2, // multiple_choice + title: 'Wie sagt man "Kannst du das aufschreiben?"?', + instruction: 'Wähle die richtige Bitte aus.', + questionData: { + type: 'multiple_choice', + question: 'Wie sagt man "Kannst du das aufschreiben?" auf Bisaya?', + options: ['Palihug isulat ni', 'Palihug basahon ni', 'Palihug sulaton ni', 'Palihug pakigamit ni'] + }, + answerData: { + type: 'multiple_choice', + correctAnswer: 0 + }, + explanation: '"Palihug isulat ni" bedeutet "Bitte schreibe das auf" - hilfreich beim Lernen neuer Wörter.' + }, + { + exerciseTypeId: 2, // multiple_choice + title: 'Wie sagt man "Ich bin verloren"?', + instruction: 'Wähle die richtige Aussage aus.', + questionData: { + type: 'multiple_choice', + question: 'Wie sagt man "Ich bin verloren" auf Bisaya?', + options: ['Nawala ko', 'Naa ko', 'Maayo ko', 'Salamat ko'] + }, + answerData: { + type: 'multiple_choice', + correctAnswer: 0 + }, + explanation: '"Nawala ko" bedeutet "Ich bin verloren" - wichtig, wenn du Hilfe brauchst.' + }, { exerciseTypeId: 1, // gap_fill title: 'Wichtige Fragen bilden', @@ -139,9 +214,86 @@ const SURVIVAL_EXERCISES = { }, explanation: '"Tagpila" = "Wie viel", "Unsa" = "Was", "Hinay-hinay lang" = "Bitte langsam".' }, + { + exerciseTypeId: 1, // gap_fill + title: 'Überlebenssätze vervollständigen', + instruction: 'Fülle die Lücken mit den richtigen Wörtern.', + questionData: { + type: 'gap_fill', + text: 'Palihug {gap} ni (Bitte schreibe das auf) | {gap} ko (Ich bin verloren) | Dili ko {gap} (Ich spreche kein Bisaya)', + gaps: 3 + }, + answerData: { + type: 'gap_fill', + answers: ['isulat', 'Nawala', 'mag-Bisaya'] + }, + explanation: '"isulat" = "aufschreiben", "Nawala" = "verloren", "mag-Bisaya" = "Bisaya sprechen".' + }, + { + exerciseTypeId: 2, // multiple_choice + title: 'Was bedeutet "Tagpila"?', + instruction: 'Wähle die richtige Bedeutung aus.', + questionData: { + type: 'multiple_choice', + question: 'Was bedeutet "Tagpila"?', + options: ['Wie viel', 'Was', 'Wo', 'Wer'] + }, + answerData: { + type: 'multiple_choice', + correctAnswer: 0 + }, + explanation: '"Tagpila" bedeutet "Wie viel" und wird verwendet, um nach Preisen zu fragen.' + }, + { + exerciseTypeId: 2, // multiple_choice + title: 'Was bedeutet "Pasensya"?', + instruction: 'Wähle die richtige Bedeutung aus.', + questionData: { + type: 'multiple_choice', + question: 'Was bedeutet "Pasensya"?', + options: ['Entschuldigung', 'Danke', 'Bitte', 'Gut'] + }, + answerData: { + type: 'multiple_choice', + correctAnswer: 0 + }, + explanation: '"Pasensya" bedeutet "Entschuldigung" oder "Entschuldige bitte" - wichtig für höfliche Kommunikation.' + }, + { + exerciseTypeId: 2, // multiple_choice + title: 'Was bedeutet "Hinay-hinay lang"?', + instruction: 'Wähle die richtige Bedeutung aus.', + questionData: { + type: 'multiple_choice', + question: 'Was bedeutet "Hinay-hinay lang"?', + options: ['Bitte langsam', 'Bitte schnell', 'Bitte laut', 'Bitte leise'] + }, + answerData: { + type: 'multiple_choice', + correctAnswer: 0 + }, + explanation: '"Hinay-hinay lang" bedeutet "Bitte langsam" - sehr wichtig, wenn jemand zu schnell spricht!' + }, { exerciseTypeId: 4, // transformation - title: 'Überlebenssätze übersetzen', + title: 'Überlebenssätze übersetzen - Einkaufen', + instruction: 'Übersetze den Satz ins Bisaya.', + questionData: { + type: 'transformation', + text: 'Wie viel kostet das?', + sourceLanguage: 'Deutsch', + targetLanguage: 'Bisaya' + }, + answerData: { + type: 'transformation', + correct: 'Tagpila ni?', + alternatives: ['Tagpila kini?', 'Pila ni?'] + }, + explanation: '"Tagpila ni?" bedeutet "Wie viel kostet das?" - sehr nützlich beim Einkaufen!' + }, + { + exerciseTypeId: 4, // transformation + title: 'Überlebenssätze übersetzen - Kommunikation', instruction: 'Übersetze den Satz ins Bisaya.', questionData: { type: 'transformation', @@ -155,6 +307,23 @@ const SURVIVAL_EXERCISES = { alternatives: ['Wala ko mag-Bisaya', 'Dili ko makasabot Bisaya'] }, explanation: '"Dili ko mag-Bisaya" bedeutet "Ich spreche kein Bisaya" - nützlich, um zu erklären, dass du noch lernst.' + }, + { + exerciseTypeId: 4, // transformation + title: 'Überlebenssätze übersetzen - Hilfe', + instruction: 'Übersetze den Satz ins Bisaya.', + questionData: { + type: 'transformation', + text: 'Ich bin verloren', + sourceLanguage: 'Deutsch', + targetLanguage: 'Bisaya' + }, + answerData: { + type: 'transformation', + correct: 'Nawala ko', + alternatives: ['Nawala ako', 'Nawala na ko'] + }, + explanation: '"Nawala ko" bedeutet "Ich bin verloren" - wichtig, wenn du Hilfe brauchst.' } ] }; diff --git a/frontend/src/i18n/locales/de/socialnetwork.json b/frontend/src/i18n/locales/de/socialnetwork.json index 57b244d..a8eba95 100644 --- a/frontend/src/i18n/locales/de/socialnetwork.json +++ b/frontend/src/i18n/locales/de/socialnetwork.json @@ -394,6 +394,9 @@ "correctAnswer": "Richtige Antwort", "alternatives": "Alternative Antworten", "notStarted": "Nicht begonnen", + "continueCurrentLesson": "Zur aktuellen Lektion", + "previousLessonRequired": "Bitte schließe zuerst die vorherige Lektion ab", + "lessonNumberShort": "#", "readingAloudInstruction": "Lies den Text laut vor. Klicke auf 'Aufnahme starten' und beginne zu sprechen.", "speakingFromMemoryInstruction": "Sprich frei aus dem Kopf. Verwende die angezeigten Schlüsselwörter.", "startRecording": "Aufnahme starten", diff --git a/frontend/src/i18n/locales/en/socialnetwork.json b/frontend/src/i18n/locales/en/socialnetwork.json index b36b620..77fa422 100644 --- a/frontend/src/i18n/locales/en/socialnetwork.json +++ b/frontend/src/i18n/locales/en/socialnetwork.json @@ -394,6 +394,9 @@ "correctAnswer": "Correct Answer", "alternatives": "Alternative Answers", "notStarted": "Not Started", + "continueCurrentLesson": "Continue Current Lesson", + "previousLessonRequired": "Please complete the previous lesson first", + "lessonNumberShort": "#", "readingAloudInstruction": "Read the text aloud. Click 'Start Recording' and begin speaking.", "speakingFromMemoryInstruction": "Speak freely from memory. Use the displayed keywords.", "startRecording": "Start Recording", diff --git a/frontend/src/views/social/VocabCourseView.vue b/frontend/src/views/social/VocabCourseView.vue index 9b6e9fa..2da6b4b 100644 --- a/frontend/src/views/social/VocabCourseView.vue +++ b/frontend/src/views/social/VocabCourseView.vue @@ -19,6 +19,11 @@
|
- |