{ "id": "french", "name": "French", "nativeName": "Français", "flag": "🇫🇷", "units": [ { "id": "S1", "title": "Premiers mots", "description": "Your first French words", "icon": "hand.wave.fill", "lessons": [ { "id": "S1-L1", "title": "Bonjour et au revoir", "description": "Bonjour et au revoir", "exercises": [ { "id": "S1-L1-E1", "type": "listening", "prompt": "You hear a greeting — what did they say?", "correctAnswer": "Bonjour !", "options": [ "Pardon !", "Bonjour !", "Au revoir !", "Merci !" ], "targetLanguage": "Bonjour !" }, { "id": "S1-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Bonjour|Hello / Good day", "Bonsoir|Good evening", "Salut|Hi (informal)", "Au revoir|Goodbye" ] }, { "id": "S1-L1-E3", "type": "multipleChoice", "prompt": "A shopkeeper says 'Bonjour !' — you reply:", "correctAnswer": "Bonjour !", "options": [ "Pardon !", "Bonjour !", "Au revoir !", "Bonne nuit !" ], "targetLanguage": "Bonjour !" }, { "id": "S1-L1-E4", "type": "listening", "prompt": "Which is a formal farewell?", "correctAnswer": "Au revoir", "options": [ "Ciao", "Au revoir", "À plus", "Salut" ], "targetLanguage": "Au revoir" }, { "id": "S1-L1-E5", "type": "multipleChoice", "prompt": "It's 9 pm — which greeting fits?", "correctAnswer": "Bonsoir !", "options": [ "Au revoir !", "Salut !", "Bonsoir !", "Bonjour !" ], "targetLanguage": "Bonsoir !" }, { "id": "S1-L1-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "À bientôt|See you soon", "À demain|See you tomorrow", "Bonne nuit|Good night", "À tout à l'heure|See you later" ] } ] }, { "id": "S1-L2", "title": "Oui, non et les bases", "description": "Oui, non et les bases", "exercises": [ { "id": "S1-L2-E1", "type": "listening", "prompt": "Listen — is the speaker agreeing?", "correctAnswer": "Oui", "options": [ "Je ne sais pas", "Non", "Oui", "Peut-être" ], "targetLanguage": "Oui" }, { "id": "S1-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Oui|Yes", "Non|No", "Peut-être|Maybe", "Je ne sais pas|I don't know" ] }, { "id": "S1-L2-E3", "type": "multipleChoice", "prompt": "You didn't understand — you say:", "correctAnswer": "Je ne comprends pas.", "options": [ "De rien.", "Je ne comprends pas.", "Non merci.", "Oui !" ], "explanation": "Je ne comprends pas = I don't understand", "targetLanguage": "Je ne comprends pas." }, { "id": "S1-L2-E4", "type": "listening", "prompt": "Which means 'thank you'?", "correctAnswer": "Merci !", "options": [ "De rien !", "Bonjour !", "Merci !", "Pardon !" ], "targetLanguage": "Merci !" }, { "id": "S1-L2-E5", "type": "multipleChoice", "prompt": "Someone says 'Merci !' — you reply:", "correctAnswer": "De rien !", "options": [ "De rien !", "Oui !", "Merci !", "Au revoir !" ], "targetLanguage": "De rien !" }, { "id": "S1-L2-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Merci|Thank you", "De rien|You're welcome", "Pardon|Sorry / Excuse me", "S'il vous plaît|Please (formal)" ] } ] }, { "id": "S1-L3", "title": "Phrases d'urgence", "description": "Phrases d'urgence", "exercises": [ { "id": "S1-L3-E1", "type": "listening", "prompt": "Which means 'Help!'?", "correctAnswer": "Au secours !", "options": [ "Au secours !", "Attention !", "De rien !", "Pardon !" ], "targetLanguage": "Au secours !" }, { "id": "S1-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Au secours !|Help!", "Attention !|Watch out!", "Je suis désolé(e)|I'm sorry", "Je ne comprends pas|I don't understand" ] }, { "id": "S1-L3-E3", "type": "multipleChoice", "prompt": "You bump into someone:", "correctAnswer": "Pardon !", "options": [ "Pardon !", "Bonjour !", "De rien !", "Merci !" ], "targetLanguage": "Pardon !" }, { "id": "S1-L3-E4", "type": "multipleChoice", "prompt": "To get someone's attention politely:", "correctAnswer": "Excusez-moi !", "options": [ "Excusez-moi !", "Oui !", "Au secours !", "Au revoir !" ], "explanation": "Excusez-moi is the formal way to get attention", "targetLanguage": "Excusez-moi !" }, { "id": "S1-L3-E5", "type": "listening", "prompt": "Which means 'I'm sorry'?", "correctAnswer": "Je suis désolé(e)", "options": [ "Merci", "S'il vous plaît", "Je ne comprends pas", "Je suis désolé(e)" ], "targetLanguage": "Je suis désolé(e)" }, { "id": "S1-L3-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Pardon|Sorry (informal)", "Excusez-moi|Excuse me (formal)", "De rien|You're welcome", "Permettez-moi|Allow me / May I?" ] } ] }, { "id": "S1-L4", "title": "Premières questions", "description": "Premières questions", "exercises": [ { "id": "S1-L4-E1", "type": "listening", "prompt": "'Comment allez-vous ?' means:", "correctAnswer": "How are you? (formal)", "options": [ "What's your name?", "How are you? (formal)", "Where are you?", "How old are you?" ], "targetLanguage": "Comment allez-vous ?" }, { "id": "S1-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Comment allez-vous ?|How are you? (formal)", "Comment tu vas ?|How are you? (informal)", "Comment vous appelez-vous ?|What's your name? (formal)", "D'où venez-vous ?|Where are you from? (formal)" ] }, { "id": "S1-L4-E3", "type": "multipleChoice", "prompt": "'Comment allez-vous ?' — you feel great:", "correctAnswer": "Très bien, merci !", "options": [ "Très bien, merci !", "Mal, merci !", "Je ne comprends pas.", "Peut-être." ], "targetLanguage": "Très bien, merci !" }, { "id": "S1-L4-E4", "type": "listening", "prompt": "Which is a name question?", "correctAnswer": "Comment tu t'appelles ?", "options": [ "D'où tu viens ?", "Comment tu t'appelles ?", "Tu as quel âge ?", "Comment tu vas ?" ], "targetLanguage": "Comment tu t'appelles ?" }, { "id": "S1-L4-E5", "type": "multipleChoice", "prompt": "'D'où venez-vous ?' asks about:", "correctAnswer": "Where you're from", "options": [ "Where you're from", "How you feel", "Your age", "Your name" ], "targetLanguage": "D'où venez-vous ?" }, { "id": "S1-L4-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Très bien|Very well", "Bien|Well", "Comme ci comme ça|So-so", "Mal|Badly" ] } ] } ] }, { "id": "S2", "title": "Les nombres essentiels", "description": "Count, pay and understand prices", "icon": "number.circle.fill", "lessons": [ { "id": "S2-L1", "title": "1–10", "description": "1–10", "exercises": [ { "id": "S2-L1-E1", "type": "listening", "prompt": "Which number?", "correctAnswer": "trois", "options": [ "trois", "cinq", "deux", "quatre" ], "targetLanguage": "trois" }, { "id": "S2-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "un|1", "deux|2", "cinq|5", "dix|10" ] }, { "id": "S2-L1-E3", "type": "multipleChoice", "prompt": "How do you say 'seven'?", "correctAnswer": "sept", "options": [ "sept", "huit", "neuf", "six" ], "targetLanguage": "sept" }, { "id": "S2-L1-E4", "type": "listening", "prompt": "Which number?", "correctAnswer": "huit", "options": [ "sept", "six", "huit", "neuf" ], "targetLanguage": "huit" }, { "id": "S2-L1-E5", "type": "multipleChoice", "prompt": "'J'ai quatre ans' means:", "correctAnswer": "I am four years old", "options": [ "I am four siblings", "I am four years old", "I want four", "I have four" ], "targetLanguage": "J'ai quatre ans" }, { "id": "S2-L1-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "trois|3", "quatre|4", "six|6", "neuf|9" ] } ] }, { "id": "S2-L2", "title": "11–100", "description": "11–100", "exercises": [ { "id": "S2-L2-E1", "type": "listening", "prompt": "Which teen number?", "correctAnswer": "quinze", "options": [ "quinze", "quatorze", "seize", "treize" ], "targetLanguage": "quinze" }, { "id": "S2-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "onze|11", "douze|12", "vingt|20", "trente|30" ] }, { "id": "S2-L2-E3", "type": "multipleChoice", "prompt": "How do you say 'eighteen'?", "correctAnswer": "dix-huit", "options": [ "dix-neuf", "seize", "dix-huit", "dix-sept" ], "targetLanguage": "dix-huit" }, { "id": "S2-L2-E4", "type": "listening", "prompt": "Which decade?", "correctAnswer": "cinquante", "options": [ "soixante", "cinquante", "quarante", "soixante-dix" ], "targetLanguage": "cinquante" }, { "id": "S2-L2-E5", "type": "multipleChoice", "prompt": "How do you say 'one hundred'?", "correctAnswer": "cent", "options": [ "mille", "quatre-vingt-dix", "cent", "deux cents" ], "targetLanguage": "cent" }, { "id": "S2-L2-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "quarante|40", "soixante|60", "quatre-vingts|80", "cent|100" ] } ] }, { "id": "S2-L3", "title": "Prix et argent", "description": "Prix et argent", "exercises": [ { "id": "S2-L3-E1", "type": "listening", "prompt": "The cashier says the price — which?", "correctAnswer": "Deux euros", "options": [ "Deux euros", "Cinq euros", "Un euro", "Trois euros" ], "targetLanguage": "Deux euros" }, { "id": "S2-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Combien ça coûte ?|How much does it cost?", "Ça coûte...|It costs...", "La monnaie|The change", "L'addition|The bill" ] }, { "id": "S2-L3-E3", "type": "multipleChoice", "prompt": "You want to ask the price:", "correctAnswer": "Combien ça coûte ?", "options": [ "Merci !", "Où est-ce ?", "Combien ça coûte ?", "Comment allez-vous ?" ], "targetLanguage": "Combien ça coûte ?" }, { "id": "S2-L3-E4", "type": "listening", "prompt": "Which means 'the bill please'?", "correctAnswer": "L'addition, s'il vous plaît", "options": [ "Deux euros", "L'addition, s'il vous plaît", "Combien ça coûte ?", "La monnaie" ], "targetLanguage": "L'addition, s'il vous plaît" }, { "id": "S2-L3-E5", "type": "multipleChoice", "prompt": "'Un euro vingt' means:", "correctAnswer": "1 euro and 20 cents", "options": [ "12 euros", "1 euro and 20 cents", "2 euros", "1.02 euros" ], "targetLanguage": "Un euro vingt" }, { "id": "S2-L3-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "bon marché|cheap", "cher|expensive", "en solde|on sale", "gratuit|free" ] } ] }, { "id": "S2-L4", "title": "L'heure", "description": "L'heure", "exercises": [ { "id": "S2-L4-E1", "type": "listening", "prompt": "Which time phrase?", "correctAnswer": "Quelle heure est-il ?", "options": [ "Quelle heure est-il ?", "À quelle heure ?", "Quand ?", "Quel jour sommes-nous ?" ], "targetLanguage": "Quelle heure est-il ?" }, { "id": "S2-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Quelle heure est-il ?|What time is it?", "Il est trois heures|It's three o'clock", "midi|noon", "minuit|midnight" ] }, { "id": "S2-L4-E3", "type": "multipleChoice", "prompt": "It's exactly noon:", "correctAnswer": "Il est midi.", "options": [ "Il est midi et demi.", "Il est midi.", "Il est trois heures.", "Il est minuit." ], "targetLanguage": "Il est midi." }, { "id": "S2-L4-E4", "type": "listening", "prompt": "Which time?", "correctAnswer": "Il est cinq heures", "options": [ "Il est trois heures", "Il est quatre heures", "Il est six heures", "Il est cinq heures" ], "targetLanguage": "Il est cinq heures" }, { "id": "S2-L4-E5", "type": "multipleChoice", "prompt": "'At what time?' in French:", "correctAnswer": "À quelle heure ?", "options": [ "Quand ?", "À quelle heure ?", "Quel jour ?", "Quelle heure est-il ?" ], "targetLanguage": "À quelle heure ?" }, { "id": "S2-L4-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "ce matin|this morning", "ce soir|tonight", "demain|tomorrow", "hier|yesterday" ] } ] } ] }, { "id": "F1", "title": "Je m'appelle...", "description": "Introduce yourself with confidence", "icon": "person.fill", "lessons": [ { "id": "F1-L1", "title": "Mon nom et mon origine", "description": "Mon nom et mon origine", "exercises": [ { "id": "F1-L1-E1", "type": "listening", "prompt": "Which phrase means 'My name is'?", "correctAnswer": "Je m'appelle", "options": [ "Je viens de", "Je m'appelle", "J'ai", "J'aime" ], "targetLanguage": "Je m'appelle" }, { "id": "F1-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Je m'appelle|My name is", "Je viens de|I'm from", "J'habite à|I live in", "J'ai ... ans|I'm ... years old" ] }, { "id": "F1-L1-E3", "type": "multipleChoice", "prompt": "Introducing yourself:", "correctAnswer": "Je m'appelle Claire.", "options": [ "Claire m'appelle.", "Mon nom Claire.", "Je m'appelle Claire.", "Moi Claire." ], "targetLanguage": "Je m'appelle Claire." }, { "id": "F1-L1-E4", "type": "multipleChoice", "prompt": "You're from Paris — you reply to 'D'où venez-vous ?':", "correctAnswer": "Je viens de Paris.", "options": [ "J'habite Paris.", "Je viens de Paris.", "Paris je viens.", "Moi Paris." ], "targetLanguage": "Je viens de Paris." }, { "id": "F1-L1-E5", "type": "wordOrder", "prompt": "Build: My name is Marc and I'm from Lyon", "correctAnswer": "Je m'appelle Marc et je viens de Lyon", "targetLanguage": "Je m'appelle Marc et je viens de Lyon" }, { "id": "F1-L1-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "français(e)|French", "anglais(e)|English", "américain(e)|American", "espagnol(e)|Spanish" ] } ] }, { "id": "F1-L2", "title": "Âge et nationalité", "description": "Âge et nationalité", "exercises": [ { "id": "F1-L2-E1", "type": "listening", "prompt": "Someone states their age:", "correctAnswer": "J'ai vingt-deux ans", "options": [ "J'ai vingt ans", "J'ai vingt-deux ans", "J'ai vingt et un ans", "J'ai vingt-trois ans" ], "targetLanguage": "J'ai vingt-deux ans" }, { "id": "F1-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "J'ai ... ans|I am ... years old", "Je suis français|I'm French (m)", "Je suis anglaise|I'm English (f)", "Je suis américain|I'm American (m)" ] }, { "id": "F1-L2-E3", "type": "multipleChoice", "prompt": "'I am 30 years old':", "correctAnswer": "J'ai trente ans.", "options": [ "J'ai trente.", "Je suis trente ans.", "Trente ans j'ai.", "J'ai trente ans." ], "targetLanguage": "J'ai trente ans." }, { "id": "F1-L2-E4", "type": "wordOrder", "prompt": "Build: I am French and I am 25 years old", "correctAnswer": "Je suis français et j'ai vingt-cinq ans", "targetLanguage": "Je suis français et j'ai vingt-cinq ans" }, { "id": "F1-L2-E5", "type": "multipleChoice", "prompt": "A woman from Spain says her nationality:", "correctAnswer": "Je suis espagnole.", "options": [ "Espagnole je suis.", "Je viens d'Espagne.", "Je suis espagnol.", "Je suis espagnole." ], "explanation": "French adjectives agree in gender", "targetLanguage": "Je suis espagnole." }, { "id": "F1-L2-E6", "type": "wordOrder", "prompt": "Build: Nice to meet you I'm from London", "correctAnswer": "Enchanté(e) je viens de Londres", "targetLanguage": "Enchanté(e) je viens de Londres" } ] }, { "id": "F1-L3", "title": "Profession et études", "description": "Profession et études", "exercises": [ { "id": "F1-L3-E1", "type": "listening", "prompt": "Which means 'I am a student'?", "correctAnswer": "Je suis étudiant(e)", "options": [ "Je suis professeur", "Je suis étudiant(e)", "Je suis architecte", "Je suis médecin" ], "targetLanguage": "Je suis étudiant(e)" }, { "id": "F1-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Je suis étudiant(e)|I'm a student", "Je travaille comme|I work as", "J'étudie|I study", "Ma profession est|My profession is" ] }, { "id": "F1-L3-E3", "type": "multipleChoice", "prompt": "You're a doctor:", "correctAnswer": "Je suis médecin.", "options": [ "Je suis médecin.", "Je fais le médecin.", "Médecin moi.", "Le médecin je suis." ], "targetLanguage": "Je suis médecin." }, { "id": "F1-L3-E4", "type": "wordOrder", "prompt": "Build: I study French at university", "correctAnswer": "J'étudie le français à l'université", "targetLanguage": "J'étudie le français à l'université" }, { "id": "F1-L3-E5", "type": "multipleChoice", "prompt": "How do you ask someone's job?", "correctAnswer": "Qu'est-ce que vous faites dans la vie ?", "options": [ "Avez-vous un travail ?", "Où travaillez-vous ?", "Êtes-vous occupé ?", "Qu'est-ce que vous faites dans la vie ?" ], "targetLanguage": "Qu'est-ce que vous faites dans la vie ?" }, { "id": "F1-L3-E6", "type": "wordOrder", "prompt": "Build: I work as an architect in Paris", "correctAnswer": "Je travaille comme architecte à Paris", "targetLanguage": "Je travaille comme architecte à Paris" } ] }, { "id": "F1-L4", "title": "Présentation complète", "description": "Présentation complète", "exercises": [ { "id": "F1-L4-E1", "type": "listening", "prompt": "Which city is mentioned?", "correctAnswer": "Bordeaux", "options": [ "Marseille", "Paris", "Bordeaux", "Lyon" ], "targetLanguage": "Je viens de Bordeaux." }, { "id": "F1-L4-E2", "type": "multipleChoice", "prompt": "Most natural introduction:", "correctAnswer": "Je m'appelle Sophie, je viens de Paris et j'ai trente ans.", "options": [ "Moi Sophie, Paris, trente ans.", "Nom Sophie, ville Paris.", "Je m'appelle Sophie, je viens de Paris et j'ai trente ans.", "Sophie m'appelle, ans trente." ], "targetLanguage": "Je m'appelle Sophie, je viens de Paris et j'ai trente ans." }, { "id": "F1-L4-E3", "type": "wordOrder", "prompt": "Build: Hello my name is Léa and I'm from Nice", "correctAnswer": "Bonjour je m'appelle Léa et je viens de Nice", "targetLanguage": "Bonjour je m'appelle Léa et je viens de Nice" }, { "id": "F1-L4-E4", "type": "wordOrder", "prompt": "Build: I'm a teacher and I'm 40 years old", "correctAnswer": "Je suis professeure et j'ai quarante ans", "targetLanguage": "Je suis professeure et j'ai quarante ans" }, { "id": "F1-L4-E5", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Enchanté(e)|Pleased to meet you", "Ravi(e) de vous rencontrer|Delighted to meet you", "De même|Likewise", "Bienvenu(e)|Welcome" ] }, { "id": "F1-L4-E6", "type": "speaking", "prompt": "Say your introduction: name, where from, age, job", "correctAnswer": "Je m'appelle [nom], je viens de [ville], j'ai [âge] ans et je suis [profession].", "targetLanguage": "Je m'appelle [nom], je viens de [ville], j'ai [âge] ans et je suis [profession]." } ] } ] }, { "id": "F2", "title": "Au café", "description": "Order coffee and snacks like a local", "icon": "cup.and.saucer.fill", "lessons": [ { "id": "F2-L1", "title": "Qu'y a-t-il au café ?", "description": "Qu'y a-t-il au café ?", "exercises": [ { "id": "F2-L1-E1", "type": "listening", "prompt": "Which drink is ordered?", "correctAnswer": "un café", "options": [ "un jus", "un thé", "un café", "une bière" ], "targetLanguage": "un café" }, { "id": "F2-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "un café|a coffee/espresso", "un café au lait|coffee with milk", "un croissant|a croissant", "un sandwich|a sandwich" ] }, { "id": "F2-L1-E3", "type": "multipleChoice", "prompt": "You want a coffee:", "correctAnswer": "Un café, s'il vous plaît.", "options": [ "Café maintenant.", "Un café, s'il vous plaît.", "Je veux un café.", "Un espresso, merci." ], "targetLanguage": "Un café, s'il vous plaît." }, { "id": "F2-L1-E4", "type": "listening", "prompt": "Which food is ordered?", "correctAnswer": "un croissant", "options": [ "une glace", "un croissant", "une pizza", "un sandwich" ], "targetLanguage": "un croissant" }, { "id": "F2-L1-E5", "type": "multipleChoice", "prompt": "Asking what they have:", "correctAnswer": "Qu'est-ce que vous avez ?", "options": [ "Qu'est-ce que je mange ?", "Qu'est-ce que vous avez ?", "Vous avez quoi ?", "Qu'est-ce que je veux ?" ], "targetLanguage": "Qu'est-ce que vous avez ?" }, { "id": "F2-L1-E6", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le café|café", "le serveur / la serveuse|waiter/waitress", "au comptoir|at the counter", "en terrasse|on the terrace" ] } ] }, { "id": "F2-L2", "title": "Commander et payer", "description": "Commander et payer", "exercises": [ { "id": "F2-L2-E1", "type": "listening", "prompt": "Which is a complete order?", "correctAnswer": "Un café et un croissant, s'il vous plaît.", "options": [ "Je voudrais café croissant.", "S'il vous plaît café.", "Un café et un croissant, s'il vous plaît.", "Café et croissant je veux." ], "targetLanguage": "Un café et un croissant, s'il vous plaît." }, { "id": "F2-L2-E2", "type": "wordOrder", "prompt": "Build: A coffee and a croissant please", "correctAnswer": "Un café et un croissant s'il vous plaît", "targetLanguage": "Un café et un croissant s'il vous plaît" }, { "id": "F2-L2-E3", "type": "multipleChoice", "prompt": "You want to pay:", "correctAnswer": "L'addition, s'il vous plaît.", "options": [ "C'est combien ?", "Je veux payer maintenant.", "L'addition, s'il vous plaît.", "Je veux payer." ], "targetLanguage": "L'addition, s'il vous plaît." }, { "id": "F2-L2-E4", "type": "wordOrder", "prompt": "Build: How much is the coffee?", "correctAnswer": "Combien coûte le café ?", "targetLanguage": "Combien coûte le café ?" }, { "id": "F2-L2-E5", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Je voudrais|I would like", "Je prends|I'll have", "Vous pouvez me donner|Can you give me", "Pour moi|For me" ] }, { "id": "F2-L2-E6", "type": "wordOrder", "prompt": "Build: I would like a coffee with milk at the counter", "correctAnswer": "Je voudrais un café au lait au comptoir", "targetLanguage": "Je voudrais un café au lait au comptoir" } ] }, { "id": "F2-L3", "title": "Dialogue au café", "description": "Dialogue au café", "exercises": [ { "id": "F2-L3-E1", "type": "multipleChoice", "prompt": "Waiter asks 'Vous désirez ?' — they're asking:", "correctAnswer": "What will you have?", "options": [ "Do you like coffee?", "Are you ready?", "What will you have?", "Want to sit?" ], "targetLanguage": "Vous désirez ?" }, { "id": "F2-L3-E2", "type": "wordOrder", "prompt": "Build: I'll have a coffee with milk and a croissant", "correctAnswer": "Je prends un café au lait et un croissant", "targetLanguage": "Je prends un café au lait et un croissant" }, { "id": "F2-L3-E3", "type": "multipleChoice", "prompt": "Waiter says 'Tout de suite !' — they mean:", "correctAnswer": "Right away!", "options": [ "Enjoy!", "Right away!", "No problem!", "Of course!" ], "targetLanguage": "Tout de suite !" }, { "id": "F2-L3-E4", "type": "wordOrder", "prompt": "Build: Can I have the bill please?", "correctAnswer": "Est-ce que je peux avoir l'addition s'il vous plaît ?", "targetLanguage": "Est-ce que je peux avoir l'addition s'il vous plaît ?" }, { "id": "F2-L3-E5", "type": "listening", "prompt": "The waiter says the total — which?", "correctAnswer": "Trois euros cinquante", "options": [ "Deux euros", "Quatre euros", "Cinq euros", "Trois euros cinquante" ], "targetLanguage": "Trois euros cinquante" }, { "id": "F2-L3-E6", "type": "speaking", "prompt": "Order aloud: coffee, croissant, ask the price", "correctAnswer": "Un café et un croissant, s'il vous plaît. C'est combien ?", "targetLanguage": "Un café et un croissant, s'il vous plaît. C'est combien ?" } ] }, { "id": "F2-L4", "title": "Culture du café", "description": "Culture du café", "exercises": [ { "id": "F2-L4-E1", "type": "multipleChoice", "prompt": "In France, 'un café' normally means:", "correctAnswer": "A small espresso", "options": [ "Iced coffee", "Coffee with milk", "A small espresso", "Decaf" ], "explanation": "In France, 'café' = espresso by default", "targetLanguage": "un café" }, { "id": "F2-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "serré|strong/short espresso", "allongé|long/diluted espresso", "noisette|espresso with a drop of milk", "décaféiné|decaffeinated" ] }, { "id": "F2-L4-E3", "type": "wordOrder", "prompt": "Build: A strong coffee at the counter please", "correctAnswer": "Un café serré au comptoir s'il vous plaît", "targetLanguage": "Un café serré au comptoir s'il vous plaît" }, { "id": "F2-L4-E4", "type": "multipleChoice", "prompt": "You want strong coffee with little water:", "correctAnswer": "Un café serré.", "options": [ "Un café serré.", "Un café allongé.", "Un noisette.", "Un café au lait." ], "targetLanguage": "Un café serré." }, { "id": "F2-L4-E5", "type": "wordOrder", "prompt": "Build: Could I have a decaf please?", "correctAnswer": "Est-ce que je peux avoir un décaféiné s'il vous plaît ?", "targetLanguage": "Est-ce que je peux avoir un décaféiné s'il vous plaît ?" }, { "id": "F2-L4-E6", "type": "speaking", "prompt": "Order breakfast for two at a French café", "correctAnswer": "Deux cafés et deux croissants, s'il vous plaît. C'est combien ?", "targetLanguage": "Deux cafés et deux croissants, s'il vous plaît. C'est combien ?" } ] } ] }, { "id": "F3", "title": "Nombres et prix", "description": "Understand prices and count with ease", "icon": "eurosign.circle.fill", "lessons": [ { "id": "F3-L1", "title": "Les prix en contexte", "description": "Les prix en contexte", "exercises": [ { "id": "F3-L1-E1", "type": "listening", "prompt": "The price tag says 'quatorze euros':", "correctAnswer": "14 euros", "options": [ "41 euros", "4 euros", "14 euros", "40 euros" ], "targetLanguage": "quatorze euros" }, { "id": "F3-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Combien ça coûte ?|How much is it?", "Ça coûte dix euros|It costs 10 euros", "Trop cher|Too expensive", "Une bonne affaire !|A bargain!" ] }, { "id": "F3-L1-E3", "type": "multipleChoice", "prompt": "Something costs €22.50 — in French:", "correctAnswer": "Vingt-deux euros cinquante.", "options": [ "Vingt-deux et demi euros.", "Vingt euros plus deux.", "Vingt-deux euros cinquante.", "Deux et vingt euros." ], "targetLanguage": "Vingt-deux euros cinquante." }, { "id": "F3-L1-E4", "type": "wordOrder", "prompt": "Build: This jacket costs sixty euros", "correctAnswer": "Cette veste coûte soixante euros", "targetLanguage": "Cette veste coûte soixante euros" }, { "id": "F3-L1-E5", "type": "listening", "prompt": "Which price?", "correctAnswer": "Trente-cinq euros", "options": [ "Trente euros", "Trente-trois euros", "Trente-six euros", "Trente-cinq euros" ], "targetLanguage": "Trente-cinq euros" }, { "id": "F3-L1-E6", "type": "wordOrder", "prompt": "Build: How much does the ticket cost?", "correctAnswer": "Combien coûte le billet ?", "targetLanguage": "Combien coûte le billet ?" } ] }, { "id": "F3-L2", "title": "Payer et la monnaie", "description": "Payer et la monnaie", "exercises": [ { "id": "F3-L2-E1", "type": "listening", "prompt": "Which means 'keep the change'?", "correctAnswer": "Gardez la monnaie.", "options": [ "J'ai de la monnaie.", "Je paye en liquide.", "Gardez la monnaie.", "C'est combien la monnaie ?" ], "targetLanguage": "Gardez la monnaie." }, { "id": "F3-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "payer|to pay", "en liquide|cash", "par carte|by card", "le reçu|receipt" ] }, { "id": "F3-L2-E3", "type": "multipleChoice", "prompt": "You want to pay by card:", "correctAnswer": "Je peux payer par carte ?", "options": [ "Je peux payer par carte ?", "Je paye carte.", "La carte, s'il vous plaît.", "J'ai la carte." ], "targetLanguage": "Je peux payer par carte ?" }, { "id": "F3-L2-E4", "type": "wordOrder", "prompt": "Build: Can I pay in cash?", "correctAnswer": "Je peux payer en liquide ?", "targetLanguage": "Je peux payer en liquide ?" }, { "id": "F3-L2-E5", "type": "multipleChoice", "prompt": "Total is 18€, you give 20€ — change is:", "correctAnswer": "Deux euros", "options": [ "Vingt euros", "Deux vingt", "Deux euros", "Dix-huit euros" ], "targetLanguage": "La monnaie est de deux euros." }, { "id": "F3-L2-E6", "type": "speaking", "prompt": "Ask the price then say you want to pay by card", "correctAnswer": "Combien ça coûte ? Je peux payer par carte ?", "targetLanguage": "Combien ça coûte ? Je peux payer par carte ?" } ] }, { "id": "F3-L3", "title": "Au marché", "description": "Au marché", "exercises": [ { "id": "F3-L3-E1", "type": "listening", "prompt": "The stall holder calls a price — which?", "correctAnswer": "Un euro le kilo", "options": [ "Cinquante centimes", "Trois euros", "Un euro le kilo", "Deux euros le kilo" ], "targetLanguage": "Un euro le kilo" }, { "id": "F3-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le kilo|per kilo", "la livre|half a kilo (French measure)", "la pièce|each", "le litre|per litre" ] }, { "id": "F3-L3-E3", "type": "wordOrder", "prompt": "Build: Give me one kilo of tomatoes please", "correctAnswer": "Donnez-moi un kilo de tomates s'il vous plaît", "targetLanguage": "Donnez-moi un kilo de tomates s'il vous plaît" }, { "id": "F3-L3-E4", "type": "multipleChoice", "prompt": "You want 200g of cheese:", "correctAnswer": "Deux cents grammes de fromage.", "options": [ "Deux cents grammes de fromage.", "Un kilo et demi.", "Deux kilos de fromage.", "Deux morceaux de fromage." ], "targetLanguage": "Deux cents grammes de fromage." }, { "id": "F3-L3-E5", "type": "wordOrder", "prompt": "Build: How much for half a kilo of cherries?", "correctAnswer": "Combien coûte une livre de cerises ?", "targetLanguage": "Combien coûte une livre de cerises ?" }, { "id": "F3-L3-E6", "type": "speaking", "prompt": "At the market: ask for 1kg of apples and the price", "correctAnswer": "Un kilo de pommes, s'il vous plaît. C'est combien ?", "targetLanguage": "Un kilo de pommes, s'il vous plaît. C'est combien ?" } ] }, { "id": "F3-L4", "title": "Téléphones et adresses", "description": "Téléphones et adresses", "exercises": [ { "id": "F3-L4-E1", "type": "listening", "prompt": "Which number?", "correctAnswer": "trois trois deux", "options": [ "trois trois trois", "deux trois deux", "trois deux trois", "trois trois deux" ], "targetLanguage": "trois trois deux" }, { "id": "F3-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le numéro de téléphone|phone number", "le code postal|postcode", "la rue|the street", "au numéro...|at number..." ] }, { "id": "F3-L4-E3", "type": "multipleChoice", "prompt": "'Quel est ton numéro ?' asks for:", "correctAnswer": "Your phone number", "options": [ "Your name", "Your age", "Your phone number", "Your address" ], "targetLanguage": "ton numéro de téléphone" }, { "id": "F3-L4-E4", "type": "wordOrder", "prompt": "Build: My address is 5 Rue de la Paix", "correctAnswer": "Mon adresse est cinq rue de la Paix", "targetLanguage": "Mon adresse est cinq rue de la Paix" }, { "id": "F3-L4-E5", "type": "wordOrder", "prompt": "Build: My postcode is 75001", "correctAnswer": "Mon code postal est soixante-quinze zéro zéro un", "targetLanguage": "Mon code postal est soixante-quinze zéro zéro un" }, { "id": "F3-L4-E6", "type": "speaking", "prompt": "Give your phone number aloud in French", "correctAnswer": "Mon numéro est [numéro].", "targetLanguage": "Mon numéro est [numéro]." } ] } ] }, { "id": "F4", "title": "Comment ça va ?", "description": "Small talk and everyday conversation", "icon": "bubble.left.and.bubble.right.fill", "lessons": [ { "id": "F4-L1", "title": "Comment ça va ?", "description": "Comment ça va ?", "exercises": [ { "id": "F4-L1-E1", "type": "listening", "prompt": "How does the speaker feel?", "correctAnswer": "Très bien !", "options": [ "Pas terrible", "Très bien !", "Comme ci comme ça", "Mal" ], "targetLanguage": "Très bien !" }, { "id": "F4-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Très bien|Very well", "Bien|Well", "Pas mal|Not bad", "Comme ci comme ça|So-so" ] }, { "id": "F4-L1-E3", "type": "multipleChoice", "prompt": "You're having an average day:", "correctAnswer": "Comme ci comme ça.", "options": [ "Très bien !", "Mal !", "Je ne comprends pas.", "Comme ci comme ça." ], "targetLanguage": "Comme ci comme ça." }, { "id": "F4-L1-E4", "type": "wordOrder", "prompt": "Build: How are you? Fine, and you?", "correctAnswer": "Comment ça va ? Bien, et toi ?", "targetLanguage": "Comment ça va ? Bien, et toi ?" }, { "id": "F4-L1-E5", "type": "multipleChoice", "prompt": "'Et toi, comment ça va ?' means:", "correctAnswer": "Asking how you are in return", "options": [ "Saying goodbye", "Asking your name", "Saying they're fine", "Asking how you are in return" ], "targetLanguage": "Et toi, comment ça va ?" }, { "id": "F4-L1-E6", "type": "speaking", "prompt": "Exchange greetings: ask and answer 'how are you'", "correctAnswer": "Comment ça va ? Bien merci, et toi ? Très bien !", "targetLanguage": "Comment ça va ? Bien merci, et toi ? Très bien !" } ] }, { "id": "F4-L2", "title": "La météo", "description": "La météo", "exercises": [ { "id": "F4-L2-E1", "type": "listening", "prompt": "Which weather phrase?", "correctAnswer": "Il fait très chaud aujourd'hui !", "options": [ "Il y a du vent.", "Il fait froid.", "Il pleut beaucoup.", "Il fait très chaud aujourd'hui !" ], "targetLanguage": "Il fait très chaud aujourd'hui !" }, { "id": "F4-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Il fait chaud|It's hot", "Il fait froid|It's cold", "Il pleut|It's raining", "Il y a du soleil|It's sunny" ] }, { "id": "F4-L2-E3", "type": "multipleChoice", "prompt": "It's snowing:", "correctAnswer": "Il neige.", "options": [ "Il y a du brouillard.", "Il pleut.", "Il neige.", "Il fait froid." ], "targetLanguage": "Il neige." }, { "id": "F4-L2-E4", "type": "wordOrder", "prompt": "Build: Today it's sunny and warm", "correctAnswer": "Aujourd'hui il y a du soleil et il fait chaud", "targetLanguage": "Aujourd'hui il y a du soleil et il fait chaud" }, { "id": "F4-L2-E5", "type": "multipleChoice", "prompt": "'Quel sale temps !' means:", "correctAnswer": "The weather is awful", "options": [ "The weather is awful", "Mild weather", "Warm weather", "Beautiful weather" ], "targetLanguage": "Quel sale temps !" }, { "id": "F4-L2-E6", "type": "speaking", "prompt": "Comment on today's weather in French", "correctAnswer": "Aujourd'hui il [fait chaud/froid], [il y a du soleil / il pleut / il neige].", "targetLanguage": "Aujourd'hui il [fait chaud/froid], [il y a du soleil / il pleut / il neige]." } ] }, { "id": "F4-L3", "title": "Goûts et préférences", "description": "Goûts et préférences", "exercises": [ { "id": "F4-L3-E1", "type": "listening", "prompt": "Which means 'I like'?", "correctAnswer": "J'aime", "options": [ "J'aime", "Je m'appelle", "Je suis désolé(e)", "Je n'aime pas" ], "targetLanguage": "J'aime" }, { "id": "F4-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "J'aime|I like", "Je n'aime pas|I don't like", "J'adore|I love", "Je déteste|I hate" ] }, { "id": "F4-L3-E3", "type": "multipleChoice", "prompt": "You love croissants:", "correctAnswer": "J'adore les croissants !", "options": [ "J'aime pas croissants.", "Les croissants aime.", "Croissants j'aime beaucoup.", "J'adore les croissants !" ], "targetLanguage": "J'adore les croissants !" }, { "id": "F4-L3-E4", "type": "wordOrder", "prompt": "Build: I like French food but I don't like coffee", "correctAnswer": "J'aime la cuisine française mais je n'aime pas le café", "targetLanguage": "J'aime la cuisine française mais je n'aime pas le café" }, { "id": "F4-L3-E5", "type": "multipleChoice", "prompt": "How do you ask 'Do you like Paris ?'", "correctAnswer": "Tu aimes Paris ?", "options": [ "Aimes Paris tu ?", "Aimes-tu Paris ?", "Paris tu aimes ?", "Tu aimes Paris ?" ], "targetLanguage": "Tu aimes Paris ?" }, { "id": "F4-L3-E6", "type": "speaking", "prompt": "Say two things you like and one you don't", "correctAnswer": "J'aime [X] et j'aime [Y], mais je n'aime pas [Z].", "targetLanguage": "J'aime [X] et j'aime [Y], mais je n'aime pas [Z]." } ] }, { "id": "F4-L4", "title": "Le week-end", "description": "Le week-end", "exercises": [ { "id": "F4-L4-E1", "type": "listening", "prompt": "What did the speaker do at the weekend?", "correctAnswer": "Je suis allé(e) au cinéma", "options": [ "Je suis allé(e) au cinéma", "Je suis resté(e) à la maison", "J'ai travaillé", "Je suis sorti(e) avec des amis" ], "targetLanguage": "Je suis allé(e) au cinéma" }, { "id": "F4-L4-E2", "type": "multipleChoice", "prompt": "How do you ask 'What did you do this weekend?'", "correctAnswer": "Qu'est-ce que tu as fait ce week-end ?", "options": [ "C'est quoi le week-end ?", "Qu'est-ce que tu fais le week-end ?", "Qu'est-ce que tu as fait ce week-end ?", "Qu'est-ce que tu feras ce week-end ?" ], "targetLanguage": "Qu'est-ce que tu as fait ce week-end ?" }, { "id": "F4-L4-E3", "type": "wordOrder", "prompt": "Build: I went to the cinema with friends", "correctAnswer": "Je suis allé(e) au cinéma avec mes amis", "targetLanguage": "Je suis allé(e) au cinéma avec mes amis" }, { "id": "F4-L4-E4", "type": "multipleChoice", "prompt": "How do you say 'I stayed home'?", "correctAnswer": "Je suis resté(e) à la maison.", "options": [ "À la maison je suis.", "Maison resté(e).", "Je suis resté(e) à la maison.", "Je reste à la maison." ], "targetLanguage": "Je suis resté(e) à la maison." }, { "id": "F4-L4-E5", "type": "wordOrder", "prompt": "Build: This weekend I want to go to the beach", "correctAnswer": "Ce week-end je veux aller à la plage", "targetLanguage": "Ce week-end je veux aller à la plage" }, { "id": "F4-L4-E6", "type": "speaking", "prompt": "Tell someone what you did or plan to do this weekend", "correctAnswer": "Ce week-end je suis allé(e) à [lieu]. / Ce week-end je veux [faire quelque chose].", "targetLanguage": "Ce week-end je suis allé(e) à [lieu]. / Ce week-end je veux [faire quelque chose]." } ] } ] }, { "id": "F5", "title": "La famille", "description": "Talk about family and relationships", "icon": "figure.2.and.child.holdinghands", "lessons": [ { "id": "F5-L1", "title": "Les membres de la famille", "description": "Les membres de la famille", "exercises": [ { "id": "F5-L1-E1", "type": "listening", "prompt": "Who is 'le beau-frère' ?", "correctAnswer": "Brother-in-law", "options": [ "Father", "Uncle", "Cousin", "Brother-in-law" ], "targetLanguage": "le beau-frère" }, { "id": "F5-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le père|father", "la mère|mother", "le frère|brother", "la sœur|sister" ] }, { "id": "F5-L1-E3", "type": "multipleChoice", "prompt": "Your mother's mother is:", "correctAnswer": "la grand-mère", "options": [ "la cousine", "la tante", "la belle-sœur", "la grand-mère" ], "targetLanguage": "la grand-mère" }, { "id": "F5-L1-E4", "type": "wordOrder", "prompt": "Build: I have two brothers and one sister", "correctAnswer": "J'ai deux frères et une sœur", "targetLanguage": "J'ai deux frères et une sœur" }, { "id": "F5-L1-E5", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le grand-père|grandfather", "la grand-mère|grandmother", "l'oncle|uncle", "la tante|aunt" ] }, { "id": "F5-L1-E6", "type": "speaking", "prompt": "Describe your family briefly", "correctAnswer": "J'ai [nombre] frères/sœurs. Mon père s'appelle [prénom]...", "targetLanguage": "J'ai [nombre] frères/sœurs. Mon père s'appelle [prénom]..." } ] }, { "id": "F5-L2", "title": "Décrire les gens", "description": "Décrire les gens", "exercises": [ { "id": "F5-L2-E1", "type": "listening", "prompt": "Which means 'tall and dark-haired'?", "correctAnswer": "grand et brun", "options": [ "petit et blond", "petit et brun", "grand et blond", "grand et brun" ], "targetLanguage": "grand et brun" }, { "id": "F5-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "grand(e)|tall", "petit(e)|short", "blond(e)|fair-haired", "brun(e)|dark-haired" ] }, { "id": "F5-L2-E3", "type": "multipleChoice", "prompt": "You describe someone as funny:", "correctAnswer": "Il est drôle.", "options": [ "Il est drôle.", "Il est fatigué.", "Il est gentil.", "Il est grand." ], "targetLanguage": "Il est drôle." }, { "id": "F5-L2-E4", "type": "wordOrder", "prompt": "Build: My sister is tall and very funny", "correctAnswer": "Ma sœur est grande et très drôle", "targetLanguage": "Ma sœur est grande et très drôle" }, { "id": "F5-L2-E5", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "sympa|nice / likeable", "antipathique|unpleasant", "gentil(le)|kind", "timide|shy" ] }, { "id": "F5-L2-E6", "type": "speaking", "prompt": "Describe a family member: name, relation, appearance, personality", "correctAnswer": "Mon [frère] s'appelle [prénom], il est [grand/petit], il est très [sympa]...", "targetLanguage": "Mon [frère] s'appelle [prénom], il est [grand/petit], il est très [sympa]..." } ] }, { "id": "F5-L3", "title": "Relations", "description": "Relations", "exercises": [ { "id": "F5-L3-E1", "type": "listening", "prompt": "Which means 'I have a boyfriend'?", "correctAnswer": "J'ai un petit ami", "options": [ "J'ai un ami", "Je suis marié(e)", "J'ai un frère", "J'ai un petit ami" ], "targetLanguage": "J'ai un petit ami" }, { "id": "F5-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le petit ami|boyfriend", "la petite amie|girlfriend", "marié(e)|married", "célibataire|single" ] }, { "id": "F5-L3-E3", "type": "multipleChoice", "prompt": "How do you ask 'Are you married ?'", "correctAnswer": "Tu es marié(e) ?", "options": [ "Tu es marié(e) ?", "Tu es fiancé(e) ?", "Tu as des enfants ?", "Tu as un(e) petit(e) ami(e) ?" ], "targetLanguage": "Tu es marié(e) ?" }, { "id": "F5-L3-E4", "type": "wordOrder", "prompt": "Build: I'm engaged and we want to get married next year", "correctAnswer": "Je suis fiancé(e) et nous voulons nous marier l'année prochaine", "targetLanguage": "Je suis fiancé(e) et nous voulons nous marier l'année prochaine" }, { "id": "F5-L3-E5", "type": "multipleChoice", "prompt": "'On est ensemble depuis trois ans' means:", "correctAnswer": "We've been together for three years", "options": [ "We've been together for three years", "We've been friends three years", "We've been married three times", "We met three years ago" ], "targetLanguage": "On est ensemble depuis trois ans" }, { "id": "F5-L3-E6", "type": "speaking", "prompt": "Describe your relationship status in French", "correctAnswer": "Je suis [célibataire/marié(e)/fiancé(e)]...", "targetLanguage": "Je suis [célibataire/marié(e)/fiancé(e)]..." } ] }, { "id": "F5-L4", "title": "Histoires de famille", "description": "Histoires de famille", "exercises": [ { "id": "F5-L4-E1", "type": "listening", "prompt": "Where does this person's family live?", "correctAnswer": "dans le sud de la France", "options": [ "à l'étranger", "en ville", "dans le sud de la France", "dans le nord" ], "targetLanguage": "Ma famille vit dans le sud de la France." }, { "id": "F5-L4-E2", "type": "multipleChoice", "prompt": "'On est une famille soudée' means:", "correctAnswer": "We are a close-knit family", "options": [ "We're a big family.", "We're a famous family.", "We are a close-knit family", "Our family is nice." ], "targetLanguage": "On est une famille soudée." }, { "id": "F5-L4-E3", "type": "wordOrder", "prompt": "Build: My parents live in Marseille but I live in Paris", "correctAnswer": "Mes parents vivent à Marseille mais moi je vis à Paris", "targetLanguage": "Mes parents vivent à Marseille mais moi je vis à Paris" }, { "id": "F5-L4-E4", "type": "multipleChoice", "prompt": "'On se voit tous les dimanches' means:", "correctAnswer": "We see each other every Sunday", "options": [ "We see each other every Sunday", "We never see each other", "We saw each other last Sunday", "We'll see each other next Sunday" ], "targetLanguage": "On se voit tous les dimanches" }, { "id": "F5-L4-E5", "type": "wordOrder", "prompt": "Build: Every Sunday we have lunch together", "correctAnswer": "Tous les dimanches on déjeune ensemble", "targetLanguage": "Tous les dimanches on déjeune ensemble" }, { "id": "F5-L4-E6", "type": "speaking", "prompt": "Talk about a family tradition", "correctAnswer": "Ma famille est de [lieu]... Chaque [occasion] nous [faire quelque chose].", "targetLanguage": "Ma famille est de [lieu]... Chaque [occasion] nous [faire quelque chose]." } ] } ] }, { "id": "F6", "title": "Dans la ville", "description": "Ask and understand directions", "icon": "map.fill", "lessons": [ { "id": "F6-L1", "title": "Les mots de direction", "description": "Les mots de direction", "exercises": [ { "id": "F6-L1-E1", "type": "listening", "prompt": "Which direction?", "correctAnswer": "à gauche", "options": [ "tout droit", "en arrière", "à gauche", "à droite" ], "targetLanguage": "à gauche" }, { "id": "F6-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "à droite|right", "à gauche|left", "tout droit|straight on", "en arrière|back" ] }, { "id": "F6-L1-E3", "type": "multipleChoice", "prompt": "'Tournez à droite' means:", "correctAnswer": "Turn right", "options": [ "Turn left", "Go straight", "Turn right", "Go back" ], "targetLanguage": "Tournez à droite" }, { "id": "F6-L1-E4", "type": "wordOrder", "prompt": "Build: Turn left and then go straight on", "correctAnswer": "Tournez à gauche puis allez tout droit", "targetLanguage": "Tournez à gauche puis allez tout droit" }, { "id": "F6-L1-E5", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "près|near", "loin|far", "au coin de la rue|around the corner", "en face de|opposite" ] }, { "id": "F6-L1-E6", "type": "speaking", "prompt": "Give directions from your home to a nearby landmark", "correctAnswer": "D'abord allez [tout droit], puis tournez [à droite/gauche]...", "targetLanguage": "D'abord allez [tout droit], puis tournez [à droite/gauche]..." } ] }, { "id": "F6-L2", "title": "Demander où sont les choses", "description": "Demander où sont les choses", "exercises": [ { "id": "F6-L2-E1", "type": "listening", "prompt": "What is the person looking for?", "correctAnswer": "la gare", "options": [ "la poste", "la gare", "les toilettes", "l'hôpital" ], "targetLanguage": "Où est la gare ?" }, { "id": "F6-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Où est... ?|Where is...?", "Il y a un(e)... près d'ici ?|Is there a... nearby?", "Comment aller à... ?|How do you get to...?", "C'est loin ?|Is it far?" ] }, { "id": "F6-L2-E3", "type": "multipleChoice", "prompt": "You're lost — you ask:", "correctAnswer": "Excusez-moi, où est le Louvre ?", "options": [ "Excusez-moi, où est le Louvre ?", "Louvre, où est ?", "Où est ? Le Louvre.", "Moi Louvre cherche." ], "targetLanguage": "Excusez-moi, où est le Louvre ?" }, { "id": "F6-L2-E4", "type": "wordOrder", "prompt": "Build: Excuse me is there a pharmacy nearby?", "correctAnswer": "Excusez-moi y a-t-il une pharmacie près d'ici ?", "targetLanguage": "Excusez-moi y a-t-il une pharmacie près d'ici ?" }, { "id": "F6-L2-E5", "type": "multipleChoice", "prompt": "'C'est à dix minutes à pied' means:", "correctAnswer": "A 10-minute walk away", "options": [ "A 10-minute walk away", "Far away", "Very close", "10 minutes by car" ], "targetLanguage": "C'est à dix minutes à pied" }, { "id": "F6-L2-E6", "type": "speaking", "prompt": "Ask a passer-by for the nearest café or pharmacy", "correctAnswer": "Excusez-moi, y a-t-il un café / une pharmacie près d'ici ?", "targetLanguage": "Excusez-moi, y a-t-il un café / une pharmacie près d'ici ?" } ] }, { "id": "F6-L3", "title": "Les transports", "description": "Les transports", "exercises": [ { "id": "F6-L3-E1", "type": "listening", "prompt": "Which transport?", "correctAnswer": "le métro", "options": [ "le tramway", "le bus", "le métro", "le train" ], "targetLanguage": "Je prends le métro." }, { "id": "F6-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le train|train", "le bus|bus", "le métro|underground/metro", "le tramway|tram" ] }, { "id": "F6-L3-E3", "type": "multipleChoice", "prompt": "You want to know which bus to take:", "correctAnswer": "Quel bus je dois prendre ?", "options": [ "Où va le bus ?", "Quel bus je dois prendre ?", "Quand arrive le bus ?", "Combien de bus y a-t-il ?" ], "targetLanguage": "Quel bus je dois prendre ?" }, { "id": "F6-L3-E4", "type": "wordOrder", "prompt": "Build: I need to get to the city centre by metro", "correctAnswer": "Je dois aller au centre-ville en métro", "targetLanguage": "Je dois aller au centre-ville en métro" }, { "id": "F6-L3-E5", "type": "multipleChoice", "prompt": "'Le prochain arrêt est Châtelet' means:", "correctAnswer": "The next stop is Châtelet", "options": [ "Châtelet is two stops away", "Get off at Châtelet", "The next stop is Châtelet", "Châtelet is the last stop" ], "targetLanguage": "Le prochain arrêt est Châtelet" }, { "id": "F6-L3-E6", "type": "speaking", "prompt": "Explain how you usually get around your city", "correctAnswer": "D'habitude je prends [moyen de transport] pour aller à [lieu].", "targetLanguage": "D'habitude je prends [moyen de transport] pour aller à [lieu]." } ] }, { "id": "F6-L4", "title": "Suivre les indications", "description": "Suivre les indications", "exercises": [ { "id": "F6-L4-E1", "type": "listening", "prompt": "Where do you end up?", "correctAnswer": "sur la place", "options": [ "au supermarché", "sur la place", "à l'hôpital", "à la gare" ], "targetLanguage": "Allez tout droit et vous arriverez sur la place." }, { "id": "F6-L4-E2", "type": "multipleChoice", "prompt": "'Prenez la deuxième à droite' means:", "correctAnswer": "Take the second right", "options": [ "Take the first right", "Take the second right", "Take the second left", "Turn right twice" ], "targetLanguage": "Prenez la deuxième à droite" }, { "id": "F6-L4-E3", "type": "wordOrder", "prompt": "Build: Take the first left and the station is opposite", "correctAnswer": "Prenez la première à gauche et la gare est en face", "targetLanguage": "Prenez la première à gauche et la gare est en face" }, { "id": "F6-L4-E4", "type": "multipleChoice", "prompt": "'Traversez le pont et tournez à gauche' means:", "correctAnswer": "Cross the bridge and turn left", "options": [ "Cross the bridge and turn left", "Cross the square", "Go under the bridge", "Cross the road and turn right" ], "targetLanguage": "Traversez le pont et tournez à gauche" }, { "id": "F6-L4-E5", "type": "wordOrder", "prompt": "Build: The supermarket is behind the church on the right", "correctAnswer": "Le supermarché est derrière l'église à droite", "targetLanguage": "Le supermarché est derrière l'église à droite" }, { "id": "F6-L4-E6", "type": "speaking", "prompt": "Give directions from the station to a local landmark", "correctAnswer": "Sortez de la gare, tournez à [droite/gauche]...", "targetLanguage": "Sortez de la gare, tournez à [droite/gauche]..." } ] } ] }, { "id": "F7", "title": "Faire les courses", "description": "Shop for clothes, food and everyday items", "icon": "bag.fill", "lessons": [ { "id": "F7-L1", "title": "Dans le magasin", "description": "Dans le magasin", "exercises": [ { "id": "F7-L1-E1", "type": "listening", "prompt": "What does the assistant ask?", "correctAnswer": "Je peux vous aider ?", "options": [ "Que voulez-vous ?", "Vous avez besoin d'aide ?", "Vous cherchez quelque chose ?", "Je peux vous aider ?" ], "targetLanguage": "Je peux vous aider ?" }, { "id": "F7-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Je regarde, merci|I'm just looking", "Je cherche...|I'm looking for...", "Vous avez... ?|Do you have...?", "Quelle taille faites-vous ?|What size do you take?" ] }, { "id": "F7-L1-E3", "type": "multipleChoice", "prompt": "You just want to browse:", "correctAnswer": "Je regarde, merci.", "options": [ "Pouvez-vous m'aider ?", "Je regarde, merci.", "J'ai besoin d'aide.", "Je veux acheter quelque chose." ], "targetLanguage": "Je regarde, merci." }, { "id": "F7-L1-E4", "type": "wordOrder", "prompt": "Build: I'm looking for a blue shirt in medium", "correctAnswer": "Je cherche une chemise bleue en taille moyenne", "targetLanguage": "Je cherche une chemise bleue en taille moyenne" }, { "id": "F7-L1-E5", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "la taille|size (clothes)", "la pointure|size (shoes)", "la cabine d'essayage|changing room", "la caisse|till/checkout" ] }, { "id": "F7-L1-E6", "type": "speaking", "prompt": "Walk into a shop and say what you're looking for", "correctAnswer": "Bonjour, je cherche [vêtement] en taille [taille].", "targetLanguage": "Bonjour, je cherche [vêtement] en taille [taille]." } ] }, { "id": "F7-L2", "title": "Couleurs et préférences", "description": "Couleurs et préférences", "exercises": [ { "id": "F7-L2-E1", "type": "listening", "prompt": "Which colour?", "correctAnswer": "vert", "options": [ "gris", "bleu", "rouge", "vert" ], "targetLanguage": "vert" }, { "id": "F7-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "rouge|red", "bleu|blue", "vert|green", "noir|black" ] }, { "id": "F7-L2-E3", "type": "multipleChoice", "prompt": "You prefer the white one:", "correctAnswer": "Je préfère le blanc.", "options": [ "Le blanc est beau.", "J'aime blanc.", "Je préfère le blanc.", "Je veux blanc un." ], "targetLanguage": "Je préfère le blanc." }, { "id": "F7-L2-E4", "type": "wordOrder", "prompt": "Build: Do you have this in red or green?", "correctAnswer": "Vous l'avez en rouge ou en vert ?", "targetLanguage": "Vous l'avez en rouge ou en vert ?" }, { "id": "F7-L2-E5", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "blanc|white", "gris|grey", "jaune|yellow", "marron|brown" ] }, { "id": "F7-L2-E6", "type": "speaking", "prompt": "Describe what you're wearing today in French", "correctAnswer": "Aujourd'hui je porte [vêtement] [couleur]...", "targetLanguage": "Aujourd'hui je porte [vêtement] [couleur]..." } ] }, { "id": "F7-L3", "title": "Essayer des vêtements", "description": "Essayer des vêtements", "exercises": [ { "id": "F7-L3-E1", "type": "listening", "prompt": "What does the person want to do?", "correctAnswer": "Essayer la veste", "options": [ "Acheter la jupe", "Payer la robe", "Rendre le pantalon", "Essayer la veste" ], "targetLanguage": "Je peux essayer la veste ?" }, { "id": "F7-L3-E2", "type": "multipleChoice", "prompt": "You want to try something on:", "correctAnswer": "Je peux l'essayer ?", "options": [ "Où est la cabine ?", "Je peux l'essayer ?", "Combien ça coûte ?", "Je peux l'avoir ?" ], "targetLanguage": "Je peux l'essayer ?" }, { "id": "F7-L3-E3", "type": "wordOrder", "prompt": "Build: Can I try on this dress in size 42?", "correctAnswer": "Je peux essayer cette robe en taille quarante-deux ?", "targetLanguage": "Je peux essayer cette robe en taille quarante-deux ?" }, { "id": "F7-L3-E4", "type": "multipleChoice", "prompt": "The jacket is too small:", "correctAnswer": "Elle est trop petite.", "options": [ "Elle me va bien.", "Elle est trop petite.", "Elle est trop grande.", "Je n'aime pas la couleur." ], "targetLanguage": "Elle est trop petite." }, { "id": "F7-L3-E5", "type": "wordOrder", "prompt": "Build: Do you have a bigger size?", "correctAnswer": "Vous avez une taille au-dessus ?", "targetLanguage": "Vous avez une taille au-dessus ?" }, { "id": "F7-L3-E6", "type": "speaking", "prompt": "Try on an item and give feedback", "correctAnswer": "Elle est [trop grande/petite]. Vous avez une taille [au-dessus/en dessous] ?", "targetLanguage": "Elle est [trop grande/petite]. Vous avez une taille [au-dessus/en dessous] ?" } ] }, { "id": "F7-L4", "title": "Retours et remboursements", "description": "Retours et remboursements", "exercises": [ { "id": "F7-L4-E1", "type": "listening", "prompt": "What is the customer doing?", "correctAnswer": "Rend un achat", "options": [ "Demande une information", "Paye", "Essaie une robe", "Rend un achat" ], "targetLanguage": "Je voudrais rendre cet article." }, { "id": "F7-L4-E2", "type": "multipleChoice", "prompt": "You want to return an item:", "correctAnswer": "Je voudrais faire un retour.", "options": [ "Je peux avoir un remboursement ?", "Je voudrais faire un retour.", "Je n'aime pas ça.", "Je veux un échange." ], "targetLanguage": "Je voudrais faire un retour." }, { "id": "F7-L4-E3", "type": "wordOrder", "prompt": "Build: This jacket has a defect I'd like a refund", "correctAnswer": "Cette veste a un défaut je voudrais un remboursement", "targetLanguage": "Cette veste a un défaut je voudrais un remboursement" }, { "id": "F7-L4-E4", "type": "multipleChoice", "prompt": "'J'ai le reçu' helps because:", "correctAnswer": "The receipt proves the purchase", "options": [ "It means free delivery", "It's required only in Paris", "It gives a discount", "The receipt proves the purchase" ], "targetLanguage": "J'ai le reçu" }, { "id": "F7-L4-E5", "type": "wordOrder", "prompt": "Build: Can I exchange it for the same in black?", "correctAnswer": "Je peux l'échanger contre le même en noir ?", "targetLanguage": "Je peux l'échanger contre le même en noir ?" }, { "id": "F7-L4-E6", "type": "speaking", "prompt": "Return a defective item and ask for an exchange", "correctAnswer": "Bonjour, je voudrais rendre ce/cette [vêtement], il/elle a un défaut.", "targetLanguage": "Bonjour, je voudrais rendre ce/cette [vêtement], il/elle a un défaut." } ] } ] }, { "id": "F8", "title": "Loisirs", "description": "Hobbies, plans and leisure", "icon": "figure.run", "lessons": [ { "id": "F8-L1", "title": "Les activités de loisirs", "description": "Les activités de loisirs", "exercises": [ { "id": "F8-L1-E1", "type": "listening", "prompt": "What does the speaker like doing?", "correctAnswer": "lire", "options": [ "courir", "lire", "cuisiner", "voyager" ], "targetLanguage": "J'aime lire." }, { "id": "F8-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "lire|to read", "cuisiner|to cook", "écouter de la musique|to listen to music", "faire du sport|to do sport" ] }, { "id": "F8-L1-E3", "type": "multipleChoice", "prompt": "How do you ask 'What do you like doing in your free time?'", "correctAnswer": "Qu'est-ce que tu aimes faire pendant ton temps libre ?", "options": [ "Qu'est-ce que tu fais d'habitude ?", "Qu'est-ce que tu aimes faire pendant ton temps libre ?", "Tu as du temps libre ?", "Qu'est-ce que tu veux faire ?" ], "targetLanguage": "Qu'est-ce que tu aimes faire pendant ton temps libre ?" }, { "id": "F8-L1-E4", "type": "wordOrder", "prompt": "Build: I like cooking and reading but I don't like running", "correctAnswer": "J'aime cuisiner et lire mais je n'aime pas courir", "targetLanguage": "J'aime cuisiner et lire mais je n'aime pas courir" }, { "id": "F8-L1-E5", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "voyager|to travel", "courir|to run", "peindre|to paint", "jouer au foot|to play football" ] }, { "id": "F8-L1-E6", "type": "speaking", "prompt": "Say three things you enjoy doing in your free time", "correctAnswer": "Pendant mon temps libre j'aime [X], [Y] et [Z].", "targetLanguage": "Pendant mon temps libre j'aime [X], [Y] et [Z]." } ] }, { "id": "F8-L2", "title": "Faire des projets", "description": "Faire des projets", "exercises": [ { "id": "F8-L2-E1", "type": "listening", "prompt": "What plan is being made?", "correctAnswer": "aller au cinéma ce soir", "options": [ "se promener", "aller au cinéma ce soir", "aller à la salle de sport", "manger dehors" ], "targetLanguage": "On va au cinéma ce soir ?" }, { "id": "F8-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Ça te dit de... ?|Do you fancy...?", "On sort ?|Shall we go out?", "Tu es libre ?|Are you free?", "Allons-y !|Let's go!" ] }, { "id": "F8-L2-E3", "type": "multipleChoice", "prompt": "'Ça te dit de prendre un café ?' means:", "correctAnswer": "Do you fancy getting a coffee?", "options": [ "Would you like some coffee?", "Do you fancy getting a coffee?", "Where's the coffee?", "Did you drink coffee?" ], "targetLanguage": "Ça te dit de prendre un café ?" }, { "id": "F8-L2-E4", "type": "wordOrder", "prompt": "Build: Are you free on Saturday evening?", "correctAnswer": "Tu es libre samedi soir ?", "targetLanguage": "Tu es libre samedi soir ?" }, { "id": "F8-L2-E5", "type": "multipleChoice", "prompt": "You can't make it:", "correctAnswer": "Désolé(e), je ne peux pas.", "options": [ "Allons-y !", "Désolé(e), je ne peux pas.", "D'accord !", "Oui, bien sûr !" ], "targetLanguage": "Désolé(e), je ne peux pas." }, { "id": "F8-L2-E6", "type": "speaking", "prompt": "Invite a friend to do something this weekend", "correctAnswer": "Ça te dit de [activité] ce week-end ? Tu es libre ?", "targetLanguage": "Ça te dit de [activité] ce week-end ? Tu es libre ?" } ] }, { "id": "F8-L3", "title": "Sport et santé", "description": "Sport et santé", "exercises": [ { "id": "F8-L3-E1", "type": "listening", "prompt": "Which sport?", "correctAnswer": "la natation", "options": [ "le foot", "le tennis", "le cyclisme", "la natation" ], "targetLanguage": "Je fais de la natation." }, { "id": "F8-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "faire du yoga|to do yoga", "aller à la salle de sport|to go to the gym", "jouer au tennis|to play tennis", "nager|to swim" ] }, { "id": "F8-L3-E3", "type": "multipleChoice", "prompt": "'I go to the gym three times a week':", "correctAnswer": "Je vais à la salle de sport trois fois par semaine.", "options": [ "Salle de sport trois fois.", "Trois fois salle je vais.", "Je fais salle de sport trois semaines.", "Je vais à la salle de sport trois fois par semaine." ], "targetLanguage": "Je vais à la salle de sport trois fois par semaine." }, { "id": "F8-L3-E4", "type": "wordOrder", "prompt": "Build: I play football on Sundays with my friends", "correctAnswer": "Je joue au foot le dimanche avec mes amis", "targetLanguage": "Je joue au foot le dimanche avec mes amis" }, { "id": "F8-L3-E5", "type": "multipleChoice", "prompt": "'Rester en forme' means:", "correctAnswer": "To stay in shape / keep fit", "options": [ "To stay in shape / keep fit", "To stay warm", "To feel comfortable", "To stay at home" ], "targetLanguage": "Rester en forme" }, { "id": "F8-L3-E6", "type": "speaking", "prompt": "Talk about your exercise routine", "correctAnswer": "Je fais [sport] [fréquence]. J'aime ça parce que [raison].", "targetLanguage": "Je fais [sport] [fréquence]. J'aime ça parce que [raison]." } ] }, { "id": "F8-L4", "title": "Les vacances", "description": "Les vacances", "exercises": [ { "id": "F8-L4-E1", "type": "listening", "prompt": "Where did the person go on holiday?", "correctAnswer": "en Bretagne", "options": [ "en Normandie", "en Provence", "en Bretagne", "en Alsace" ], "targetLanguage": "Je suis allé(e) en Bretagne en vacances." }, { "id": "F8-L4-E2", "type": "multipleChoice", "prompt": "How do you ask 'Where did you go on holiday ?'", "correctAnswer": "Où tu es allé(e) en vacances ?", "options": [ "Où tu es allé(e) en vacances ?", "Tu vas souvent en vacances ?", "Où vas-tu en vacances ?", "C'est quoi tes vacances ?" ], "targetLanguage": "Où tu es allé(e) en vacances ?" }, { "id": "F8-L4-E3", "type": "wordOrder", "prompt": "Build: Last summer I went to the south of France for two weeks", "correctAnswer": "L'été dernier je suis allé(e) dans le sud de la France pendant deux semaines", "targetLanguage": "L'été dernier je suis allé(e) dans le sud de la France pendant deux semaines" }, { "id": "F8-L4-E4", "type": "multipleChoice", "prompt": "'C'était fantastique !' means:", "correctAnswer": "It was fantastic!", "options": [ "Very fantastic.", "It was so beautiful.", "It was excellent.", "It was fantastic!" ], "targetLanguage": "C'était fantastique !" }, { "id": "F8-L4-E5", "type": "wordOrder", "prompt": "Build: Next summer I want to visit Marseille and Nice", "correctAnswer": "L'été prochain je veux visiter Marseille et Nice", "targetLanguage": "L'été prochain je veux visiter Marseille et Nice" }, { "id": "F8-L4-E6", "type": "speaking", "prompt": "Tell someone about your best holiday or where you want to go next", "correctAnswer": "Mes meilleures vacances étaient à [lieu]... / Je veux aller à [lieu] parce que...", "targetLanguage": "Mes meilleures vacances étaient à [lieu]... / Je veux aller à [lieu] parce que..." } ] } ] }, { "id": "E1", "title": "La routine quotidienne", "description": "Describe your daily life in French", "icon": "clock.fill", "lessons": [ { "id": "E1-L1", "title": "Le matin", "description": "Le matin", "exercises": [ { "id": "E1-L1-E1", "type": "listening", "prompt": "What time does the speaker wake up?", "correctAnswer": "à sept heures", "options": [ "à six heures", "à sept heures", "à huit heures", "à six heures et demie" ], "targetLanguage": "Je me réveille à sept heures." }, { "id": "E1-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "se réveiller|to wake up", "se lever|to get up", "se doucher|to have a shower", "prendre le petit déjeuner|to have breakfast" ] }, { "id": "E1-L1-E3", "type": "multipleChoice", "prompt": "'Je me lève à sept heures et demie' means:", "correctAnswer": "I get up at half past seven", "options": [ "I get up at half past seven", "I go to bed at half seven", "I wake up at seven", "I have breakfast at seven thirty" ], "targetLanguage": "Je me lève à sept heures et demie" }, { "id": "E1-L1-E4", "type": "translation", "prompt": "Translate: I wake up at seven, shower and then have breakfast", "correctAnswer": "Je me réveille à sept heures, je me douche et ensuite je prends le petit déjeuner", "targetLanguage": "Je me réveille à sept heures, je me douche et ensuite je prends le petit déjeuner" }, { "id": "E1-L1-E5", "type": "translation", "prompt": "Translate: Before leaving home I always drink a coffee", "correctAnswer": "Avant de quitter la maison je bois toujours un café", "targetLanguage": "Avant de quitter la maison je bois toujours un café" }, { "id": "E1-L1-E6", "type": "wordOrder", "prompt": "Build: I leave the house at eight fifteen", "correctAnswer": "Je quitte la maison à huit heures et quart", "targetLanguage": "Je quitte la maison à huit heures et quart" }, { "id": "E1-L1-E7", "type": "listening", "prompt": "What does the speaker do first in the morning?", "correctAnswer": "se douche", "options": [ "se réveille", "prend le petit déjeuner", "s'habille", "se douche" ], "targetLanguage": "D'abord je me douche." }, { "id": "E1-L1-E8", "type": "speaking", "prompt": "Describe your morning routine", "correctAnswer": "Je me réveille à [heure], puis [activité]...", "targetLanguage": "Je me réveille à [heure], puis [activité]..." } ] }, { "id": "E1-L2", "title": "Travail et études", "description": "Travail et études", "exercises": [ { "id": "E1-L2-E1", "type": "listening", "prompt": "How does this person get to work?", "correctAnswer": "en métro", "options": [ "en métro", "à pied", "en voiture", "à vélo" ], "targetLanguage": "Je vais au travail en métro." }, { "id": "E1-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "travailler|to work", "étudier|to study", "la réunion|the meeting", "la pause déjeuner|lunch break" ] }, { "id": "E1-L2-E3", "type": "translation", "prompt": "Translate: I work from nine to six and I have an hour lunch break", "correctAnswer": "Je travaille de neuf heures à dix-huit heures et j'ai une heure de pause déjeuner", "targetLanguage": "Je travaille de neuf heures à dix-huit heures et j'ai une heure de pause déjeuner" }, { "id": "E1-L2-E4", "type": "translation", "prompt": "Translate: I study at university two days a week and work part-time", "correctAnswer": "J'étudie à l'université deux jours par semaine et je travaille à mi-temps", "targetLanguage": "J'étudie à l'université deux jours par semaine et je travaille à mi-temps" }, { "id": "E1-L2-E5", "type": "wordOrder", "prompt": "Build: I usually eat lunch at my desk", "correctAnswer": "D'habitude je mange à mon bureau", "targetLanguage": "D'habitude je mange à mon bureau" }, { "id": "E1-L2-E6", "type": "multipleChoice", "prompt": "How do you say 'I work from home'?", "correctAnswer": "Je travaille à domicile.", "options": [ "Maison travail.", "Je fais travail maison.", "Je travaille chez moi.", "Je travaille à domicile." ], "targetLanguage": "Je travaille à domicile." }, { "id": "E1-L2-E7", "type": "listening", "prompt": "What time does this person finish work?", "correctAnswer": "à dix-huit heures", "options": [ "à dix-huit heures trente", "à dix-neuf heures", "à dix-huit heures", "à dix-sept heures" ], "targetLanguage": "Je finis de travailler à dix-huit heures." }, { "id": "E1-L2-E8", "type": "speaking", "prompt": "Describe your working or studying day", "correctAnswer": "D'habitude [je me réveille/je pars] à [heure]... Je travaille/j'étudie jusqu'à [heure].", "targetLanguage": "D'habitude [je me réveille/je pars] à [heure]... Je travaille/j'étudie jusqu'à [heure]." } ] }, { "id": "E1-L3", "title": "La soirée", "description": "La soirée", "exercises": [ { "id": "E1-L3-E1", "type": "listening", "prompt": "What does the person do in the evening?", "correctAnswer": "regarde la télé", "options": [ "sort avec des amis", "regarde la télé", "cuisine", "lit" ], "targetLanguage": "Le soir je regarde la télé." }, { "id": "E1-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "préparer le dîner|to cook dinner", "se détendre|to relax", "regarder la télé|to watch TV", "aller se coucher|to go to bed" ] }, { "id": "E1-L3-E3", "type": "translation", "prompt": "Translate: In the evening I usually cook dinner then watch a series", "correctAnswer": "Le soir je cuisine généralement le dîner puis je regarde une série", "targetLanguage": "Le soir je cuisine généralement le dîner puis je regarde une série" }, { "id": "E1-L3-E4", "type": "translation", "prompt": "Translate: I go to bed at eleven and read for half an hour before sleeping", "correctAnswer": "Je me couche à onze heures et je lis pendant une demi-heure avant de dormir", "targetLanguage": "Je me couche à onze heures et je lis pendant une demi-heure avant de dormir" }, { "id": "E1-L3-E5", "type": "wordOrder", "prompt": "Build: At the weekend I like to go out with friends", "correctAnswer": "Le week-end j'aime sortir avec mes amis", "targetLanguage": "Le week-end j'aime sortir avec mes amis" }, { "id": "E1-L3-E6", "type": "multipleChoice", "prompt": "'Je m'endors tout de suite' means:", "correctAnswer": "I fall asleep straight away", "options": [ "I fall asleep straight away", "I wake up immediately", "I sleep late", "I go to bed early" ], "targetLanguage": "Je m'endors tout de suite" }, { "id": "E1-L3-E7", "type": "listening", "prompt": "What time does this person go to bed?", "correctAnswer": "à minuit", "options": [ "à onze heures", "à onze heures et demie", "à dix heures", "à minuit" ], "targetLanguage": "Je me couche à minuit." }, { "id": "E1-L3-E8", "type": "speaking", "prompt": "Describe a typical evening in your life", "correctAnswer": "Le soir je [activité] généralement... Je me couche vers [heure].", "targetLanguage": "Le soir je [activité] généralement... Je me couche vers [heure]." } ] }, { "id": "E1-L4", "title": "Habitudes et fréquence", "description": "Habitudes et fréquence", "exercises": [ { "id": "E1-L4-E1", "type": "listening", "prompt": "How often does the speaker exercise?", "correctAnswer": "trois fois par semaine", "options": [ "tous les jours", "rarement", "une fois par semaine", "trois fois par semaine" ], "targetLanguage": "Je fais du sport trois fois par semaine." }, { "id": "E1-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "toujours|always", "souvent|often", "parfois|sometimes", "rarement|rarely" ] }, { "id": "E1-L4-E3", "type": "translation", "prompt": "Translate: I always have breakfast but I rarely have dinner at home", "correctAnswer": "Je prends toujours le petit déjeuner mais je dîne rarement à la maison", "targetLanguage": "Je prends toujours le petit déjeuner mais je dîne rarement à la maison" }, { "id": "E1-L4-E4", "type": "translation", "prompt": "Translate: I sometimes go to the gym but I prefer to run outdoors", "correctAnswer": "Je vais parfois à la salle de sport mais je préfère courir en plein air", "targetLanguage": "Je vais parfois à la salle de sport mais je préfère courir en plein air" }, { "id": "E1-L4-E5", "type": "wordOrder", "prompt": "Build: I hardly ever watch TV I prefer to read", "correctAnswer": "Je regarde rarement la télé je préfère lire", "targetLanguage": "Je regarde rarement la télé je préfère lire" }, { "id": "E1-L4-E6", "type": "multipleChoice", "prompt": "'D'habitude' means:", "correctAnswer": "Usually", "options": [ "Always", "Sometimes", "Never", "Usually" ], "targetLanguage": "D'habitude" }, { "id": "E1-L4-E7", "type": "listening", "prompt": "What does the speaker do every Sunday?", "correctAnswer": "déjeune en famille", "options": [ "fait du sport", "déjeune en famille", "travaille", "dort tard" ], "targetLanguage": "Chaque dimanche je déjeune en famille." }, { "id": "E1-L4-E8", "type": "speaking", "prompt": "Describe your habits using toujours, souvent, parfois, rarement", "correctAnswer": "Je [fais] toujours [X]... parfois [Y]... rarement [Z]...", "targetLanguage": "Je [fais] toujours [X]... parfois [Y]... rarement [Z]..." } ] } ] }, { "id": "E2", "title": "Faire des projets", "description": "Make plans and talk about the future", "icon": "calendar", "lessons": [ { "id": "E2-L1", "title": "Suggérer et inviter", "description": "Suggérer et inviter", "exercises": [ { "id": "E2-L1-E1", "type": "listening", "prompt": "What is being suggested?", "correctAnswer": "aller au cinéma", "options": [ "manger dehors", "se promener", "aller à la salle de sport", "aller au cinéma" ], "targetLanguage": "On va au cinéma ?" }, { "id": "E2-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Pourquoi pas...?|Why not...?", "Qu'est-ce que tu dirais de...?|What do you think about...?", "Ça te dit de...?|Do you fancy...?", "On se retrouve...?|Shall we meet...?" ] }, { "id": "E2-L1-E3", "type": "translation", "prompt": "Translate: Why don't we meet this Saturday and go for a walk?", "correctAnswer": "On se retrouve ce samedi et on se balade ?", "targetLanguage": "On se retrouve ce samedi et on se balade ?" }, { "id": "E2-L1-E4", "type": "translation", "prompt": "Translate: What do you think about going to that new restaurant on Friday?", "correctAnswer": "Qu'est-ce que tu dirais d'aller à ce nouveau restaurant vendredi ?", "targetLanguage": "Qu'est-ce que tu dirais d'aller à ce nouveau restaurant vendredi ?" }, { "id": "E2-L1-E5", "type": "wordOrder", "prompt": "Build: Shall we meet at eight in front of the cinema?", "correctAnswer": "On se retrouve à huit heures devant le cinéma ?", "targetLanguage": "On se retrouve à huit heures devant le cinéma ?" }, { "id": "E2-L1-E6", "type": "multipleChoice", "prompt": "Your friend says 'Bonne idée !' — they:", "correctAnswer": "Think it's a great idea", "options": [ "Don't want to go", "Are too busy", "Need to check their diary", "Think it's a great idea" ], "targetLanguage": "Bonne idée !" }, { "id": "E2-L1-E7", "type": "listening", "prompt": "Where will they meet?", "correctAnswer": "devant la gare", "options": [ "au café", "devant la gare", "au cinéma", "sur la place" ], "targetLanguage": "On se retrouve devant la gare." }, { "id": "E2-L1-E8", "type": "speaking", "prompt": "Invite a friend to do something and agree on a time and place", "correctAnswer": "Ça te dit de [activité] ? On se retrouve à [heure] à [lieu] ?", "targetLanguage": "Ça te dit de [activité] ? On se retrouve à [heure] à [lieu] ?" } ] }, { "id": "E2-L2", "title": "Accepter et refuser", "description": "Accepter et refuser", "exercises": [ { "id": "E2-L2-E1", "type": "listening", "prompt": "Does the person accept or decline?", "correctAnswer": "accepte", "options": [ "refuse", "accepte", "est indécis", "demande du temps" ], "targetLanguage": "Oui, avec plaisir !" }, { "id": "E2-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Oui, avec plaisir !|Yes, I'd love to!", "Bien sûr, pourquoi pas ?|Sure, why not?", "Désolé(e), je ne peux pas.|Sorry, I can't.", "Une autre fois, peut-être.|Another time, maybe." ] }, { "id": "E2-L2-E3", "type": "translation", "prompt": "Translate: I'm sorry I can't come on Saturday I have a family commitment", "correctAnswer": "Je suis désolé(e) je ne peux pas venir samedi j'ai un engagement familial", "targetLanguage": "Je suis désolé(e) je ne peux pas venir samedi j'ai un engagement familial" }, { "id": "E2-L2-E4", "type": "translation", "prompt": "Translate: I'd love to but I already have plans — how about Sunday?", "correctAnswer": "J'adorerais mais j'ai déjà des projets, qu'est-ce que tu dirais de dimanche ?", "targetLanguage": "J'adorerais mais j'ai déjà des projets, qu'est-ce que tu dirais de dimanche ?" }, { "id": "E2-L2-E5", "type": "wordOrder", "prompt": "Build: Sure! What time and where shall we meet?", "correctAnswer": "Bien sûr ! À quelle heure et où on se retrouve ?", "targetLanguage": "Bien sûr ! À quelle heure et où on se retrouve ?" }, { "id": "E2-L2-E6", "type": "multipleChoice", "prompt": "'J'ai déjà des projets' means:", "correctAnswer": "I already have plans", "options": [ "I'm already tired", "I already have plans", "I don't want to go", "I'm already there" ], "targetLanguage": "J'ai déjà des projets" }, { "id": "E2-L2-E7", "type": "listening", "prompt": "Does the person say yes or make an excuse?", "correctAnswer": "fait une excuse", "options": [ "est enthousiaste", "dit oui", "propose une alternative", "fait une excuse" ], "targetLanguage": "Désolé(e), je ne peux pas." }, { "id": "E2-L2-E8", "type": "speaking", "prompt": "Respond to an invitation: accept enthusiastically or decline with an alternative", "correctAnswer": "Oui, avec plaisir ! / Désolé(e) je ne peux pas... qu'est-ce que tu dirais de [alternative] ?", "targetLanguage": "Oui, avec plaisir ! / Désolé(e) je ne peux pas... qu'est-ce que tu dirais de [alternative] ?" } ] }, { "id": "E2-L3", "title": "Projets futurs", "description": "Projets futurs", "exercises": [ { "id": "E2-L3-E1", "type": "listening", "prompt": "When is the person going on holiday?", "correctAnswer": "le mois prochain", "options": [ "la semaine prochaine", "en juillet", "l'année prochaine", "le mois prochain" ], "targetLanguage": "Je pars en vacances le mois prochain." }, { "id": "E2-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le mois prochain|next month", "la semaine prochaine|next week", "dans deux jours|in two days", "l'année prochaine|next year" ] }, { "id": "E2-L3-E3", "type": "translation", "prompt": "Translate: Next month I'm going to Brittany for ten days", "correctAnswer": "Le mois prochain je vais en Bretagne pour dix jours", "targetLanguage": "Le mois prochain je vais en Bretagne pour dix jours" }, { "id": "E2-L3-E4", "type": "translation", "prompt": "Translate: We're planning to buy a house in the next two years", "correctAnswer": "On a le projet d'acheter une maison dans les deux prochaines années", "targetLanguage": "On a le projet d'acheter une maison dans les deux prochaines années" }, { "id": "E2-L3-E5", "type": "wordOrder", "prompt": "Build: I'm thinking of changing jobs next year", "correctAnswer": "Je pense à changer de travail l'année prochaine", "targetLanguage": "Je pense à changer de travail l'année prochaine" }, { "id": "E2-L3-E6", "type": "multipleChoice", "prompt": "'J'ai prévu de' means:", "correctAnswer": "I'm planning to", "options": [ "I wish I could", "I've already decided to", "I used to", "I'm planning to" ], "targetLanguage": "J'ai prévu de" }, { "id": "E2-L3-E7", "type": "listening", "prompt": "What is the person planning to do?", "correctAnswer": "changer de travail", "options": [ "changer de travail", "se marier", "déménager", "voyager" ], "targetLanguage": "Je pense à changer de travail." }, { "id": "E2-L3-E8", "type": "speaking", "prompt": "Talk about two things you're planning in the next few months", "correctAnswer": "Le mois prochain j'ai prévu de [X]... Je pense aussi à [Y]...", "targetLanguage": "Le mois prochain j'ai prévu de [X]... Je pense aussi à [Y]..." } ] }, { "id": "E2-L4", "title": "Changer et annuler des plans", "description": "Changer et annuler des plans", "exercises": [ { "id": "E2-L4-E1", "type": "listening", "prompt": "What happened to the plan?", "correctAnswer": "a été annulé", "options": [ "a été annulé", "a été reporté", "s'est bien passé", "est confirmé" ], "targetLanguage": "Malheureusement je dois annuler." }, { "id": "E2-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "annuler|to cancel", "reporter|to postpone", "déplacer|to reschedule", "confirmer|to confirm" ] }, { "id": "E2-L4-E3", "type": "translation", "prompt": "Translate: I'm afraid I need to cancel our meeting something urgent came up", "correctAnswer": "J'ai bien peur de devoir annuler notre réunion quelque chose d'urgent est survenu", "targetLanguage": "J'ai bien peur de devoir annuler notre réunion quelque chose d'urgent est survenu" }, { "id": "E2-L4-E4", "type": "translation", "prompt": "Translate: Can we move dinner to next Saturday instead?", "correctAnswer": "On peut déplacer le dîner au samedi suivant ?", "targetLanguage": "On peut déplacer le dîner au samedi suivant ?" }, { "id": "E2-L4-E5", "type": "wordOrder", "prompt": "Build: No problem we can reschedule for next week", "correctAnswer": "Pas de problème on peut reporter à la semaine prochaine", "targetLanguage": "Pas de problème on peut reporter à la semaine prochaine" }, { "id": "E2-L4-E6", "type": "multipleChoice", "prompt": "'Il s'est passé quelque chose d'imprévu' means:", "correctAnswer": "Something unexpected has come up", "options": [ "Something unexpected has come up", "I'm unexpectedly free", "I made an unexpected choice", "Plans were unexpected" ], "targetLanguage": "Il s'est passé quelque chose d'imprévu" }, { "id": "E2-L4-E7", "type": "listening", "prompt": "What does the speaker propose?", "correctAnswer": "déplacer le déjeuner au dimanche", "options": [ "confirmer le plan", "avancer le déjeuner", "déplacer le déjeuner au dimanche", "tout annuler" ], "targetLanguage": "On peut déplacer le déjeuner au dimanche ?" }, { "id": "E2-L4-E8", "type": "speaking", "prompt": "Cancel or reschedule a plan with an apology and an alternative", "correctAnswer": "Je suis désolé(e) je dois annuler [plan]... Il s'est passé quelque chose d'imprévu. On peut [alternative] ?", "targetLanguage": "Je suis désolé(e) je dois annuler [plan]... Il s'est passé quelque chose d'imprévu. On peut [alternative] ?" } ] } ] }, { "id": "E3", "title": "Au restaurant", "description": "Handle a full restaurant experience in French", "icon": "fork.knife", "lessons": [ { "id": "E3-L1", "title": "Réserver une table", "description": "Réserver une table", "exercises": [ { "id": "E3-L1-E1", "type": "listening", "prompt": "How many for the reservation?", "correctAnswer": "quatre", "options": [ "cinq", "trois", "quatre", "deux" ], "targetLanguage": "Je voudrais réserver une table pour quatre." }, { "id": "E3-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "réserver|to book/reserve", "la table|table", "pour ce soir|for tonight", "en terrasse|outside/on the terrace" ] }, { "id": "E3-L1-E3", "type": "translation", "prompt": "Translate: I'd like to reserve a table for two for tonight at half past eight", "correctAnswer": "Je voudrais réserver une table pour deux pour ce soir à vingt heures trente", "targetLanguage": "Je voudrais réserver une table pour deux pour ce soir à vingt heures trente" }, { "id": "E3-L1-E4", "type": "translation", "prompt": "Translate: Do you have a table on the terrace? We prefer to sit outside", "correctAnswer": "Vous avez une table en terrasse ? Nous préférons nous asseoir dehors", "targetLanguage": "Vous avez une table en terrasse ? Nous préférons nous asseoir dehors" }, { "id": "E3-L1-E5", "type": "wordOrder", "prompt": "Build: The booking is under the name Dupont", "correctAnswer": "La réservation est au nom de Dupont", "targetLanguage": "La réservation est au nom de Dupont" }, { "id": "E3-L1-E6", "type": "multipleChoice", "prompt": "The host asks 'Vous avez réservé ?' — they want to know:", "correctAnswer": "If you have a reservation", "options": [ "If you've eaten here before", "How many people", "If you have a reservation", "If you want a menu" ], "targetLanguage": "Vous avez réservé ?" }, { "id": "E3-L1-E7", "type": "listening", "prompt": "What time is the reservation?", "correctAnswer": "à vingt heures trente", "options": [ "à vingt heures", "à dix-neuf heures trente", "à vingt heures trente", "à vingt et une heures" ], "targetLanguage": "À vingt heures trente." }, { "id": "E3-L1-E8", "type": "speaking", "prompt": "Call a restaurant and book a table for three for tomorrow evening", "correctAnswer": "Bonsoir, je voudrais réserver une table pour trois personnes pour demain soir à [heure].", "targetLanguage": "Bonsoir, je voudrais réserver une table pour trois personnes pour demain soir à [heure]." } ] }, { "id": "E3-L2", "title": "Commander à manger", "description": "Commander à manger", "exercises": [ { "id": "E3-L2-E1", "type": "listening", "prompt": "What does the person order as a starter?", "correctAnswer": "la soupe", "options": [ "la salade", "la soupe", "l'entrecôte", "les escargots" ], "targetLanguage": "En entrée je prends la soupe." }, { "id": "E3-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "l'entrée|starter", "le plat principal|main course", "le dessert|dessert", "le fromage|cheese course" ] }, { "id": "E3-L2-E3", "type": "translation", "prompt": "Translate: For the starter I'll have the salad and for the main the grilled fish", "correctAnswer": "En entrée je prends la salade et comme plat principal le poisson grillé", "targetLanguage": "En entrée je prends la salade et comme plat principal le poisson grillé" }, { "id": "E3-L2-E4", "type": "translation", "prompt": "Translate: We'd like to share the crème brûlée for dessert", "correctAnswer": "On aimerait partager la crème brûlée comme dessert", "targetLanguage": "On aimerait partager la crème brûlée comme dessert" }, { "id": "E3-L2-E5", "type": "wordOrder", "prompt": "Build: Is the risotto with mushrooms or truffles today?", "correctAnswer": "Le risotto est aux champignons ou aux truffes aujourd'hui ?", "targetLanguage": "Le risotto est aux champignons ou aux truffes aujourd'hui ?" }, { "id": "E3-L2-E6", "type": "multipleChoice", "prompt": "The waiter says 'Que prendrez-vous en entrée ?' — asking about:", "correctAnswer": "Your starter choice", "options": [ "Whether you want a starter", "If you'd like a starter", "What you'd like to drink", "Your starter choice" ], "targetLanguage": "Que prendrez-vous en entrée ?" }, { "id": "E3-L2-E7", "type": "listening", "prompt": "What does the person order for dessert?", "correctAnswer": "la tarte tatin", "options": [ "la tarte tatin", "le sorbet", "la glace", "la mousse au chocolat" ], "targetLanguage": "Comme dessert je prends la tarte tatin." }, { "id": "E3-L2-E8", "type": "speaking", "prompt": "Order a full French meal: starter, main and dessert", "correctAnswer": "En entrée je prends [X], comme plat principal [Y] et comme dessert [Z].", "targetLanguage": "En entrée je prends [X], comme plat principal [Y] et comme dessert [Z]." } ] }, { "id": "E3-L3", "title": "Boissons et demandes spéciales", "description": "Boissons et demandes spéciales", "exercises": [ { "id": "E3-L3-E1", "type": "listening", "prompt": "What type of water?", "correctAnswer": "plate", "options": [ "plate", "du robinet", "minérale", "gazeuse" ], "targetLanguage": "De l'eau plate, s'il vous plaît." }, { "id": "E3-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "plate|still (water)", "gazeuse|sparkling", "de la maison|house (wine)", "en carafe|by the carafe" ] }, { "id": "E3-L3-E3", "type": "translation", "prompt": "Translate: Can you recommend a local wine to go with the duck?", "correctAnswer": "Pouvez-vous me recommander un vin local pour accompagner le canard ?", "targetLanguage": "Pouvez-vous me recommander un vin local pour accompagner le canard ?" }, { "id": "E3-L3-E4", "type": "translation", "prompt": "Translate: I'm allergic to shellfish is there any in this dish?", "correctAnswer": "Je suis allergique aux fruits de mer, il y en a dans ce plat ?", "targetLanguage": "Je suis allergique aux fruits de mer, il y en a dans ce plat ?" }, { "id": "E3-L3-E5", "type": "wordOrder", "prompt": "Build: We'll have a carafe of house red and two still waters", "correctAnswer": "On prend une carafe de vin rouge de la maison et deux eaux plates", "targetLanguage": "On prend une carafe de vin rouge de la maison et deux eaux plates" }, { "id": "E3-L3-E6", "type": "multipleChoice", "prompt": "'Sans gluten' means:", "correctAnswer": "Gluten-free", "options": [ "Without salt", "Dairy-free", "Gluten-free", "Without oil" ], "targetLanguage": "Sans gluten" }, { "id": "E3-L3-E7", "type": "listening", "prompt": "What special request?", "correctAnswer": "sans oignon", "options": [ "sans ail", "sans sel", "sans oignon", "avec oignon" ], "targetLanguage": "Je peux l'avoir sans oignon ?" }, { "id": "E3-L3-E8", "type": "speaking", "prompt": "Order drinks and make a special dietary request", "correctAnswer": "Une eau [plate/gazeuse] et [vin/bière]... Je suis [allergique/intolérant(e)] à [aliment].", "targetLanguage": "Une eau [plate/gazeuse] et [vin/bière]... Je suis [allergique/intolérant(e)] à [aliment]." } ] }, { "id": "E3-L4", "title": "L'avis et l'addition", "description": "L'avis et l'addition", "exercises": [ { "id": "E3-L4-E1", "type": "listening", "prompt": "Is the customer happy?", "correctAnswer": "oui, est satisfait", "options": [ "ne répond pas", "oui, est satisfait", "non, se plaint", "indifférent" ], "targetLanguage": "Tout était délicieux, merci !" }, { "id": "E3-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "excellent|excellent", "délicieux|delicious", "trop cuit|overcooked", "froid|cold" ] }, { "id": "E3-L4-E3", "type": "translation", "prompt": "Translate: Everything was excellent please give our compliments to the chef", "correctAnswer": "Tout était excellent, transmettez nos compliments au chef", "targetLanguage": "Tout était excellent, transmettez nos compliments au chef" }, { "id": "E3-L4-E4", "type": "translation", "prompt": "Translate: Excuse me the pasta is a bit overcooked could you bring another portion?", "correctAnswer": "Excusez-moi, les pâtes sont un peu trop cuites, vous pourriez en apporter une autre portion ?", "targetLanguage": "Excusez-moi, les pâtes sont un peu trop cuites, vous pourriez en apporter une autre portion ?" }, { "id": "E3-L4-E5", "type": "wordOrder", "prompt": "Build: Can we have the bill please? We're paying separately", "correctAnswer": "L'addition s'il vous plaît nous payons séparément", "targetLanguage": "L'addition s'il vous plaît nous payons séparément" }, { "id": "E3-L4-E6", "type": "multipleChoice", "prompt": "'Faire addition séparée' means:", "correctAnswer": "We split the bill", "options": [ "We pay for each other", "I pay this time", "We split the bill", "You pay next time" ], "targetLanguage": "Faire addition séparée" }, { "id": "E3-L4-E7", "type": "listening", "prompt": "How do they want to pay?", "correctAnswer": "par carte", "options": [ "avec un chèque", "moitié-moitié", "par carte", "en espèces" ], "targetLanguage": "Je peux payer par carte ?" }, { "id": "E3-L4-E8", "type": "speaking", "prompt": "Compliment the food, ask for the bill, say how you'd like to pay", "correctAnswer": "Tout était [excellent/délicieux]. L'addition s'il vous plaît. [Je paye par carte / en espèces].", "targetLanguage": "Tout était [excellent/délicieux]. L'addition s'il vous plaît. [Je paye par carte / en espèces]." } ] } ] }, { "id": "E4", "title": "En voyage", "description": "Navigate travel situations with confidence", "icon": "airplane", "lessons": [ { "id": "E4-L1", "title": "À la gare", "description": "À la gare", "exercises": [ { "id": "E4-L1-E1", "type": "listening", "prompt": "What does the traveller need?", "correctAnswer": "un billet pour Paris", "options": [ "un billet pour Paris", "le quai", "un abonnement", "les horaires" ], "targetLanguage": "Je voudrais un billet pour Paris." }, { "id": "E4-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le quai|platform", "le départ|departure", "l'arrivée|arrival", "en retard|delayed" ] }, { "id": "E4-L1-E3", "type": "translation", "prompt": "Translate: Two second class tickets to Lyon for tomorrow morning please", "correctAnswer": "Deux billets de deuxième classe pour Lyon pour demain matin s'il vous plaît", "targetLanguage": "Deux billets de deuxième classe pour Lyon pour demain matin s'il vous plaît" }, { "id": "E4-L1-E4", "type": "translation", "prompt": "Translate: The train is twenty minutes late due to a technical fault", "correctAnswer": "Le train a vingt minutes de retard à cause d'une panne technique", "targetLanguage": "Le train a vingt minutes de retard à cause d'une panne technique" }, { "id": "E4-L1-E5", "type": "wordOrder", "prompt": "Build: Does this train stop at Dijon?", "correctAnswer": "Est-ce que ce train s'arrête à Dijon ?", "targetLanguage": "Est-ce que ce train s'arrête à Dijon ?" }, { "id": "E4-L1-E6", "type": "multipleChoice", "prompt": "'Compostez votre billet avant de monter' means:", "correctAnswer": "Validate your ticket before boarding", "options": [ "Keep your ticket safe", "Show your ticket", "Buy your ticket before boarding", "Validate your ticket before boarding" ], "targetLanguage": "Compostez votre billet avant de monter" }, { "id": "E4-L1-E7", "type": "listening", "prompt": "From which platform?", "correctAnswer": "quai sept", "options": [ "quai huit", "quai sept", "quai cinq", "quai six" ], "targetLanguage": "Le train part du quai sept." }, { "id": "E4-L1-E8", "type": "speaking", "prompt": "Buy a train ticket: destination, class, number of people, and time", "correctAnswer": "Bonjour, je voudrais [nombre] billets pour [destination], [classe], pour [heure/jour].", "targetLanguage": "Bonjour, je voudrais [nombre] billets pour [destination], [classe], pour [heure/jour]." } ] }, { "id": "E4-L2", "title": "À l'hôtel", "description": "À l'hôtel", "exercises": [ { "id": "E4-L2-E1", "type": "listening", "prompt": "What does the guest request?", "correctAnswer": "une chambre avec vue", "options": [ "une chambre double", "le petit déjeuner inclus", "un départ anticipé", "une chambre avec vue" ], "targetLanguage": "Je voudrais une chambre avec vue sur la mer." }, { "id": "E4-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "l'enregistrement|check-in", "le départ|check-out", "la chambre simple|single room", "la chambre double|double room" ] }, { "id": "E4-L2-E3", "type": "translation", "prompt": "Translate: I have a reservation for two nights under the name Dupont", "correctAnswer": "J'ai une réservation pour deux nuits au nom de Dupont", "targetLanguage": "J'ai une réservation pour deux nuits au nom de Dupont" }, { "id": "E4-L2-E4", "type": "translation", "prompt": "Translate: Could I have a wake-up call at seven tomorrow morning please?", "correctAnswer": "Est-ce que je pourrais avoir un réveil à sept heures demain matin s'il vous plaît ?", "targetLanguage": "Est-ce que je pourrais avoir un réveil à sept heures demain matin s'il vous plaît ?" }, { "id": "E4-L2-E5", "type": "wordOrder", "prompt": "Build: Is breakfast included in the room price?", "correctAnswer": "Le petit déjeuner est inclus dans le prix de la chambre ?", "targetLanguage": "Le petit déjeuner est inclus dans le prix de la chambre ?" }, { "id": "E4-L2-E6", "type": "multipleChoice", "prompt": "'Le départ est avant onze heures' means:", "correctAnswer": "Check-out is by eleven", "options": [ "Check-out is by eleven", "Breakfast ends at eleven", "The room is available from eleven", "Check-in starts at eleven" ], "targetLanguage": "Le départ est avant onze heures" }, { "id": "E4-L2-E7", "type": "listening", "prompt": "What problem does the guest report?", "correctAnswer": "la climatisation ne fonctionne pas", "options": [ "il n'y a pas d'eau chaude", "la douche est cassée", "le wifi ne marche pas", "la climatisation ne fonctionne pas" ], "targetLanguage": "La climatisation ne fonctionne pas." }, { "id": "E4-L2-E8", "type": "speaking", "prompt": "Check into a hotel: give your name, confirm nights, ask about breakfast", "correctAnswer": "Bonsoir, j'ai une réservation au nom de [nom] pour [nombre] nuits. Le petit déjeuner est inclus ?", "targetLanguage": "Bonsoir, j'ai une réservation au nom de [nom] pour [nombre] nuits. Le petit déjeuner est inclus ?" } ] }, { "id": "E4-L3", "title": "Problèmes en voyage", "description": "Problèmes en voyage", "exercises": [ { "id": "E4-L3-E1", "type": "listening", "prompt": "What problem does the traveller have?", "correctAnswer": "a perdu ses bagages", "options": [ "a raté le train", "le passeport a expiré", "le vol est en retard", "a perdu ses bagages" ], "targetLanguage": "J'ai perdu mes bagages." }, { "id": "E4-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "j'ai perdu|I've lost", "on m'a volé|it was stolen", "ça ne marche pas|it doesn't work", "j'ai besoin d'aide|I need help" ] }, { "id": "E4-L3-E3", "type": "translation", "prompt": "Translate: I've lost my passport I need to go to the nearest police station", "correctAnswer": "J'ai perdu mon passeport je dois aller au commissariat le plus proche", "targetLanguage": "J'ai perdu mon passeport je dois aller au commissariat le plus proche" }, { "id": "E4-L3-E4", "type": "translation", "prompt": "Translate: My luggage didn't arrive it was supposed to be on flight AF204", "correctAnswer": "Mes bagages ne sont pas arrivés ils devaient être sur le vol AF204", "targetLanguage": "Mes bagages ne sont pas arrivés ils devaient être sur le vol AF204" }, { "id": "E4-L3-E5", "type": "wordOrder", "prompt": "Build: My wallet was stolen I need to block my card", "correctAnswer": "On m'a volé mon portefeuille je dois bloquer ma carte", "targetLanguage": "On m'a volé mon portefeuille je dois bloquer ma carte" }, { "id": "E4-L3-E6", "type": "multipleChoice", "prompt": "'Porter plainte' means:", "correctAnswer": "To file a police report", "options": [ "To report lost luggage", "To call the embassy", "To file a police report", "To make a complaint to the hotel" ], "targetLanguage": "Porter plainte" }, { "id": "E4-L3-E7", "type": "listening", "prompt": "What does the person need urgently?", "correctAnswer": "bloquer la carte de crédit", "options": [ "acheter un nouveau billet", "appeler l'ambassade", "trouver le passeport", "bloquer la carte de crédit" ], "targetLanguage": "Je dois bloquer ma carte de crédit." }, { "id": "E4-L3-E8", "type": "speaking", "prompt": "Report a problem: lost luggage, flight details, description", "correctAnswer": "Mes bagages ne sont pas arrivés. Ils devaient être sur le vol [numéro]. Ils sont [couleur/type]...", "targetLanguage": "Mes bagages ne sont pas arrivés. Ils devaient être sur le vol [numéro]. Ils sont [couleur/type]..." } ] }, { "id": "E4-L4", "title": "Demander des recommandations", "description": "Demander des recommandations", "exercises": [ { "id": "E4-L4-E1", "type": "listening", "prompt": "What is the tourist asking for?", "correctAnswer": "un restaurant typique", "options": [ "un restaurant typique", "une pharmacie", "un hôtel pas cher", "un musée célèbre" ], "targetLanguage": "Pouvez-vous me recommander un restaurant typique ?" }, { "id": "E4-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "recommander|to recommend", "ça vaut la peine|it's worth it", "incontournable|unmissable", "dans les environs|in the area" ] }, { "id": "E4-L4-E3", "type": "translation", "prompt": "Translate: Can you recommend something unmissable in this area?", "correctAnswer": "Pouvez-vous me recommander quelque chose d'incontournable dans cette région ?", "targetLanguage": "Pouvez-vous me recommander quelque chose d'incontournable dans cette région ?" }, { "id": "E4-L4-E4", "type": "translation", "prompt": "Translate: Is it worth visiting the Musée d'Orsay or is it very touristy?", "correctAnswer": "Ça vaut la peine de visiter le Musée d'Orsay ou c'est très touristique ?", "targetLanguage": "Ça vaut la peine de visiter le Musée d'Orsay ou c'est très touristique ?" }, { "id": "E4-L4-E5", "type": "wordOrder", "prompt": "Build: What's the best way to get to the old town from here?", "correctAnswer": "Quel est le meilleur moyen d'aller au centre historique d'ici ?", "targetLanguage": "Quel est le meilleur moyen d'aller au centre historique d'ici ?" }, { "id": "E4-L4-E6", "type": "multipleChoice", "prompt": "'Hors des sentiers battus' means:", "correctAnswer": "Off the beaten track", "options": [ "In the city centre", "Along the main road", "Off the beaten track", "Near the tourist office" ], "targetLanguage": "Hors des sentiers battus" }, { "id": "E4-L4-E7", "type": "listening", "prompt": "What does the local recommend?", "correctAnswer": "le marché aux puces", "options": [ "le château", "le musée", "le marché aux puces", "la cathédrale" ], "targetLanguage": "Je vous recommande le marché, c'est fantastique !" }, { "id": "E4-L4-E8", "type": "speaking", "prompt": "Ask a local for a restaurant and something unmissable nearby", "correctAnswer": "Excusez-moi, pouvez-vous me recommander un bon restaurant près d'ici ? Et qu'est-ce qui est incontournable dans le coin ?", "targetLanguage": "Excusez-moi, pouvez-vous me recommander un bon restaurant près d'ici ? Et qu'est-ce qui est incontournable dans le coin ?" } ] } ] }, { "id": "B1", "title": "Donner son avis", "description": "Express opinions, agree and disagree", "icon": "text.bubble.fill", "lessons": [ { "id": "B1-L1", "title": "Exprimer son avis", "description": "Exprimer son avis", "exercises": [ { "id": "B1-L1-E1", "type": "listening", "prompt": "What opinion is expressed?", "correctAnswer": "pense que c'est positif", "options": [ "est incertain", "pense que c'est positif", "est contre", "est neutre" ], "targetLanguage": "À mon avis c'est une chose positive." }, { "id": "B1-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "À mon avis|In my opinion", "Je pense que|I think that", "Selon moi|According to me", "Il me semble que|It seems to me that" ] }, { "id": "B1-L1-E3", "type": "translation", "prompt": "Translate: In my opinion working from home has more advantages than disadvantages", "correctAnswer": "À mon avis le télétravail a plus d'avantages que d'inconvénients", "targetLanguage": "À mon avis le télétravail a plus d'avantages que d'inconvénients" }, { "id": "B1-L1-E4", "type": "translation", "prompt": "Translate: I think young people today have fewer opportunities than previous generations", "correctAnswer": "Je pense que les jeunes d'aujourd'hui ont moins d'opportunités que les générations précédentes", "targetLanguage": "Je pense que les jeunes d'aujourd'hui ont moins d'opportunités que les générations précédentes" }, { "id": "B1-L1-E5", "type": "wordOrder", "prompt": "Build: I think it's important to learn foreign languages from an early age", "correctAnswer": "Je pense qu'il est important d'apprendre des langues étrangères dès le plus jeune âge", "targetLanguage": "Je pense qu'il est important d'apprendre des langues étrangères dès le plus jeune âge" }, { "id": "B1-L1-E6", "type": "multipleChoice", "prompt": "'Je ne suis pas entièrement d'accord' means:", "correctAnswer": "I don't entirely agree", "options": [ "I completely disagree", "I don't entirely agree", "I'm not sure", "I partially agree" ], "targetLanguage": "Je ne suis pas entièrement d'accord" }, { "id": "B1-L1-E7", "type": "listening", "prompt": "Is the speaker for or against?", "correctAnswer": "pour", "options": [ "contre", "incertain", "neutre", "pour" ], "targetLanguage": "Je suis absolument pour." }, { "id": "B1-L1-E8", "type": "speaking", "prompt": "Give your opinion on working from home: pros, cons, your view", "correctAnswer": "À mon avis le télétravail est [positif/négatif] parce que [raison]...", "targetLanguage": "À mon avis le télétravail est [positif/négatif] parce que [raison]..." } ] }, { "id": "B1-L2", "title": "Être d'accord ou non", "description": "Être d'accord ou non", "exercises": [ { "id": "B1-L2-E1", "type": "listening", "prompt": "Does the speaker agree?", "correctAnswer": "est d'accord", "options": [ "s'en fiche", "n'est pas d'accord", "change de sujet", "est d'accord" ], "targetLanguage": "Tu as tout à fait raison." }, { "id": "B1-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Tu as raison|You're right", "Je suis d'accord|I agree", "Je ne suis pas d'accord|I disagree", "Ça dépend|It depends" ] }, { "id": "B1-L2-E3", "type": "translation", "prompt": "Translate: You're absolutely right that's exactly what I think", "correctAnswer": "Tu as absolument raison c'est exactement ce que je pense", "targetLanguage": "Tu as absolument raison c'est exactement ce que je pense" }, { "id": "B1-L2-E4", "type": "translation", "prompt": "Translate: I see your point but I think the situation is more complex than that", "correctAnswer": "Je vois où tu veux en venir mais je pense que la situation est plus complexe que ça", "targetLanguage": "Je vois où tu veux en venir mais je pense que la situation est plus complexe que ça" }, { "id": "B1-L2-E5", "type": "wordOrder", "prompt": "Build: I partly agree but I think we should consider the other side too", "correctAnswer": "Je suis en partie d'accord mais je pense qu'on devrait considérer l'autre côté aussi", "targetLanguage": "Je suis en partie d'accord mais je pense qu'on devrait considérer l'autre côté aussi" }, { "id": "B1-L2-E6", "type": "multipleChoice", "prompt": "'Je vois où tu veux en venir mais...' signals:", "correctAnswer": "A polite disagreement coming", "options": [ "A change of topic", "A question", "Full agreement", "A polite disagreement coming" ], "targetLanguage": "Je vois où tu veux en venir mais..." }, { "id": "B1-L2-E7", "type": "listening", "prompt": "How does the speaker react?", "correctAnswer": "concède un point mais ajoute une réserve", "options": [ "rejette l'argument", "est entièrement d'accord", "concède un point mais ajoute une réserve", "change d'avis" ], "targetLanguage": "Je comprends, mais ça dépend du contexte." }, { "id": "B1-L2-E8", "type": "speaking", "prompt": "Discuss: Is social media more positive or negative for young people?", "correctAnswer": "À mon avis les réseaux sociaux sont [positifs/négatifs] parce que [raison]... Mais [réserve]...", "targetLanguage": "À mon avis les réseaux sociaux sont [positifs/négatifs] parce que [raison]... Mais [réserve]..." } ] }, { "id": "B1-L3", "title": "Sujets d'actualité", "description": "Sujets d'actualité", "exercises": [ { "id": "B1-L3-E1", "type": "listening", "prompt": "What topic is being discussed?", "correctAnswer": "le changement climatique", "options": [ "le changement climatique", "l'éducation", "la politique", "l'économie" ], "targetLanguage": "Parlons du changement climatique." }, { "id": "B1-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le problème principal|the main problem", "la solution possible|a possible solution", "il faudrait|one should / we ought to", "c'est essentiel|it's essential" ] }, { "id": "B1-L3-E3", "type": "translation", "prompt": "Translate: Climate change is one of the most serious problems of our time and we must act quickly", "correctAnswer": "Le changement climatique est l'un des problèmes les plus graves de notre époque et nous devons agir vite", "targetLanguage": "Le changement climatique est l'un des problèmes les plus graves de notre époque et nous devons agir vite" }, { "id": "B1-L3-E4", "type": "translation", "prompt": "Translate: In my opinion governments should invest more in renewable energy instead of subsidising fossil fuels", "correctAnswer": "Selon moi les gouvernements devraient investir davantage dans les énergies renouvelables plutôt que de subventionner les combustibles fossiles", "targetLanguage": "Selon moi les gouvernements devraient investir davantage dans les énergies renouvelables plutôt que de subventionner les combustibles fossiles" }, { "id": "B1-L3-E5", "type": "wordOrder", "prompt": "Build: It's essential that everyone does their part to protect the environment", "correctAnswer": "C'est essentiel que chacun fasse sa part pour protéger l'environnement", "targetLanguage": "C'est essentiel que chacun fasse sa part pour protéger l'environnement" }, { "id": "B1-L3-E6", "type": "multipleChoice", "prompt": "'Il faudrait faire plus' means:", "correctAnswer": "More should be done", "options": [ "We have done enough", "More should be done", "There's nothing more to do", "Something was done" ], "targetLanguage": "Il faudrait faire plus" }, { "id": "B1-L3-E7", "type": "listening", "prompt": "What solution does the speaker propose?", "correctAnswer": "réduire les combustibles fossiles", "options": [ "réduire les transports", "augmenter les impôts", "réduire les combustibles fossiles", "interdire les voitures" ], "targetLanguage": "Il faudrait réduire les combustibles fossiles." }, { "id": "B1-L3-E8", "type": "speaking", "prompt": "Discuss a current issue: state the problem, give your opinion, propose a solution", "correctAnswer": "Le problème principal est [X]. À mon avis [opinion]. Je pense qu'il faudrait [solution].", "targetLanguage": "Le problème principal est [X]. À mon avis [opinion]. Je pense qu'il faudrait [solution]." } ] }, { "id": "B1-L4", "title": "Gérer le désaccord", "description": "Gérer le désaccord", "exercises": [ { "id": "B1-L4-E1", "type": "listening", "prompt": "How does the speaker handle disagreement?", "correctAnswer": "reconnaît le point de l'autre", "options": [ "se met en colère", "l'ignore", "reconnaît le point de l'autre", "change de sujet" ], "targetLanguage": "Je comprends ce que tu veux dire, même si je ne suis pas du même avis." }, { "id": "B1-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Je comprends ce que tu veux dire|I understand what you mean", "Je ne suis pas du même avis|I don't share your view", "Tu as soulevé un bon point|You've raised a good point", "On peut ne pas être d'accord|We can agree to disagree" ] }, { "id": "B1-L4-E3", "type": "translation", "prompt": "Translate: I understand what you mean but I think the evidence points in the opposite direction", "correctAnswer": "Je comprends ce que tu veux dire mais je pense que les preuves pointent dans la direction opposée", "targetLanguage": "Je comprends ce que tu veux dire mais je pense que les preuves pointent dans la direction opposée" }, { "id": "B1-L4-E4", "type": "translation", "prompt": "Translate: You've raised a good point I hadn't thought about it from that angle", "correctAnswer": "Tu as soulevé un bon point je n'y avais pas pensé sous cet angle", "targetLanguage": "Tu as soulevé un bon point je n'y avais pas pensé sous cet angle" }, { "id": "B1-L4-E5", "type": "wordOrder", "prompt": "Build: Maybe we are both right from our different points of view", "correctAnswer": "Peut-être qu'on a tous les deux raison de nos points de vue différents", "targetLanguage": "Peut-être qu'on a tous les deux raison de nos points de vue différents" }, { "id": "B1-L4-E6", "type": "multipleChoice", "prompt": "'On peut ne pas être d'accord' means:", "correctAnswer": "We can agree to disagree", "options": [ "We need to reach an agreement", "Let's change the subject", "We can agree to disagree", "One of us must be wrong" ], "targetLanguage": "On peut ne pas être d'accord" }, { "id": "B1-L4-E7", "type": "listening", "prompt": "What does the speaker concede?", "correctAnswer": "que le point de l'autre est valide", "options": [ "qu'il a tort", "qu'il n'en sait pas assez", "que le point de l'autre est valide", "qu'il est d'accord" ], "targetLanguage": "Tu as soulevé un bon point." }, { "id": "B1-L4-E8", "type": "speaking", "prompt": "Role-play: disagree politely, acknowledge the point, hold your position", "correctAnswer": "Je comprends ce que tu veux dire... mais je ne suis pas du même avis parce que [raison]... Tu as soulevé un bon point mais [réponse].", "targetLanguage": "Je comprends ce que tu veux dire... mais je ne suis pas du même avis parce que [raison]... Tu as soulevé un bon point mais [réponse]." } ] } ] }, { "id": "B2", "title": "Résoudre des problèmes", "description": "Handle misunderstandings and difficult situations", "icon": "wrench.and.screwdriver.fill", "lessons": [ { "id": "B2-L1", "title": "Malentendus", "description": "Malentendus", "exercises": [ { "id": "B2-L1-E1", "type": "listening", "prompt": "What does the speaker ask?", "correctAnswer": "de répéter plus lentement", "options": [ "de parler plus fort", "de traduire", "d'expliquer", "de répéter plus lentement" ], "targetLanguage": "Pouvez-vous répéter plus lentement s'il vous plaît ?" }, { "id": "B2-L1-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "Je n'ai pas compris|I didn't understand", "Pouvez-vous répéter ?|Can you repeat?", "Que voulez-vous dire ?|What do you mean?", "En d'autres termes|In other words" ] }, { "id": "B2-L1-E3", "type": "translation", "prompt": "Translate: Sorry I didn't quite catch that could you say it again more slowly?", "correctAnswer": "Excusez-moi je n'ai pas bien entendu pourriez-vous répéter plus lentement ?", "targetLanguage": "Excusez-moi je n'ai pas bien entendu pourriez-vous répéter plus lentement ?" }, { "id": "B2-L1-E4", "type": "translation", "prompt": "Translate: I think there may be a misunderstanding I asked for a non-smoking room", "correctAnswer": "Je pense qu'il y a un malentendu j'avais demandé une chambre non-fumeurs", "targetLanguage": "Je pense qu'il y a un malentendu j'avais demandé une chambre non-fumeurs" }, { "id": "B2-L1-E5", "type": "wordOrder", "prompt": "Build: What do you mean exactly? I want to make sure I understood correctly", "correctAnswer": "Que voulez-vous dire exactement ? Je veux m'assurer d'avoir bien compris", "targetLanguage": "Que voulez-vous dire exactement ? Je veux m'assurer d'avoir bien compris" }, { "id": "B2-L1-E6", "type": "multipleChoice", "prompt": "'Je pense qu'il y a un malentendu' is:", "correctAnswer": "A polite way to signal a misunderstanding", "options": [ "A polite way to signal a misunderstanding", "A way to say you're wrong", "An apology", "A way to end the conversation" ], "targetLanguage": "Je pense qu'il y a un malentendu" }, { "id": "B2-L1-E7", "type": "listening", "prompt": "How does the speaker clarify?", "correctAnswer": "en paraphrasant avec 'en d'autres termes'", "options": [ "en répétant les mêmes mots", "en paraphrasant avec 'en d'autres termes'", "en demandant de l'aide", "en changeant de sujet" ], "targetLanguage": "En d'autres termes, je veux dire que..." }, { "id": "B2-L1-E8", "type": "speaking", "prompt": "Navigate a misunderstanding: ask for clarification, explain what you understood, ask to confirm", "correctAnswer": "Excusez-moi, je n'ai pas bien compris. [Paraphraser] Est-ce bien ce que vous vouliez dire ?", "targetLanguage": "Excusez-moi, je n'ai pas bien compris. [Paraphraser] Est-ce bien ce que vous vouliez dire ?" } ] }, { "id": "B2-L2", "title": "Réclamations et solutions", "description": "Réclamations et solutions", "exercises": [ { "id": "B2-L2-E1", "type": "listening", "prompt": "What is the person complaining about?", "correctAnswer": "le bruit nocturne", "options": [ "le retard du vol", "la nourriture froide", "le bruit nocturne", "le bagage perdu" ], "targetLanguage": "Le bruit la nuit est insupportable." }, { "id": "B2-L2-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "se plaindre de|to complain about", "demander un remboursement|to ask for a refund", "parler au responsable|to speak to the manager", "trouver une solution|to find a solution" ] }, { "id": "B2-L2-E3", "type": "translation", "prompt": "Translate: I'd like to speak to the manager this is not what I paid for", "correctAnswer": "Je voudrais parler au responsable ce n'est pas ce pour quoi j'ai payé", "targetLanguage": "Je voudrais parler au responsable ce n'est pas ce pour quoi j'ai payé" }, { "id": "B2-L2-E4", "type": "translation", "prompt": "Translate: We've been waiting for over an hour this is unacceptable what can you do for us?", "correctAnswer": "Nous attendons depuis plus d'une heure c'est inacceptable que pouvez-vous faire pour nous ?", "targetLanguage": "Nous attendons depuis plus d'une heure c'est inacceptable que pouvez-vous faire pour nous ?" }, { "id": "B2-L2-E5", "type": "wordOrder", "prompt": "Build: I would appreciate a partial refund given the inconvenience caused", "correctAnswer": "J'apprécierais un remboursement partiel étant donné le désagrément causé", "targetLanguage": "J'apprécierais un remboursement partiel étant donné le désagrément causé" }, { "id": "B2-L2-E6", "type": "multipleChoice", "prompt": "'Que pouvez-vous faire pour compenser ?' means:", "correctAnswer": "What can you do to make it right?", "options": [ "What can you do to make it right?", "What can you tell me?", "What happened?", "What do you suggest I do?" ], "targetLanguage": "Que pouvez-vous faire pour compenser ?" }, { "id": "B2-L2-E7", "type": "listening", "prompt": "What does the manager offer?", "correctAnswer": "une réduction sur la prochaine visite", "options": [ "un remboursement complet", "des excuses", "une meilleure chambre", "une réduction sur la prochaine visite" ], "targetLanguage": "Nous vous offrons une réduction sur votre prochaine visite." }, { "id": "B2-L2-E8", "type": "speaking", "prompt": "Make a formal complaint to a hotel manager about noise and ask for compensation", "correctAnswer": "Bonsoir, je dois me plaindre du bruit nocturne. C'est [inacceptable/insupportable]. Que pouvez-vous faire pour [nous compenser/remédier à la situation] ?", "targetLanguage": "Bonsoir, je dois me plaindre du bruit nocturne. C'est [inacceptable/insupportable]. Que pouvez-vous faire pour [nous compenser/remédier à la situation] ?" } ] }, { "id": "B2-L3", "title": "Démarches administratives", "description": "Démarches administratives", "exercises": [ { "id": "B2-L3-E1", "type": "listening", "prompt": "What does the person need to do?", "correctAnswer": "renouveler le document", "options": [ "faire une déclaration", "payer une amende", "prendre un rendez-vous", "renouveler le document" ], "targetLanguage": "Je dois renouveler le document." }, { "id": "B2-L3-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "le formulaire|the form", "remplir|to fill in", "joindre|to attach", "la date limite|the deadline" ] }, { "id": "B2-L3-E3", "type": "translation", "prompt": "Translate: I need to renew my residence permit which documents do I need to bring?", "correctAnswer": "Je dois renouveler mon titre de séjour quels documents dois-je apporter ?", "targetLanguage": "Je dois renouveler mon titre de séjour quels documents dois-je apporter ?" }, { "id": "B2-L3-E4", "type": "translation", "prompt": "Translate: Could you help me fill in this form? My French isn't quite good enough", "correctAnswer": "Pourriez-vous m'aider à remplir ce formulaire ? Mon français n'est pas encore assez bon", "targetLanguage": "Pourriez-vous m'aider à remplir ce formulaire ? Mon français n'est pas encore assez bon" }, { "id": "B2-L3-E5", "type": "wordOrder", "prompt": "Build: What is the deadline for submitting the application?", "correctAnswer": "Quelle est la date limite pour soumettre la demande ?", "targetLanguage": "Quelle est la date limite pour soumettre la demande ?" }, { "id": "B2-L3-E6", "type": "multipleChoice", "prompt": "'Faire la queue' means:", "correctAnswer": "To queue / stand in line", "options": [ "To make an appointment", "To take a number", "To queue / stand in line", "To fill in a form" ], "targetLanguage": "Faire la queue" }, { "id": "B2-L3-E7", "type": "listening", "prompt": "What does the clerk say?", "correctAnswer": "de prendre un numéro et d'attendre", "options": [ "de revenir demain", "d'appeler pour un rendez-vous", "de remplir un formulaire", "de prendre un numéro et d'attendre" ], "targetLanguage": "Prenez un numéro et attendez votre tour." }, { "id": "B2-L3-E8", "type": "speaking", "prompt": "Ask a clerk what documents you need and how to submit them", "correctAnswer": "Bonjour, je dois [renouveler/demander] [document]. Quels documents faut-il et comment soumettre la demande ?", "targetLanguage": "Bonjour, je dois [renouveler/demander] [document]. Quels documents faut-il et comment soumettre la demande ?" } ] }, { "id": "B2-L4", "title": "Négocier et persuader", "description": "Négocier et persuader", "exercises": [ { "id": "B2-L4-E1", "type": "listening", "prompt": "What technique does the speaker use?", "correctAnswer": "propose un compromis", "options": [ "menace", "propose un compromis", "insiste", "abandonne" ], "targetLanguage": "On peut trouver un compromis ?" }, { "id": "B2-L4-E2", "type": "matching", "prompt": "Match each word with its meaning", "correctAnswer": "__matched__", "options": [ "proposer un compromis|to propose a compromise", "faire une concession|to make a concession", "insister sur|to insist on", "trouver un terrain d'entente|to find common ground" ] }, { "id": "B2-L4-E3", "type": "translation", "prompt": "Translate: I understand your position but perhaps we can find a middle ground that works for both of us", "correctAnswer": "Je comprends votre position mais peut-être qu'on peut trouver un juste milieu qui nous convienne à tous les deux", "targetLanguage": "Je comprends votre position mais peut-être qu'on peut trouver un juste milieu qui nous convienne à tous les deux" }, { "id": "B2-L4-E4", "type": "translation", "prompt": "Translate: If you can reduce the price slightly I'm willing to confirm the order today", "correctAnswer": "Si vous pouvez réduire un peu le prix je suis prêt(e) à confirmer la commande aujourd'hui", "targetLanguage": "Si vous pouvez réduire un peu le prix je suis prêt(e) à confirmer la commande aujourd'hui" }, { "id": "B2-L4-E5", "type": "wordOrder", "prompt": "Build: I'm prepared to make a concession if you are too", "correctAnswer": "Je suis prêt(e) à faire une concession si vous l'êtes aussi", "targetLanguage": "Je suis prêt(e) à faire une concession si vous l'êtes aussi" }, { "id": "B2-L4-E6", "type": "multipleChoice", "prompt": "'Trouver un terrain d'entente' means:", "correctAnswer": "To find common ground", "options": [ "To meet each other", "To make an effort", "To find common ground", "To find a solution alone" ], "targetLanguage": "Trouver un terrain d'entente" }, { "id": "B2-L4-E7", "type": "listening", "prompt": "What concession does the speaker offer?", "correctAnswer": "payer à l'avance", "options": [ "payer à l'avance", "réduire le prix", "donner une garantie", "prolonger le contrat" ], "targetLanguage": "Je pourrais payer à l'avance si vous baissez le prix." }, { "id": "B2-L4-E8", "type": "speaking", "prompt": "Negotiate: state your position, offer a concession, propose a compromise", "correctAnswer": "Ma position est [X]. Je suis prêt(e) à [concession] si [condition]. On peut trouver un compromis ?", "targetLanguage": "Ma position est [X]. Je suis prêt(e) à [concession] si [condition]. On peut trouver un compromis ?" } ] } ] } ] }