Class_generator/english_exemple_commented.json
StillHammer fe7153d28b Fix compatibility system and improve UX
- Add intelligent content-game compatibility system with visual badges
- Fix Adventure Reader to work with Dragon's Pearl content structure
- Implement multi-column games grid for faster navigation
- Add pronunciation display for Chinese vocabulary and sentences
- Fix navigation breadcrumb to show proper hierarchy (Home > Levels > Content)
- Add back buttons to all navigation pages
- Improve JSONContentLoader to preserve story structure
- Add comprehensive debugging and diagnostic tools

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-18 19:29:21 +08:00

620 lines
28 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
// ========================================
// EDUCATIONAL CONTENT MODULE SPECIFICATION
// ========================================
// This JSON defines a complete content module for language learning applications.
// All fields are OPTIONAL unless explicitly marked as REQUIRED.
// Systems should gracefully handle missing fields and adapt functionality accordingly.
// === CORE METADATA (REQUIRED) ===
// Essential identification and configuration data
"id": "english_class_demo_complete_example", // REQUIRED: Unique identifier (lowercase, underscores)
"name": "English Class Demo - Complete Example", // REQUIRED: Human-readable display name
"description": "Comprehensive example showcasing all content structure possibilities", // REQUIRED: Brief description
"difficulty": 6, // REQUIRED: Integer 1-10 (1=absolute beginner, 10=native level)
"original_lang": "english", // REQUIRED: ISO language code of source content
"user_lang": "french", // REQUIRED: ISO language code for translations
"icon": "assets/icons/uk-flag.svg", // OPTIONAL: Path to icon file (relative or absolute)
"icon_fallback": "🇬🇧", // REQUIRED if icon specified: Emoji fallback for missing files
// === CLASSIFICATION SYSTEM ===
// Used for content discovery, filtering, and game compatibility assessment
"tags": [
// Content characteristics - systems can filter/search using these
"beginner-friendly", // Suitable for beginners (difficulty ≤ 4)
"audio-rich", // Contains significant audio content (>50% items have audio)
"grammar-focus", // Emphasizes grammar learning (has grammar section)
"cultural-content", // Includes cultural context (has cultural section)
"interactive", // Has interactive exercises (matching, corrections, etc.)
"daily-life", // Real-world applicable content
"conversation", // Dialogue-based learning (has dialogues section)
"multimedia" // Multiple content types (text, audio, visual)
],
// === LEARNING OBJECTIVES ===
// Skills and competencies this module addresses - used for progress tracking
"skills_covered": [
"vocabulary_recognition", // Identifying and understanding words
"vocabulary_production", // Using words correctly in context
"listening_comprehension", // Understanding spoken language
"reading_comprehension", // Understanding written text
"pronunciation", // Correct sound production
"grammar_application", // Using grammar rules correctly
"cultural_awareness", // Understanding cultural context
"conversation_skills", // Interactive dialogue ability
"translation", // Converting between languages
"pattern_recognition", // Identifying linguistic patterns
"error_correction", // Identifying and fixing mistakes
"audio_discrimination" // Distinguishing between sounds
],
// ========================================
// VOCABULARY SECTION - PROGRESSIVE COMPLEXITY
// ========================================
// Word definitions with varying levels of detail. Systems should adapt based on available data.
"vocabulary": {
// LEVEL 1: MINIMAL (Translation only)
// Simplest form - just word and translation string
// Usage: Basic vocabulary games, simple matching
"cat": "chat",
"dog": "chien",
"house": "maison",
// LEVEL 2: BASIC (Essential data)
// Translation + grammatical type
// Usage: Games that need word categorization
"book": {
"translation": "livre",
"type": "noun" // Values: noun, verb, adjective, adverb, greeting, number, etc.
},
"read": {
"translation": "lire",
"type": "verb"
},
// LEVEL 3: MEDIUM (Enhanced with media OR pronunciation)
// Add ONE media type: pronunciation OR image
// Usage: Games with visual or audio components
"apple": {
"translation": "pomme",
"type": "noun",
"pronunciation": "/ˈæp.əl/", // IPA phonetic notation (recommended format)
"image": "images/vocabulary/apple.jpg" // Path to image file
},
"beautiful": {
"translation": "beau/belle",
"type": "adjective",
"pronunciation": "/ˈbjuː.tɪ.fəl/",
"examples": ["The sunset is beautiful"] // Array of usage examples
},
// LEVEL 4: RICH (Multi-media)
// Multiple media types for enhanced learning
// Usage: Advanced vocabulary games, multimedia lessons
"elephant": {
"translation": "éléphant",
"type": "noun",
"pronunciation": "/ˈel.ɪ.fənt/",
"audio": "audio/vocabulary/elephant.mp3", // Audio pronunciation file
"image": "images/vocabulary/elephant.jpg", // Visual representation
"examples": [
"The elephant is huge",
"Elephants have good memory"
]
},
// LEVEL 5: COMPREHENSIVE (Full linguistic data)
// Maximum detail for advanced language learning
// Usage: Professional language learning, detailed grammar games
"run": {
"translation": "courir",
"type": "verb",
"pronunciation": "/rʌn/",
"audio": "audio/vocabulary/run.mp3",
"image": "images/vocabulary/run_action.gif", // Can be GIF for actions
"examples": [
"I run in the park every morning",
"She runs faster than me",
"They ran to catch the bus"
],
"grammarNotes": "Irregular verb: run/runs/running/ran/run", // Teaching notes
"conjugation": { // Verb forms for grammar games
"present": ["run", "runs"],
"past": "ran",
"participle": "run",
"continuous": "running"
},
"difficulty_context": "Physical action verb - easy to demonstrate" // Teaching hints
},
// LEVEL 6: ADVANCED (Cultural context)
// Includes cultural and contextual information
// Usage: Cultural awareness games, advanced language courses
"breakfast": {
"translation": "petit-déjeuner",
"type": "noun",
"pronunciation": "/ˈbrek.fəst/",
"audio": "audio/vocabulary/breakfast.mp3",
"image": "images/vocabulary/breakfast.jpg",
"examples": [
"I have breakfast at 7 AM",
"What did you have for breakfast?",
"Breakfast is the most important meal"
],
"cultural_note": "Traditional English breakfast includes eggs, bacon, beans, and toast"
}
},
// ========================================
// GRAMMAR SYSTEM - STRUCTURED LESSONS
// ========================================
// Step-by-step grammar instruction with alternating explanations and exercises
// NOTE: This system is for dedicated grammar games/apps, not general content games
"grammar": {
"present_simple_be": { // Lesson identifier (must be unique)
"id": "present_simple_be", // Same as key for validation
"title": "Present Simple - Verb 'to be'", // Display title
"difficulty": 3, // 1-10 scale
"prerequisite": null, // null = no prerequisite, or reference another lesson id
"estimated_time": 15, // Estimated minutes to complete
"learning_objectives": [ // Clear, measurable goals
"Conjugate 'to be' in present tense",
"Use 'to be' in affirmative sentences",
"Form questions with 'to be'"
],
// Sequential learning steps - MUST be in order
"steps": [
{
"type": "explanation", // Types: "explanation" or "exercise"
"order": 1, // Integer ordering (must be sequential)
"title": "Introduction to 'be'",
"content": "The verb 'to be' is the most important verb in English. It has three forms in present tense.",
"translation": "Le verbe 'être' est le verbe le plus important en anglais. Il a trois formes au présent.",
"examples": [ // Array of example objects
{ "original": "I am happy", "userLanguage": "Je suis heureux" },
{ "original": "You are smart", "userLanguage": "Tu es intelligent" },
{ "original": "She is tall", "userLanguage": "Elle est grande" }
]
},
{
"type": "exercise",
"order": 2,
"exercise_type": "multiple_choice", // Exercise types: multiple_choice, transformation, fill_blanks, classification, conjugation
"title": "Choose the correct form",
"questions": [ // Array of question objects
{
"question": "I ___ a student",
"options": ["am", "is", "are"], // Array of choices
"correct": "am", // Single correct answer
"explanation": "Use 'am' with 'I'" // Feedback for learner
},
{
"question": "She ___ my friend",
"options": ["am", "is", "are"],
"correct": "is",
"explanation": "Use 'is' with 'she', 'he', 'it'"
}
]
},
{
"type": "explanation",
"order": 3,
"title": "Negative forms",
"content": "To make negative sentences with 'be', add 'not' after the verb. We often use contractions.",
"translation": "Pour faire des phrases négatives avec 'être', ajoutez 'not' après le verbe. On utilise souvent des contractions.",
"examples": [
{
"original": "I am not tired",
"userLanguage": "Je ne suis pas fatigué",
"contraction": "I'm not tired" // Optional contraction form
}
]
},
{
"type": "exercise",
"order": 4,
"exercise_type": "transformation",
"title": "Make these sentences negative",
"questions": [
{
"original": "I am busy", // Source sentence
"correct": "I am not busy", // Primary correct answer
"alternative_correct": ["I'm not busy"] // Array of acceptable alternatives
}
]
}
],
// Lesson summary and reinforcement
"summary": {
"key_points": [ // Main takeaways
"I am, you are, he/she/it is, we are, they are",
"Negative: add 'not' after 'be'",
"Questions: put 'be' before subject"
],
"common_mistakes": [ // Frequent errors with corrections
{
"incorrect": "I are happy",
"correct": "I am happy",
"explanation": "Use 'am' with 'I'"
}
]
}
}
},
// ========================================
// TEXT CONTENT - FLEXIBLE USAGE
// ========================================
// Text-based content that can optionally include exercises
"texts": [
{
"title": "My Daily Routine", // Display title
"content": "I wake up at 7 AM every day. First, I brush my teeth and take a shower...", // Main text
"translation": "Je me réveille à 7h tous les jours. D'abord, je me brosse les dents...", // Full translation
// OPTIONAL: Add comprehension questions to any text
"questions": [
{
"question": "What time does the person wake up?",
"type": "multiple_choice", // Types: multiple_choice, ai_interpreted
"options": ["6 AM", "7 AM", "8 AM", "9 AM"],
"correctAnswer": "7 AM"
},
{
"question": "Describe the person's evening routine",
"type": "ai_interpreted", // Requires AI evaluation
"evaluationPrompt": "Check if answer mentions cooking dinner and watching TV" // Prompt for AI evaluator
}
],
// OPTIONAL: Add fill-in-the-blank exercises to any text
"fillInBlanks": [
{
"sentence": "I wake up ___ 7 AM every day",
"options": ["at", "in", "on"], // Multiple choice options
"correctAnswer": "at",
"explanation": "Use 'at' with specific times"
},
{
"sentence": "The routine is very ___",
"type": "open_ended", // Open-ended answer
"acceptedAnswers": ["good", "nice", "healthy", "regular"], // Acceptable answers
"aiPrompt": "Check if answer describes routine positively" // AI evaluation prompt
}
]
}
],
// ========================================
// AUDIO-ONLY CONTENT
// ========================================
// Pure listening exercises WITHOUT transcripts
// NOTE: Audio WITH text should go in texts[] or dialogues[] sections
"audio": [
{
"title": "Mystery Conversation - Restaurant",
"audioFile": "audio/listening/restaurant_sounds.mp3", // Audio file path
"type": "ambient_listening", // Types: ambient_listening, sound_identification, pronunciation_exercise
"description": "Listen to the ambient sounds and conversation", // Optional description
"questions": [ // Listening comprehension questions
{
"question": "Where does this conversation take place?",
"type": "multiple_choice",
"options": ["Restaurant", "Office", "School", "Park"],
"correctAnswer": "Restaurant"
},
{
"question": "How many people are speaking?",
"type": "ai_interpreted",
"evaluationPrompt": "Accept numeric answers indicating number of distinct voices"
}
]
},
{
"title": "Pronunciation Discrimination",
"audioFile": "audio/pronunciation/minimal_pairs.mp3",
"type": "pronunciation_exercise",
"description": "Listen to similar sounding words and identify differences",
"word_pairs": [ // For pronunciation exercises
["ship", "sheep"],
["live", "leave"],
["cat", "cut"]
]
}
],
// ========================================
// CULTURAL CONTENT - RICH CONTEXT
// ========================================
// Cultural material with educational value and context
"cultural": {
// Poetry and literary works
"poems": [
{
"title": "Roses Are Red",
"content": "Roses are red,\nViolets are blue,\nSugar is sweet,\nAnd so are you.",
"translation": "Les roses sont rouges,\nLes violettes sont bleues...",
"audio": "audio/poems/roses.mp3", // Optional audio recitation
"image": "images/cultural/roses_poem_illustration.jpg", // Optional illustration
"type": "nursery_rhyme", // Types: nursery_rhyme, classic_poem, song, etc.
"cultural_context": "Traditional English nursery rhyme pattern...",
"learning_focus": ["rhyme_patterns", "basic_vocabulary", "rhythm"] // Educational objectives
}
],
// Proverbs and sayings
"proverbs": [
{
"original": "The early bird catches the worm",
"userLanguage": "L'avenir appartient à ceux qui se lèvent tôt",
"meaning": "People who wake up early and start working have better chances of success",
"image": "images/cultural/early_bird_illustration.jpg",
"cultural_context": "Common English saying emphasizing the value of being proactive...",
"equivalent_proverbs": { // Cross-cultural equivalents
"french": "L'avenir appartient à ceux qui se lèvent tôt",
"literal": "Le premier oiseau attrape le ver"
}
}
],
// Unified cultural facts system
"culture_facts": [
{
"name": "Tea Time",
"category": "tradition", // Categories: tradition, holiday, food, custom, etc.
"description": "Traditional British custom of drinking tea in the afternoon, usually around 4 PM",
"translation": "L'heure du thé - tradition britannique...",
"image": "images/cultural/tea_time.jpg",
"cultural_significance": "Social ritual that brings people together...",
"vocabulary_related": ["tea", "biscuit", "afternoon", "tradition", "social"], // Related vocabulary
"region": "uk" // Geographic association (uk, us, global, etc.)
},
{
"name": "Christmas",
"category": "holiday",
"date": "December 25th", // Optional date field for holidays
"description": "Major Christian holiday celebrating the birth of Jesus Christ",
"translation": "Noël - grande fête chrétienne...",
"image": "images/cultural/christmas_celebration.jpg",
"customs": ["gift_giving", "family_gatherings", "christmas_tree", "caroling"], // Associated customs
"vocabulary_related": ["Christmas", "gift", "tree", "family", "celebration"],
"region": "global"
},
{
"name": "Fish and Chips",
"category": "food",
"description": "Traditional British dish of battered fish with fried potatoes",
"translation": "Poisson-frites - plat britannique traditionnel...",
"image": "images/cultural/fish_and_chips.jpg",
"cultural_context": "Popular working-class meal, often served in newspaper wrapping",
"vocabulary_related": ["fish", "chips", "batter", "traditional", "popular"],
"region": "uk",
"ingredients": ["fish", "potatoes", "batter", "oil"], // For food items
"typical_sides": ["mushy_peas", "tartar_sauce", "malt_vinegar"]
}
]
},
// ========================================
// SENTENCES WITH PARAMETERS
// ========================================
// Generic sentence structure used for various exercises including corrections
"sentences": [
{
"original": "Hello, how are you?", // Source language sentence
"userLanguage": "Bonjour, comment allez-vous?", // Target language translation
"type": "greeting", // Sentence classification
"formality": "neutral" // Additional parameter
},
{
"original": "I like to read books",
"userLanguage": "J'aime lire des livres",
"type": "preference_statement",
"tense": "present_simple"
},
// Sentences with correction exercise data
{
"original": "I am happy today", // CORRECT version
"userLanguage": "Je suis heureux aujourd'hui",
"type": "correction_target", // Indicates this is for correction exercises
"correction_data": {
"incorrect_versions": [ // Array of common mistakes
{
"text": "I are happy today", // Incorrect version
"error_type": "subject_verb_agreement", // Classification of error
"explanation": "Use 'am' with pronoun 'I', not 'are'",
"difficulty": 2 // Difficulty of catching this error (1-10)
},
{
"text": "I is happy today",
"error_type": "subject_verb_agreement",
"explanation": "Use 'am' with pronoun 'I', not 'is'",
"difficulty": 1 // Easier to spot
}
],
"grammar_focus": "be_verb_conjugation", // Grammar topic
"common_mistake": true // Boolean: is this a frequent error?
}
}
],
// ========================================
// MATCHING EXERCISES - DUAL SYSTEM
// ========================================
// Two types of matching exercises: traditional 2-column and flexible multi-column
"matching": [
// TYPE 1: Traditional two-column matching (backward compatibility)
{
"title": "Match Animals to Their Sounds",
"type": "two_column_matching", // Explicit type declaration
"leftColumn": ["Cat", "Dog", "Cow", "Bird"], // Left side items
"rightColumn": ["Woof", "Meow", "Tweet", "Moo"], // Right side items
"correctPairs": [ // Valid connections
{ "left": "Cat", "right": "Meow" },
{ "left": "Dog", "right": "Woof" },
{ "left": "Cow", "right": "Moo" },
{ "left": "Bird", "right": "Tweet" }
]
},
// TYPE 2: Multi-column matching (new flexible system)
{
"title": "Build Correct Sentences",
"type": "multi_column_matching", // Flexible N-column system
"columns": [ // Array of columns (minimum 2, no maximum)
{
"id": 1, // REQUIRED: Numeric identifier for referencing
"name": "Subject", // OPTIONAL: Display label (can be omitted)
"items": ["I", "She", "They", "We"] // REQUIRED: Items in this column
},
{
"id": 2,
"name": "Verb",
"items": ["am", "is", "are", "are"]
},
{
"id": 3,
"name": "Complement",
"items": ["happy", "a teacher", "students", "friends"]
}
],
"valid_combinations": [ // Valid combinations using column IDs
{"1": "I", "2": "am", "3": "happy"}, // References by column ID
{"1": "I", "2": "am", "3": "a teacher"},
{"1": "She", "2": "is", "3": "happy"},
{"1": "She", "2": "is", "3": "a teacher"},
{"1": "They", "2": "are", "3": "students"},
{"1": "They", "2": "are", "3": "friends"},
{"1": "We", "2": "are", "3": "students"},
{"1": "We", "2": "are", "3": "friends"}
]
},
// TYPE 2 Example without column names (demonstrates flexibility)
{
"title": "Match Country Information",
"type": "multi_column_matching",
"columns": [
{
"id": 1,
"name": "Country",
"items": ["France", "Spain", "Italy", "Germany"]
},
{
"id": 2,
"name": "Capital",
"items": ["Paris", "Madrid", "Rome", "Berlin"]
},
{
"id": 3,
// NO "name" field - demonstrates optional nature
"items": ["French", "Spanish", "Italian", "German"]
}
],
"valid_combinations": [
{"1": "France", "2": "Paris", "3": "French"},
{"1": "Spain", "2": "Madrid", "3": "Spanish"},
{"1": "Italy", "2": "Rome", "3": "Italian"},
{"1": "Germany", "2": "Berlin", "3": "German"}
]
}
],
// ========================================
// DIALOGUES - CONVERSATIONAL CONTENT
// ========================================
// Structured conversations between speakers
// NOTE: Audio WITH text belongs here, not in audio[] section
"dialogues": [
{
"title": "At the Restaurant", // Dialogue title
"conversation": [ // Array of turns in conversation
{
"speaker": "Waiter", // Speaker identification
"original": "Good evening! Welcome to our restaurant.",
"userLanguage": "Bonsoir! Bienvenue dans notre restaurant."
},
{
"speaker": "Customer",
"original": "Thank you. Can I see the menu please?",
"userLanguage": "Merci. Puis-je voir le menu s'il vous plaît?"
}
]
},
// Dialogue with synchronized audio
{
"title": "Daily Routine Conversation",
"audio": "audio/conversations/daily_routine.mp3", // Audio file with spoken dialogue
"conversation": [
{
"speaker": "A",
"original": "What time do you wake up?",
"userLanguage": "À quelle heure te réveilles-tu?",
"timestamp": 0.5 // OPTIONAL: Time in audio file (seconds)
},
{
"speaker": "B",
"original": "I usually wake up at 7 AM.",
"userLanguage": "Je me réveille habituellement à 7h.",
"timestamp": 3.2
}
]
}
]
// ========================================
// IMPLEMENTATION NOTES FOR AI SYSTEMS
// ========================================
/*
FIELD OPTIONALITY:
- All fields are optional unless marked REQUIRED
- Systems should gracefully handle missing fields
- Adapt functionality based on available data richness
VOCABULARY LEVELS:
- Level 1 (string): Basic games only
- Level 2-3 (basic object): Standard games
- Level 4-6 (rich object): Advanced features
EXERCISE TYPES:
- multiple_choice: Fixed options with single correct answer
- transformation: Convert one form to another
- fill_blanks: Complete sentences with missing words
- classification: Categorize items into groups
- conjugation: Verb form exercises
- ai_interpreted: Requires AI evaluation with prompt
AUDIO PLACEMENT:
- audio[]: ONLY for content without transcripts
- texts[]/dialogues[]: For content WITH transcripts
- vocabulary.*.audio: Individual word pronunciation
MATCHING SYSTEMS:
- two_column_matching: Traditional left-right matching
- multi_column_matching: Flexible N-column system with numeric IDs
CULTURAL CONTENT:
- poems[]: Literary works with cultural context
- proverbs[]: Sayings with cross-cultural equivalents
- culture_facts[]: Unified system for traditions, holidays, food, customs
ERROR HANDLING:
- Missing files (audio, images): Use fallbacks or skip features
- Invalid references: Ignore and continue with available content
- Malformed data: Log errors but don't crash, use defaults
EXTENSIBILITY:
- New exercise types can be added without breaking existing systems
- Additional fields can be added to any section
- New sections can be added at root level
- Systems should ignore unknown fields gracefully
*/
}