diff --git a/frontend/src/views/social/VocabLessonView.vue b/frontend/src/views/social/VocabLessonView.vue
index 825ee24..8254864 100644
--- a/frontend/src/views/social/VocabLessonView.vue
+++ b/frontend/src/views/social/VocabLessonView.vue
@@ -3212,10 +3212,38 @@ export default {
},
formatGapFill(exercise) {
const qData = this.getQuestionData(exercise);
- if (!qData || !qData.text) return '';
-
- // Ersetze {gap} mit Platzhaltern
- return qData.text.replace(/\{gap\}/g, '_____');
+ const aData = this.getAnswerData(exercise);
+
+ // Bevorzugt: expliziter Lückentext
+ if (qData && qData.text) {
+ return qData.text.replace(/\{gap\}/g, '_____');
+ }
+
+ // Fallbacks: Frage-Text, Erklärung oder Titel anzeigen
+ let base = (qData && qData.question) ? String(qData.question) : '';
+ if (!base && exercise && exercise.explanation) base = String(exercise.explanation);
+ if (!base && exercise && exercise.title) base = String(exercise.title || '');
+
+ // Wenn noch nichts, aber answerData enthält Antworten, zeige Platzhalter für die Lücken
+ if (!base && aData) {
+ const answers = aData.answers || aData.correct || [];
+ const arr = Array.isArray(answers) ? answers : [answers];
+ if (arr.length > 0) {
+ // Zeige die erwarteten Wörter kurz im Kontext-Placeholder
+ return arr.map(() => '_____').join(' ');
+ }
+ }
+
+ // Wenn base vorhanden ist, versuche vorhandene {gap}-Marker zu ersetzen, sonst anhängen
+ if (base) {
+ if (base.includes('{gap}')) {
+ return base.replace(/\{gap\}/g, '_____');
+ }
+ // Keine Marker: füge eine Lücke am Ende an
+ return `${base} _____`;
+ }
+
+ return '';
},
getGapCount(exercise) {
const qData = this.getQuestionData(exercise);