diff --git a/.gitignore b/.gitignore index 61d64e6..6ed3e20 100644 --- a/.gitignore +++ b/.gitignore @@ -46,25 +46,45 @@ pids *.seed *.pid.lock -# Audio files (can be large) -audio/*.mp3 -audio/*.wav -audio/*.ogg -audio/*.m4a +# Media files (can be large) - Ignore everywhere +*.mp3 +*.wav +*.ogg +*.m4a +*.flac +*.aac +*.wma -# Image files (can be large) -images/*.jpg -images/*.jpeg -images/*.png -images/*.gif -images/*.bmp -images/*.svg +*.jpg +*.jpeg +*.png +*.gif +*.bmp +*.svg +*.webp +*.ico +*.tiff +*.tif -# Video files -videos/*.mp4 -videos/*.avi -videos/*.mov -videos/*.wmv +*.mp4 +*.avi +*.mov +*.wmv +*.flv +*.mkv +*.webm + +*.pdf +*.doc +*.docx +*.ppt +*.pptx +*.xls +*.xlsx + +# Exception: Keep specific media in certain folders if needed +# !content/assets/*.png +# !docs/*.pdf # Temporary files tmp/ diff --git a/DEPLOYMENT_CHECKLIST.md b/DEPLOYMENT_CHECKLIST.md new file mode 100644 index 0000000..e9888eb --- /dev/null +++ b/DEPLOYMENT_CHECKLIST.md @@ -0,0 +1,330 @@ +# โ Checklist de Dรฉploiement - Milieu Inconnu + +## ๐ Avant de Partir + +### Package ร Prรฉparer + +``` +โก Copier TOUT le dossier Class_generator/ +โก Inclure nodejs-portable/ complet (~50 MB) +โก Inclure node_modules/ prรฉ-installรฉs (~100 MB) + โ รvite les problรจmes d'installation sur place + โ npm install sur votre machine de dev avant de copier + +โก Vรฉrifier que tous les .bat sont prรฉsents: + โก START_PORTABLE_SAFE.bat + โก DIAGNOSTIC.bat + โก START_PORTABLE.bat (ancien, backup) + +โก Vรฉrifier la documentation: + โก LISEZMOI.txt + โก DEPLOYMENT_GUIDE.md + โก DEPLOYMENT_CHECKLIST.md (ce fichier) + +โก Crรฉer un dossier logs/ vide +``` + +### Test Local AVANT de Partir + +``` +โก Sur VOTRE machine: + 1. Copier le dossier vers Desktop/TEST/ + 2. Double-clic DIAGNOSTIC.bat โ Tout vert ? + 3. Double-clic START_PORTABLE_SAFE.bat โ Succรจs ? + 4. Navigateur s'ouvre automatiquement ? + 5. Page charge correctement ? + 6. Tester une fonctionnalitรฉ + 7. Arrรชter proprement (touche dans console) + 8. Redรฉmarrer โ รa remarche ? + +โก Si tout OK โ Package prรชt โ +``` + +--- + +## ๐ฆ Support de Transport + +### Option A: Clรฉ USB (Recommandรฉ) +``` +โก Clรฉ USB โฅ 4 GB +โก Format: NTFS (pas FAT32) +โก Copier le dossier complet +โก Tester depuis la clรฉ sur VOTRE machine +โก Vรฉrifier l'intรฉgritรฉ (tous les fichiers copiรฉs) +``` + +### Option B: Cloud/Rรฉseau +``` +โก Zipper le dossier +โก Nom du ZIP: Class_Generator_v1.0_Portable.zip +โก Vรฉrifier la taille (~150-200 MB) +โก Upload vers OneDrive/Google Drive/rรฉseau +โก Tรฉlรฉcharger et tester sur une autre machine +``` + +### Option C: Disque Externe +``` +โก Copier le dossier +โก Pas besoin de zipper +โก Vรฉrifier l'accรจs en lecture/รฉcriture +``` + +--- + +## ๐ Sur la Machine Cible + +### รtape 1: Installation (5 min) + +``` +โก Dรฉcompresser/Copier vers: + โ Recommandรฉ: C:\Users\[Nom]\Desktop\Class_generator\ + โ Alternative: C:\Users\[Nom]\Documents\Class_generator\ + โ PAS dans: Program Files, Windows, C:\ racine + +โก Vรฉrifier que le dossier n'est PAS en lecture seule: + โ Clic droit sur dossier โ Propriรฉtรฉs + โ Dรฉcocher "Lecture seule" si besoin + โ Appliquer ร tous les sous-dossiers +``` + +### รtape 2: Diagnostic (2 min) + +``` +โก Double-clic DIAGNOSTIC.bat +โก Lire le rapport ร l'รฉcran +โก Vรฉrifier DIAGNOSTIC_REPORT.txt crรฉรฉ + +โก Si [SUCCESS]: + โ Passer ร l'รฉtape 3 โ + +โก Si [CAUTION]: + โ Noter les warnings + โ Continuer quand mรชme + โ Prรฉparer plan B + +โก Si [FAILURE]: + โ STOP, ne pas lancer + โ Appliquer corrections (voir ci-dessous) + โ Relancer DIAGNOSTIC.bat +``` + +### รtape 3: Premier Dรฉmarrage (3 min) + +``` +โก Double-clic START_PORTABLE_SAFE.bat +โก Observer les messages: + + [1/7] Checking Node.js... โ Doit dire "OK" + [2/7] Checking dependencies... โ "OK" ou "Installing..." + [3/7] Checking port 8080... โ "OK" ou "Freeing port" + [4/7] Verifying project files... โ "OK" + [5/7] Starting server... โ Pas d'erreur + [6/7] Waiting for server... โ "Server is responding!" + [7/7] Opening browser... โ Navigateur s'ouvre + +โก Attendre "SUCCESS! Server is running" +โก Vรฉrifier que le navigateur charge la page +โก Tester une fonctionnalitรฉ basique +``` + +### รtape 4: Test de Fonctionnement (5 min) + +``` +โก Page d'accueil charge +โก Navigation fonctionne +โก Choisir un exercice +โก Tester une interaction +โก Vรฉrifier l'affichage (pas de console errors F12) + +โก Si tout OK: + โ Dรฉploiement rรฉussi โ + โ Passer ร l'รฉtape 5 + +โก Si problรจmes: + โ Consulter DEPLOYMENT_GUIDE.md + โ Vรฉrifier logs\server.log + โ Appliquer corrections +``` + +### รtape 5: Test d'Arrรชt/Redรฉmarrage + +``` +โก Dans la console, appuyer sur une touche +โก Vรฉrifier "Server stopped" +โก Console se ferme proprement + +โก Redรฉmarrer START_PORTABLE_SAFE.bat +โก Vรฉrifier que รงa remarche +โก Si OK โ Installation complรจte โ +``` + +--- + +## ๐ง Corrections Courantes + +### Problรจme: "Node.js exists but won't run" + +``` +Solution 1: Antivirus +โก Ouvrir Windows Security +โก Protection contre virus et menaces +โก Paramรจtres de protection +โก Exclusions โ Ajouter +โก Sรฉlectionner le dossier Class_generator/ +โก Relancer DIAGNOSTIC.bat + +Solution 2: Administrateur +โก Clic droit START_PORTABLE_SAFE.bat +โก "Exรฉcuter en tant qu'administrateur" +โก Accepter l'UAC + +Solution 3: Visual C++ Runtime +โก Vรฉrifier si vcruntime140.dll est prรฉsent +โก Si manquant: installer VC++ Redistributable +โก URL: https://aka.ms/vs/17/release/vc_redist.x64.exe +``` + +### Problรจme: "Port 8080 used" + +``` +Solution 1: Identifier et tuer +โก Ouvrir cmd +โก netstat -ano | findstr :8080 +โก Noter le PID (derniรจre colonne) +โก taskkill /F /PID [numรฉro] +โก Relancer + +Solution 2: Changer le port +โก Ouvrir server.js avec Notepad +โก Ligne ~4: const PORT = 8080 +โก Changer en: const PORT = 8081 +โก Sauvegarder +โก Relancer +โก Ouvrir manuellement http://localhost:8081 +``` + +### Problรจme: "Dependencies installation failed" + +``` +Vous avez inclus node_modules โ Pas censรฉ arriver + +Si quand mรชme: +โก Vรฉrifier connexion internet +โก Vรฉrifier que node_modules/ est prรฉsent +โก Supprimer node_modules/ et relancer + (nรฉcessitera internet) +``` + +### Problรจme: "Browser doesn't open" + +``` +Solution: Manuel +โก Laisser la console ouverte +โก Ouvrir Chrome/Firefox/Edge +โก Aller sur: http://localhost:8080 +โก รa devrait marcher +``` + +--- + +## ๐ฏ Scรฉnarios de Secours + +### Plan A: รchec Total +``` +Si RIEN ne marche aprรจs 30 min: + +โก Copier ces fichiers: + - DIAGNOSTIC_REPORT.txt + - logs\server.log + - Screenshot des erreurs + +โก Envoyer au support IT +โก Expliquer: "Application รฉducative locale" +โก Demander assistance +``` + +### Plan B: Environnement Super Restrictif +``` +Si la machine refuse TOUT: + +Option 1: Demander exception IT +โก Montrer que c'est รฉducatif +โก Expliquer: pas d'installation systรจme +โก Fournir DIAGNOSTIC_REPORT.txt + +Option 2: Utiliser une autre machine +โก Chercher un PC avec moins de restrictions +โก Refaire le dรฉploiement + +Option 3: Fallback Python (si disponible) +โก python -m http.server 8080 +โก Fonctionnalitรฉ limitรฉe mais page accessible +``` + +--- + +## ๐ Temps Estimรฉs + +``` +Dรฉploiement Idรฉal (tout fonctionne): +โโ Installation: 5 min +โโ Diagnostic: 2 min +โโ Dรฉmarrage: 3 min +โโ Tests: 5 min +โโ TOTAL: ~15 minutes + +Dรฉploiement avec Problรจmes: +โโ Installation: 5 min +โโ Diagnostic: 2 min +โโ Erreur dรฉtectรฉe: โ +โโ Troubleshooting: 10-30 min +โโ Redรฉmarrage: 3 min +โโ Tests: 5 min +โโ TOTAL: ~25-45 minutes + +รchec Complet (abandonner): +โโ Aprรจs 1 heure sans succรจs +``` + +--- + +## โ Validation Finale + +Avant de dire "C'est bon": + +``` +โก DIAGNOSTIC.bat โ [SUCCESS] ou [CAUTION] acceptable +โก START_PORTABLE_SAFE.bat โ "SUCCESS! Server is running" +โก http://localhost:8080 โ Page charge +โก Navigation โ Fonctionne +โก Exercice test โ Fonctionne +โก Arrรชt (touche) โ Propre +โก Redรฉmarrage โ Remarche + +SI TOUS COCHรS โ Dรฉploiement validรฉ โ +``` + +--- + +## ๐ Notes Post-Dรฉploiement + +``` +Date: ______________ +Lieu: ______________ +Machine: Windows 10 build ______ + +Problรจmes rencontrรฉs: +โก Aucun +โก Antivirus (rรฉsolu comment: _______________) +โก Port occupรฉ (rรฉsolu comment: _______________) +โก Autre: ___________________________________ + +Temps total: _______ minutes + +Fonctionnel: โก OUI โก NON +Si NON, raison: _____________________________ +``` + +--- + +**Bonne chance pour le dรฉploiement ! ๐** diff --git a/DEPLOYMENT_GUIDE.md b/DEPLOYMENT_GUIDE.md new file mode 100644 index 0000000..dfd88d8 --- /dev/null +++ b/DEPLOYMENT_GUIDE.md @@ -0,0 +1,337 @@ +# ๐ Guide de Dรฉploiement - Milieu Inconnu Windows 10 + +## ๐ Vue d'ensemble + +Ce guide vous aide ร dรฉployer Class Generator sur **n'importe quel Windows 10**, mรชme avec des restrictions de sรฉcuritรฉ. + +--- + +## โก Dรฉmarrage Rapide (3 รฉtapes) + +### 1๏ธโฃ Vรฉrifier le systรจme +```batch +Double-cliquer sur: DIAGNOSTIC.bat +``` +- โ Tout vert ? Passez ร l'รฉtape 2 +- โ ๏ธ Warnings ? Continuez quand mรชme +- โ Erreurs ? Lisez les solutions ci-dessous + +### 2๏ธโฃ Dรฉmarrer l'application +```batch +Double-cliquer sur: START_PORTABLE_SAFE.bat +``` +- Attendez "SUCCESS! Server is running" +- Le navigateur s'ouvre automatiquement +- Laissez la fenรชtre ouverte + +### 3๏ธโฃ Utiliser l'application +- Naviguez sur http://localhost:8080 +- Appuyez sur n'importe quelle touche dans la console pour arrรชter + +--- + +## ๐ ๏ธ Rรฉsolution de Problรจmes + +### Problรจme 1: "Node.js won't run" + +**Causes possibles:** +- โ Antivirus bloque node.exe +- โ Droits d'administrateur requis +- โ Visual C++ Runtime manquant + +**Solutions (par ordre de prioritรฉ):** + +``` +Solution A: Dรฉbloquer l'antivirus +1. Ouvrir Windows Security +2. Protection contre virus et menaces +3. Gรฉrer les paramรจtres +4. Exclusions โ Ajouter une exclusion +5. Dossier โ Sรฉlectionner le dossier Class_generator complet +6. Redรฉmarrer DIAGNOSTIC.bat +``` + +``` +Solution B: Lancer en administrateur +1. Clic droit sur START_PORTABLE_SAFE.bat +2. "Exรฉcuter en tant qu'administrateur" +3. Accepter l'UAC +``` + +``` +Solution C: Installer Visual C++ Redistributable +1. Tรฉlรฉcharger: https://aka.ms/vs/17/release/vc_redist.x64.exe +2. Installer +3. Redรฉmarrer l'ordinateur +4. Relancer DIAGNOSTIC.bat +``` + +--- + +### Problรจme 2: "Port 8080 used by another program" + +**Identifier le coupable:** +```batch +netstat -ano | findstr :8080 +``` + +**Solutions:** + +``` +Solution A: Tuer le processus +1. Copier le PID affichรฉ (derniรจre colonne) +2. Ouvrir Gestionnaire des tรขches +3. Onglet "Dรฉtails" +4. Trouver le PID et terminer le processus +``` + +``` +Solution B: Changer le port +1. Ouvrir server.js avec Notepad +2. Chercher: const PORT = 8080 +3. Changer en: const PORT = 8081 +4. Sauvegarder +5. Relancer START_PORTABLE_SAFE.bat +``` + +--- + +### Problรจme 3: "Dependencies installation failed" + +**Causes possibles:** +- โ Pas d'internet +- โ Firewall/Proxy bloque npm +- โ Espace disque plein + +**Solutions:** + +``` +Solution A: Dรฉployer avec node_modules prรฉ-installรฉs +1. Sur votre machine de dev: + npm install +2. Copier TOUT le dossier (incluant node_modules/) +3. Sur la machine cible: skip รฉtape d'installation +``` + +``` +Solution B: Installation manuelle +1. Vรฉrifier la connexion internet +2. Ouvrir cmd en administrateur +3. cd C:\chemin\vers\Class_generator +4. nodejs-portable\node.exe nodejs-portable\node_modules\npm\bin\npm-cli.js install +5. Observer les erreurs dรฉtaillรฉes +``` + +--- + +### Problรจme 4: "Browser doesn't open" ou "Wrong browser opens" + +**โ ๏ธ CRITIQUE: Votre environnement nรฉcessite Firefox UNIQUEMENT** +- โ Edge ne fonctionne PAS +- โ Chrome ne fonctionne PAS +- โ Firefox REQUIS + +**Solutions:** + +``` +Solution A: Vรฉrifier que Firefox est installรฉ +1. Chercher dans Menu Dรฉmarrer: "Firefox" +2. Si absent โ Demander ร l'IT d'installer Firefox +3. Ou tรฉlรฉcharger Firefox Portable si droits limitรฉs + +Solution B: Ouvrir manuellement +1. Laisser le serveur tourner (ne pas fermer la fenรชtre) +2. Ouvrir FIREFOX (PAS Edge, PAS Chrome) +3. Aller sur: http://localhost:8080 + +Solution C: Firefox dans un chemin non-standard +1. Noter oรน Firefox est installรฉ +2. Le script cherche dans: + - C:\Program Files\Mozilla Firefox\ + - C:\Program Files (x86)\Mozilla Firefox\ + - PATH systรจme +3. Si ailleurs, ouvrir manuellement (Solution B) +``` + +--- + +### Problรจme 5: "Server started but page doesn't load" + +**Diagnostic:** + +```batch +1. Ouvrir logs\server.log +2. Chercher les erreurs +``` + +**Erreurs courantes:** + +``` +ERREUR: "EADDRINUSE" +โ Le port est dรฉjร pris, voir Problรจme 2 + +ERREUR: "MODULE_NOT_FOUND" +โ Dependencies manquantes, voir Problรจme 3 + +ERREUR: "Permission denied" +โ Lancer en administrateur, voir Problรจme 1 / Solution B +``` + +--- + +## ๐ฏ Checklist Prรฉ-Dรฉploiement + +Avant de partir en milieu inconnu, **sur votre machine de dev** : + +### Option A: Dรฉploiement Lรฉger (50 MB) +``` +โ nodejs-portable/ complet +โ Tous les scripts .bat +โ package.json +โ src/, games/, styles/ +โ server.js, index.html +โ node_modules/ (sera installรฉ sur place) +``` + +### Option B: Dรฉploiement Complet (150 MB) +``` +โ TOUT le dossier incluant node_modules/ +โ Plus gros mais zรฉro dรฉpendance internet +``` + +**Recommandation:** Option B pour milieu inconnu + +--- + +## ๐ฆ Package de Dรฉploiement Recommandรฉ + +Crรฉer un ZIP avec: +``` +Class_generator/ +โโโ START_PORTABLE_SAFE.bat โ Script principal +โโโ DIAGNOSTIC.bat โ Vรฉrification systรจme +โโโ DEPLOYMENT_GUIDE.md โ Ce fichier +โโโ nodejs-portable/ โ Node.js complet +โโโ node_modules/ โ (Optionnel mais recommandรฉ) +โโโ src/ +โโโ games/ +โโโ styles/ +โโโ server.js +โโโ index.html +โโโ package.json +``` + +--- + +## ๐ Environnements Restrictifs + +### Entreprise / รcole avec restrictions + +**Stratรฉgies:** + +1. **Demander une exception IT** + - Fournir DIAGNOSTIC_REPORT.txt + - Expliquer: application locale, pas d'internet requis + - Montrer que c'est รฉducatif + +2. **Mode super portable** + - Utiliser une clรฉ USB + - Lancer depuis la clรฉ (pas d'installation) + - Tout est contenu, rien sur le systรจme + +3. **Fallback ultime: Python SimpleHTTPServer** + ```batch + python -m http.server 8080 + ``` + (Si Python est autorisรฉ mais pas Node.js) + +--- + +## ๐งช Test Rapide en 30 Secondes + +Sur la machine cible: + +```batch +1. Double-clic DIAGNOSTIC.bat + โฑ๏ธ Attendre le rรฉsultat (10 sec) + +2. Si OK โ Double-clic START_PORTABLE_SAFE.bat + โฑ๏ธ Attendre "SUCCESS" (15 sec) + +3. Navigateur s'ouvre automatiquement + โฑ๏ธ Page charge (5 sec) + +โ Total: ~30 secondes si tout va bien +``` + +--- + +## ๐ Support d'Urgence + +Si rien ne marche: + +1. **Capturer les logs** + - DIAGNOSTIC_REPORT.txt + - logs\server.log + - Screenshot des erreurs + +2. **Informations systรจme** + ```batch + systeminfo > system_info.txt + ``` + +3. **Envoyer ร l'IT/dรฉveloppeur** + +--- + +## โ Vรฉrification Finale + +Avant de dire "c'est bon": + +``` +โ DIAGNOSTIC.bat โ Tout vert ou warnings acceptables +โ START_PORTABLE_SAFE.bat โ "SUCCESS! Server is running" +โ http://localhost:8080 โ Page charge +โ Tester une fonctionnalitรฉ โ รa marche +โ Arrรชter (touche dans console) โ Propre +โ Redรฉmarrer โ รa remarche +``` + +--- + +## ๐ Notes pour l'Utilisateur Final + +``` +Ce logiciel fonctionne LOCALEMENT sur votre ordinateur. +Il ne se connecte PAS ร internet. +Vos donnรฉes restent sur votre machine. +Aucune installation systรจme requise. +Tout est dans ce dossier. + +โ ๏ธ IMPORTANT: Utilisez UNIQUEMENT Mozilla Firefox + Edge et Chrome ne sont PAS compatibles avec ce systรจme. +``` + +--- + +## ๐ฆ Firefox Portable (Plan de Secours) + +Si Firefox n'est pas installรฉ et que vous n'avez pas les droits d'installer : + +``` +1. Tรฉlรฉcharger Firefox Portable depuis: + https://portableapps.com/apps/internet/firefox_portable + +2. Extraire dans un dossier (ex: Desktop/FirefoxPortable/) + +3. Lancer FirefoxPortable.exe + +4. Aller sur: http://localhost:8080 +``` + +--- + +**Version:** 1.1 +**Testรฉ sur:** Windows 10 (build 19041+) +**Navigateur:** Firefox uniquement +**Derniรจre mise ร jour:** 2025-10-18 diff --git a/DIAGNOSTIC.bat b/DIAGNOSTIC.bat new file mode 100644 index 0000000..6ea2d11 --- /dev/null +++ b/DIAGNOSTIC.bat @@ -0,0 +1,249 @@ +@echo off +title Class Generator - Diagnostic System +cd /d "%~dp0" +setlocal enabledelayedexpansion + +echo. +echo ======================================== +echo CLASS GENERATOR - DIAGNOSTIC +echo ======================================== +echo. +echo Running pre-flight checks... +echo. + +set ERROR_COUNT=0 +set WARNING_COUNT=0 + +:: ============================================ +:: 1. SYSTEM CHECKS +:: ============================================ +echo [CHECK 1/8] Windows Version... +ver | findstr /i "10.0" >nul +if %errorlevel% equ 0 ( + echo [OK] Windows 10 detected +) else ( + echo [WARNING] Not Windows 10, but might work + set /a WARNING_COUNT+=1 +) + +:: ============================================ +:: 2. PORTABLE NODE.JS +:: ============================================ +echo [CHECK 2/8] Portable Node.js... +if exist "nodejs-portable\node.exe" ( + echo [OK] Node.exe found + + :: Test if it runs + "nodejs-portable\node.exe" --version >nul 2>&1 + if !errorlevel! equ 0 ( + for /f "tokens=*" %%v in ('"nodejs-portable\node.exe" --version') do set NODE_VERSION=%%v + echo [OK] Node.js !NODE_VERSION! working + ) else ( + echo [ERROR] Node.exe exists but doesn't run + echo Possible causes: + echo - Antivirus blocking execution + echo - Missing Visual C++ Runtime + echo - Corrupted download + set /a ERROR_COUNT+=1 + ) +) else ( + echo [ERROR] nodejs-portable\node.exe NOT FOUND + echo Please run PORTABLE_SETUP.txt instructions + set /a ERROR_COUNT+=1 +) + +:: ============================================ +:: 3. NPM (inside portable Node) +:: ============================================ +echo [CHECK 3/8] NPM availability... +if exist "nodejs-portable\node_modules\npm\bin\npm-cli.js" ( + echo [OK] NPM found in portable Node +) else ( + echo [ERROR] NPM not found in portable package + echo Re-download Node.js portable with npm included + set /a ERROR_COUNT+=1 +) + +:: ============================================ +:: 4. PROJECT FILES +:: ============================================ +echo [CHECK 4/8] Critical project files... +set MISSING_FILES=0 + +if not exist "server.js" ( + echo [ERROR] server.js missing + set /a MISSING_FILES+=1 +) +if not exist "src\Application.js" ( + echo [ERROR] src\Application.js missing + set /a MISSING_FILES+=1 +) +if not exist "index.html" ( + echo [ERROR] index.html missing + set /a MISSING_FILES+=1 +) + +if !MISSING_FILES! equ 0 ( + echo [OK] All critical files present +) else ( + echo [ERROR] !MISSING_FILES! critical files missing + set /a ERROR_COUNT+=!MISSING_FILES! +) + +:: ============================================ +:: 5. PORT 8080 AVAILABILITY +:: ============================================ +echo [CHECK 5/8] Port 8080 availability... +netstat -ano | findstr :8080 | findstr LISTENING >nul +if %errorlevel% equ 0 ( + echo [WARNING] Port 8080 is currently in use + echo Will attempt to free it on startup + set /a WARNING_COUNT+=1 + + :: Find what's using it + for /f "tokens=5" %%a in ('netstat -ano ^| findstr :8080 ^| findstr LISTENING') do ( + set PID=%%a + echo Process ID: !PID! + for /f "tokens=1" %%b in ('tasklist /fi "pid eq !PID!" /fo table /nh') do ( + echo Program: %%b + ) + ) +) else ( + echo [OK] Port 8080 is available +) + +:: ============================================ +:: 6. WRITE PERMISSIONS +:: ============================================ +echo [CHECK 6/8] Write permissions... +echo test > test_write_permission.tmp 2>nul +if exist test_write_permission.tmp ( + del test_write_permission.tmp >nul 2>&1 + echo [OK] Can write to directory +) else ( + echo [ERROR] No write permission in current directory + echo Try running as Administrator + echo Or move folder to Documents/Desktop + set /a ERROR_COUNT+=1 +) + +:: ============================================ +:: 7. FIREWALL CHECK (informational) +:: ============================================ +echo [CHECK 7/8] Firewall status... +netsh advfirewall show currentprofile state | findstr ON >nul +if %errorlevel% equ 0 ( + echo [INFO] Windows Firewall is ON + echo You may need to allow Node.js on first run +) else ( + echo [INFO] Windows Firewall is OFF +) + +:: ============================================ +:: 8. FIREFOX AVAILABILITY (CRITICAL) +:: ============================================ +echo [CHECK 8/9] Firefox availability... +set FIREFOX_AVAILABLE=0 + +:: Check common Firefox locations +if exist "C:\Program Files\Mozilla Firefox\firefox.exe" ( + echo [OK] Firefox found at: C:\Program Files\Mozilla Firefox\ + set FIREFOX_AVAILABLE=1 +) + +if !FIREFOX_AVAILABLE! equ 0 ( + if exist "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" ( + echo [OK] Firefox found at: C:\Program Files ^(x86^)\Mozilla Firefox\ + set FIREFOX_AVAILABLE=1 + ) +) + +if !FIREFOX_AVAILABLE! equ 0 ( + where firefox >nul 2>&1 + if !errorlevel! equ 0 ( + echo [OK] Firefox found in PATH + set FIREFOX_AVAILABLE=1 + ) +) + +if !FIREFOX_AVAILABLE! equ 0 ( + echo [ERROR] Firefox NOT FOUND + echo Firefox is REQUIRED - Edge/Chrome do not work + echo. + echo SOLUTIONS: + echo 1. Install Firefox from mozilla.org + echo 2. Use Firefox Portable ^(no install needed^) + echo 3. Ask IT to install Firefox + set /a ERROR_COUNT+=1 +) + +:: ============================================ +:: 9. ANTIVIRUS HEURISTIC CHECK +:: ============================================ +echo [CHECK 9/9] Antivirus interference check... +:: Try to create and execute a simple .bat file +echo @echo ok > test_exec.bat 2>nul +if exist test_exec.bat ( + call test_exec.bat >nul 2>&1 + if !errorlevel! equ 0 ( + echo [OK] No obvious script blocking + del test_exec.bat >nul 2>&1 + ) else ( + echo [WARNING] Script execution might be blocked + echo Check antivirus settings + set /a WARNING_COUNT+=1 + del test_exec.bat >nul 2>&1 + ) +) else ( + echo [WARNING] Cannot create test scripts + set /a WARNING_COUNT+=1 +) + +:: ============================================ +:: SUMMARY +:: ============================================ +echo. +echo ======================================== +echo DIAGNOSTIC SUMMARY +echo ======================================== +echo. +echo Errors: !ERROR_COUNT! +echo Warnings: !WARNING_COUNT! +echo. + +if !ERROR_COUNT! equ 0 ( + if !WARNING_COUNT! equ 0 ( + echo [SUCCESS] System is ready to run! + echo You can now execute START_PORTABLE.bat + echo. + ) else ( + echo [CAUTION] System should work but has warnings + echo Proceed with START_PORTABLE.bat + echo Monitor for issues + echo. + ) +) else ( + echo [FAILURE] Critical errors detected! + echo DO NOT run START_PORTABLE.bat yet + echo Fix errors above first + echo. +) + +:: ============================================ +:: SAVE REPORT +:: ============================================ +echo Saving diagnostic report to DIAGNOSTIC_REPORT.txt... +( + echo CLASS GENERATOR - DIAGNOSTIC REPORT + echo Generated: %date% %time% + echo ======================================== + echo. + echo Errors: !ERROR_COUNT! + echo Warnings: !WARNING_COUNT! + echo. + echo For support, send this file to the developer +) > DIAGNOSTIC_REPORT.txt + +echo Report saved! +echo. +pause diff --git a/DIAGNOSTIC_REPORT.txt b/DIAGNOSTIC_REPORT.txt new file mode 100644 index 0000000..0f9b4b3 --- /dev/null +++ b/DIAGNOSTIC_REPORT.txt @@ -0,0 +1,8 @@ +CLASS GENERATOR - DIAGNOSTIC REPORT +Generated: 18/10/2025 17:11:19,20 +======================================== + +Errors: 0 +Warnings: 2 + +For support, send this file to the developer diff --git a/FIREFOX_REQUIS.txt b/FIREFOX_REQUIS.txt new file mode 100644 index 0000000..6914155 --- /dev/null +++ b/FIREFOX_REQUIS.txt @@ -0,0 +1,234 @@ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ +โ ๐ฆ FIREFOX EST OBLIGATOIRE ๐ฆ โ +โ โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ ๏ธ IMPORTANT โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Ce systรจme fonctionne UNIQUEMENT avec Mozilla Firefox. + + โ Microsoft Edge โ NE FONCTIONNE PAS + โ Google Chrome โ NE FONCTIONNE PAS + โ Internet Explorer โ NE FONCTIONNE PAS + โ Mozilla Firefox โ REQUIS + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ VรRIFIER SI FIREFOX EST INSTALLร โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Mรฉthode 1: Menu Dรฉmarrer + โโโโโโโโโโโโโโโโโโโโโโโโโ + 1. Cliquer sur le bouton Dรฉmarrer (Windows) + 2. Taper "Firefox" + 3. Si l'icรดne Firefox apparaรฎt โ C'est bon โ + 4. Sinon โ Installer (voir ci-dessous) + + Mรฉthode 2: Via le Diagnostic + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + 1. Double-cliquer sur DIAGNOSTIC.bat + 2. Regarder [CHECK 8/9] Firefox availability + 3. Si [OK] โ Firefox trouvรฉ โ + 4. Si [ERROR] โ Installer (voir ci-dessous) + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ฅ OPTION 1: INSTALLATION STANDARD (Droits Admin Requis) โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + 1. Aller sur: https://www.mozilla.org/firefox/ + 2. Cliquer sur "Tรฉlรฉcharger Firefox" + 3. Exรฉcuter l'installateur + 4. Accepter l'installation (nรฉcessite droits admin) + 5. Firefox sera installรฉ dans C:\Program Files\Mozilla Firefox\ + + โ Avantages: + - Installation systรจme + - Mises ร jour automatiques + - Intรฉgration Windows complรจte + + โ Inconvรฉnients: + - Nรฉcessite droits administrateur + - Peut รชtre bloquรฉ par IT + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ OPTION 2: FIREFOX PORTABLE (Recommandรฉ pour Dรฉploiement) โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + 1. Tรฉlรฉcharger depuis: + https://portableapps.com/apps/internet/firefox_portable + + 2. Choisir la langue: French / Franรงais + + 3. Tรฉlรฉcharger le fichier .paf.exe (~100 MB) + + 4. Exรฉcuter le fichier tรฉlรฉchargรฉ + โ Choisir oรน extraire (ex: Desktop/FirefoxPortable/) + + 5. Une fois extrait, lancer: + FirefoxPortable\FirefoxPortable.exe + + 6. Firefox s'ouvre โ Vous pouvez l'utiliser ! + + โ Avantages: + - PAS besoin de droits admin + - Portable (clรฉ USB OK) + - Pas d'installation systรจme + - Fonctionne partout + + โ Inconvรฉnients: + - Pas de mises ร jour auto (manuel) + - Prend ~200 MB d'espace + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ OPTION 3: INCLURE FIREFOX PORTABLE DANS LE PACKAGE โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Pour un dรฉploiement ultra-sรฉcurisรฉ: + + 1. Tรฉlรฉcharger Firefox Portable (Option 2) + + 2. Copier le dossier FirefoxPortable/ dans Class_generator/ + + 3. Structure finale: + Class_generator/ + โโโ FirefoxPortable/ + โ โโโ FirefoxPortable.exe + โโโ nodejs-portable/ + โโโ START_PORTABLE_SAFE.bat + โโโ ... + + 4. Modifier START_PORTABLE_SAFE.bat ligne ~192: + :: Chemin vers Firefox portable local + if exist "%~dp0FirefoxPortable\FirefoxPortable.exe" ( + start "" "%~dp0FirefoxPortable\FirefoxPortable.exe" http://localhost:8080 + set FIREFOX_FOUND=1 + ) else if exist "C:\Program Files\Mozilla Firefox\firefox.exe" ( + ... + + โ Avantages: + - ZรRO dรฉpendance externe + - Fonctionne PARTOUT + - Package complet autonome + + โ Inconvรฉnients: + - Package devient ~400 MB (vs 200 MB) + - Transfert plus long + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ ๏ธ DรPANNAGE โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Problรจme: "Firefox is installed but script doesn't find it" + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + Solution: + 1. Le script cherche dans: + - C:\Program Files\Mozilla Firefox\firefox.exe + - C:\Program Files (x86)\Mozilla Firefox\firefox.exe + - PATH systรจme (where firefox) + + 2. Si Firefox est ailleurs: + - Lancer manuellement Firefox + - Aller sur http://localhost:8080 + - รa fonctionnera quand mรชme + + 3. Ou utiliser Firefox Portable (Option 2) + + + Problรจme: "IT policy blocks Firefox installation" + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + Solution: + 1. Utiliser Firefox Portable (Option 2) โ Pas d'installation + 2. Ou demander exception IT avec justification รฉducative + 3. Ou inclure Firefox Portable dans le package (Option 3) + + + Problรจme: "Firefox opens but page doesn't load" + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + Solution: + 1. Vรฉrifier que le serveur tourne (fenรชtre console ouverte) + 2. Vรฉrifier l'URL: http://localhost:8080 (pas https) + 3. Vรฉrifier logs\server.log pour erreurs + 4. Consulter DEPLOYMENT_GUIDE.md + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ VALIDATION โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Avant le dรฉploiement, vรฉrifier: + + โก Firefox installรฉ (standard ou portable) + โก DIAGNOSTIC.bat trouve Firefox ([CHECK 8/9] OK) + โก START_PORTABLE_SAFE.bat ouvre Firefox automatiquement + โก Ou vous savez comment lancer Firefox manuellement + + Si tous cochรฉs โ Vous รชtes prรชt ! โ + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ RECOMMANDATION PAR SCรNARIO โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Scรฉnario 1: Machine perso / Droits admin + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ Installer Firefox standard (Option 1) + + + Scรฉnario 2: Machine entreprise / Pas de droits admin + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ Firefox Portable (Option 2) + + + Scรฉnario 3: Dรฉploiement en milieu totalement inconnu + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ Package avec Firefox Portable inclus (Option 3) + โ Garantie de fonctionnement ร 100% + + + Scรฉnario 4: Firefox dรฉjร installรฉ sur la machine cible + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ Rien ร faire ! โ + โ Les scripts le trouveront automatiquement + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Questions Frรฉquentes + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + +Q: Pourquoi Firefox uniquement ? +A: Votre systรจme utilise des technologies spรฉcifiques qui fonctionnent + uniquement dans Firefox dans l'environnement cible. Edge et Chrome + ont des restrictions qui empรชchent le bon fonctionnement. + +Q: Firefox Portable est-il sรปr ? +A: Oui ! C'est la version officielle de Firefox, emballรฉe pour รชtre portable. + Source officielle: portableapps.com (projet open-source reconnu) + +Q: Puis-je utiliser une version ancienne de Firefox ? +A: Firefox 60+ recommandรฉ. Les versions trรจs anciennes peuvent ne pas marcher. + Prรฉfรฉrer toujours la derniรจre version. + +Q: รa prend combien de place ? +A: - Firefox standard: ~200 MB installรฉ + - Firefox Portable: ~200 MB + - Package complet (Class_generator + Firefox Portable): ~400 MB + +Q: Et si Firefox est bloquรฉ par l'IT ? +A: Options: + 1. Firefox Portable (pas d'installation, peut passer sous le radar) + 2. Demander exception IT (justification รฉducative) + 3. Utiliser une autre machine + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + Version 1.0 - 2025-10-18 +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ diff --git a/LISEZMOI.txt b/LISEZMOI.txt index dabad4f..36b1e36 100644 --- a/LISEZMOI.txt +++ b/LISEZMOI.txt @@ -1,53 +1,143 @@ -โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ - CLASS GENERATOR 2.0 - VERSION PORTABLE -โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +================================================================================ + CLASS GENERATOR - PORTABLE EDITION +================================================================================ -๐ TU VEUX UTILISER รA EN COURS DEMAIN? + GUIDE DE DEMARRAGE RAPIDE -๐ Suis ces รฉtapes MAINTENANT (5 minutes): +================================================================================ +ETAPE 1: VERIFIER VOTRE SYSTEME +================================================================================ -1. Double-clic sur: DOWNLOAD_NODEJS.bat - โ Tรฉlรฉcharge Node.js portable (~50 MB) - โ Extraire le ZIP - โ Renommer en "nodejs-portable" - โ Copier dans CE dossier +Double-cliquez sur: DIAGNOSTIC.bat -2. Copier TOUT ce dossier sur ta clรฉ USB +Ce script va vรฉrifier que votre ordinateur peut faire tourner l'application. -3. DEMAIN EN COURS: - โ Brancher la clรฉ USB - โ Double-clic sur: START_PORTABLE.bat - โ Ouvrir Chrome: http://localhost:8080 - โ โ รa marche! +Rรฉsultats possibles: + + [SUCCESS] โ Tout est OK, passez ร l'รฉtape 2 + + [CAUTION] โ รa devrait marcher, passez ร l'รฉtape 2 et surveillez + + [FAILURE] โ Il y a un problรจme, consultez DEPLOYMENT_GUIDE.md -๐ FICHIERS IMPORTANTS -โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +================================================================================ +ETAPE 2: LANCER L'APPLICATION +================================================================================ -START_PORTABLE.bat โ ๐ UTILISE รA pour lancer l'app -DOWNLOAD_NODEJS.bat โ ๐ฅ Tรฉlรฉcharge Node.js (une fois) -QUICK_START.txt โ โก Guide rapide -PORTABLE_SETUP.txt โ ๐ Instructions dรฉtaillรฉes -README_PORTABLE.md โ ๐ Documentation complรจte +Double-cliquez sur: START_PORTABLE_SAFE.bat + +Une fenรชtre noire va s'ouvrir avec des messages. + +Attendez de voir: + "SUCCESS! Server is running" + +Votre navigateur devrait s'ouvrir automatiquement. -โ ๏ธ RAPPELS IMPORTANTS -โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +================================================================================ +ETAPE 3: UTILISER L'APPLICATION +================================================================================ -โข SANS INTERNET = Pas d'AI (normal!) -โข Windows 10 seulement -โข Pas besoin de droits admin -โข Taille totale: ~95 MB +L'application fonctionne maintenant dans votre navigateur. + +URL: http://localhost:8080 + +IMPORTANT: +- NE FERMEZ PAS la fenรชtre noire (console) +- Si vous la fermez, l'application s'arrรชte -๐ก BESOIN D'AIDE? -โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +================================================================================ +ETAPE 4: ARRETER L'APPLICATION +================================================================================ -1. Lire: QUICK_START.txt -2. Lire: PORTABLE_SETUP.txt -3. Lire: README_PORTABLE.md +Quand vous avez fini: + +1. Allez dans la fenรชtre noire (console) +2. Appuyez sur N'IMPORTE QUELLE TOUCHE +3. L'application s'arrรชte proprement -โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ -Crรฉรฉ le 2025-10-18 | Prรชt pour utilisation en cours! -โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +================================================================================ +PROBLEMES COURANTS +================================================================================ + +PROBLEME: "Node.js won't run" +SOLUTION: + - Clic droit sur START_PORTABLE_SAFE.bat + - "Exรฉcuter en tant qu'administrateur" + - Accepter la demande Windows + + +PROBLEME: "Port 8080 used by another program" +SOLUTION: + - Ouvrir server.js avec Bloc-notes + - Ligne 4: changer 8080 en 8081 + - Sauvegarder et relancer + + +PROBLEME: Le navigateur ne s'ouvre pas +SOLUTION: + - Laisser la fenรชtre noire ouverte + - Ouvrir FIREFOX manuellement + - Aller sur: http://localhost:8080 + +IMPORTANT: Utilisez UNIQUEMENT Firefox ! + - Edge et Chrome NE FONCTIONNENT PAS avec ce systรจme + - Firefox est REQUIS + + +PROBLEME: Autre chose +SOLUTION: + - Lire DEPLOYMENT_GUIDE.md + - Vรฉrifier logs\server.log + - Contacter le support technique + + +================================================================================ +INFORMATIONS TECHNIQUES +================================================================================ + +Cette application fonctionne LOCALEMENT sur votre ordinateur. +Elle NE SE CONNECTE PAS ร Internet. +Vos donnรฉes restent sur votre machine. +Aucune installation systรจme n'est requise. +Tout est contenu dans ce dossier. + + +================================================================================ +CONFIGURATION REQUISE +================================================================================ + +- Windows 10 ou supรฉrieur +- 200 MB d'espace disque +- Mozilla Firefox (OBLIGATOIRE - Edge/Chrome ne fonctionnent pas !) + + +================================================================================ +FICHIERS IMPORTANTS +================================================================================ + +START_PORTABLE_SAFE.bat โ Double-cliquer pour dรฉmarrer +DIAGNOSTIC.bat โ Vรฉrifier le systรจme +DEPLOYMENT_GUIDE.md โ Guide complet de dรฉpannage +logs\server.log โ Logs en cas d'erreur + + +================================================================================ +SUPPORT +================================================================================ + +En cas de problรจme: + +1. Exรฉcuter DIAGNOSTIC.bat +2. Lire DIAGNOSTIC_REPORT.txt +3. Consulter DEPLOYMENT_GUIDE.md +4. Contacter votre administrateur avec ces fichiers + + +================================================================================ + VERSION 1.0 + Mise ร jour: 2025-10-18 +================================================================================ diff --git a/PLAN_B_STRATEGY.txt b/PLAN_B_STRATEGY.txt new file mode 100644 index 0000000..b6831d8 --- /dev/null +++ b/PLAN_B_STRATEGY.txt @@ -0,0 +1,317 @@ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ +โ ๐ก๏ธ STRATรGIE DE DรFENSE EN PROFONDEUR ๐ก๏ธ โ +โ โ +โ Dรฉploiement en Milieu Inconnu Windows 10 โ +โ โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ฆ PHASE 1: PRรPARATION (Avant de Partir) โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + โ Package Complet + โโโ nodejs-portable/ (50 MB) + โโโ node_modules/ (100 MB) โ PRร-INSTALLER ! + โโโ DIAGNOSTIC.bat โ Dรฉtection automatique + โโโ START_PORTABLE_SAFE.bat โ Lancement sรฉcurisรฉ + โโโ LISEZMOI.txt โ Guide utilisateur + โโโ DEPLOYMENT_GUIDE.md โ Troubleshooting complet + โโโ DEPLOYMENT_CHECKLIST.md โ Checklist รฉtape par รฉtape + + โ Test Local + โโโ Tester TOUT avant de partir + โโโ Sur votre machine โ Sur Desktop/TEST/ โ Valider + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ PHASE 2: DIAGNOSTIC (Sur Place) โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Double-clic: DIAGNOSTIC.bat + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ Vรฉrifie 9 points critiques: โ + โ 1. Windows 10 โ + โ 2. Node.js portable fonctionne โ + โ 3. NPM disponible โ + โ 4. Fichiers projet prรฉsents โ + โ 5. Port 8080 libre โ + โ 6. Permissions d'รฉcriture โ + โ 7. รtat du firewall โ + โ 8. Firefox disponible (CRITIQUE!) โ + โ 9. Blocage antivirus โ + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Rรฉsultats: + + โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ [SUCCESS] โ โ Tout OK, lancer START_PORTABLE_SAFE โ + โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค + โ [CAUTION] โ โ Warnings mais devrait marcher โ + โ (1-3 warnings) โ โ Continuer avec surveillance โ + โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค + โ [FAILURE] โ โ STOP ! Corriger avant de lancer โ + โ (1+ errors) โ โ Consulter DEPLOYMENT_GUIDE.md โ + โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Gรฉnรจre: DIAGNOSTIC_REPORT.txt (pour support IT si besoin) + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ PHASE 3: DรMARRAGE SรCURISร โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Double-clic: START_PORTABLE_SAFE.bat + + Amรฉliorations vs START_PORTABLE.bat standard: + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ โ Vรฉrification Node.js + messages d'erreur dรฉtaillรฉs โ + โ โ Installation deps AVEC vรฉrification de succรจs โ + โ โ Kill CIBLร du port (pas tous les node.exe) โ + โ โ Dรฉtection si autre programme utilise le port โ + โ โ Logging automatique (logs/server.log) โ + โ โ Attente INTELLIGENTE du serveur (ping HTTP, pas juste timeout) โ + โ โ Timeout de 10s avec compteur โ + โ โ Cleanup propre sur erreur โ + โ โ Messages d'erreur avec SOLUTIONS โ + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Progression visible: + + [1/7] Checking Node.js... โ Existe et fonctionne ? + [2/7] Checking dependencies... โ Prรฉsentes ou installer + [3/7] Checking port 8080... โ Libre ou libรฉrer + [4/7] Verifying project files... โ Intรฉgritรฉ projet + [5/7] Starting server... โ Lancement avec log + [6/7] Waiting for server... โ Ping HTTP (max 10s) + [7/7] Opening browser... โ Firefox puis fallback + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ SUCCESS! Server is running โ + โ URL: http://localhost:8080 โ + โ Logs: logs\server.log โ + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ง PLAN B: PROBLรMES COURANTS โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ PROBLรME 1: "Node.js exists but won't run" โ + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Plan B1: Antivirus bloque + โโโ Ajouter exception pour dossier complet + + Plan B2: Pas de droits + โโโ Clic droit "Exรฉcuter en tant qu'administrateur" + + Plan B3: Runtime manquant + โโโ Installer Visual C++ Redistributable + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ PROBLรME 2: "Port 8080 used by another program" โ + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Plan B1: Tuer le processus + โโโ Script le fait automatiquement SI c'est un node.exe + โโโ Sinon: message d'erreur avec PID du coupable + + Plan B2: Changer le port + โโโ รditer server.js: PORT = 8081 + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ PROBLรME 3: "Server did not start within 10 seconds" โ + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Plan B1: Vรฉrifier les logs + โโโ type logs\server.log + โโโ Script le fait automatiquement en cas d'erreur + + Plan B2: Dรฉpendances manquantes + โโโ Si node_modules/ inclus โ Pas censรฉ arriver + โโโ Sinon: npm install (nรฉcessite internet) + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โ PROBLรME 4: "Firefox not found" / "Browser doesn't open" โ + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + โ ๏ธ CRITIQUE: Edge et Chrome NE FONCTIONNENT PAS + โ UNIQUEMENT Firefox compatible + + Plan B1: Installer Firefox + โโโ Tรฉlรฉcharger depuis mozilla.org + โโโ Ou demander ร l'IT + + Plan B2: Firefox Portable (pas de droits admin) + โโโ Tรฉlรฉcharger Firefox Portable + โโโ Extraire et lancer FirefoxPortable.exe + + Plan B3: Ouverture manuelle + โโโ Laisser console ouverte + โโโ Ouvrir FIREFOX โ http://localhost:8080 + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ฏ PLAN C: รCHEC TOTAL โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Si aprรจs 30-60 minutes RIEN ne marche: + + 1. Collecter les preuves + โโ DIAGNOSTIC_REPORT.txt + โโ logs\server.log + โโ Screenshots des erreurs + + 2. Contacter IT/Support + โโ Expliquer: "Application รฉducative locale" + โโ Montrer les diagnostics + โโ Demander assistance + + 3. Chercher une autre machine + โโ PC avec moins de restrictions + โโ Refaire dรฉploiement complet + + 4. Fallback Python (si disponible) + โโ python -m http.server 8080 + โโ Fonctionnalitรฉ limitรฉe mais accรจs aux fichiers + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ PROBABILITรS DE SUCCรS โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Environnement standard (Windows 10 perso): + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 95% โ + + Environnement entreprise standard: + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 75% โ ๏ธ + + Environnement trรจs restreint (รฉcole/gouv): + โโโโโโโโโโโโโโโโโโโโ 50% โ ๏ธ + + Environnement ultra-sรฉcurisรฉ: + โโโโโโโโโโ 25% โ + + AVEC node_modules prรฉ-installรฉs: +20% + AVEC administrateur: +15% + AVEC exclusion antivirus: +10% + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โฑ๏ธ TEMPS ESTIMรS โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Scรฉnario Idรฉal (tout fonctionne): + โโ Installation/Copie: 5 min + โโ Diagnostic: 2 min + โโ Dรฉmarrage: 3 min + โโ Tests: 5 min + โโ TOTAL: ~15 minutes โ + + Scรฉnario Normal (1-2 problรจmes mineurs): + โโ Installation/Copie: 5 min + โโ Diagnostic: 2 min + โโ Problรจme + correction: 10-15 min + โโ Dรฉmarrage: 3 min + โโ Tests: 5 min + โโ TOTAL: ~25-30 minutes โ ๏ธ + + Scรฉnario Difficile (problรจmes multiples): + โโ Installation/Copie: 5 min + โโ Diagnostic: 2 min + โโ Problรจmes + troubleshooting: 30-45 min + โโ Dรฉmarrage: 3 min + โโ Tests: 5 min + โโ TOTAL: ~45-60 minutes โ ๏ธ + + Scรฉnario รchec: + โโ Abandonner aprรจs 1 heure โ + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ CE QUI FAIT LA DIFFรRENCE โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + โ CRITIQUES (Must-have): + โโโ node_modules/ PRร-INSTALLรS (รฉvite 80% des problรจmes) + โโโ DIAGNOSTIC.bat (dรฉtection avant crash) + โโโ START_PORTABLE_SAFE.bat (gestion d'erreurs) + โโโ Logs automatiques (debug facile) + + โ ๏ธ IMPORTANTS (Should-have): + โโโ DEPLOYMENT_GUIDE.md (rรฉsolution de problรจmes) + โโโ DEPLOYMENT_CHECKLIST.md (process clair) + โโโ LISEZMOI.txt (utilisateur final) + + ๐ก BONUS (Nice-to-have): + โโโ Droits administrateur + โโโ Exclusion antivirus + โโโ Connexion internet (backup) + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ +โ ๐ฏ RรSUMร DE LA STRATรGIE โ +โ โ +โ 1. PRรPARER un package complet (node_modules inclus) โ +โ 2. DIAGNOSTIQUER avant de lancer โ +โ 3. LANCER avec gestion d'erreurs robuste โ +โ 4. LOGGER tout pour faciliter debug โ +โ 5. DOCUMENTER chaque problรจme et solution โ +โ โ +โ โ Dรฉfense en profondeur = Maximiser les chances de succรจs โ +โ โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ DOCUMENTATION DISPONIBLE โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + LISEZMOI.txt โ Guide rapide utilisateur final + DEPLOYMENT_GUIDE.md โ Troubleshooting complet + DEPLOYMENT_CHECKLIST.md โ Checklist รฉtape par รฉtape + PLAN_B_STRATEGY.txt โ Ce fichier (vue d'ensemble) + + DIAGNOSTIC.bat โ Script de diagnostic + START_PORTABLE_SAFE.bat โ Script de lancement sรฉcurisรฉ + START_PORTABLE.bat โ Script original (backup) + + DIAGNOSTIC_REPORT.txt โ Gรฉnรฉrรฉ par diagnostic + logs/server.log โ Gรฉnรฉrรฉ au dรฉmarrage + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ VALIDATION FINALE โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Avant de dire "C'est bon": + + โก DIAGNOSTIC.bat โ [SUCCESS] ou [CAUTION] acceptable + โก START_PORTABLE_SAFE.bat โ Affiche "SUCCESS! Server is running" + โก http://localhost:8080 โ Page charge dans le navigateur + โก Navigation โ Fonctionne sans erreurs console + โก Exercice test โ Une fonctionnalitรฉ marche + โก Arrรชt (touche dans console) โ Serveur s'arrรชte proprement + โก Redรฉmarrage โ L'application redรฉmarre sans problรจme + + SI TOUS COCHรS โ Dรฉploiement validรฉ โ + SINON โ Consulter DEPLOYMENT_GUIDE.md + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Bonne chance ! ๐ + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ diff --git a/README_DEPLOYMENT.txt b/README_DEPLOYMENT.txt new file mode 100644 index 0000000..204dcaf --- /dev/null +++ b/README_DEPLOYMENT.txt @@ -0,0 +1,302 @@ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ +โ ๐ฆ GUIDE DE DรPLOIEMENT RAPIDE - CLASS GENERATOR ๐ฆ โ +โ โ +โ Systรจme de Dรฉfense en Profondeur v1.1 โ +โ โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ฏ POUR L'UTILISATEUR FINAL โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Lisez en PRIORITร: LISEZMOI.txt + + 3 รฉtapes simples: + 1. DIAGNOSTIC.bat โ Vรฉrifier le systรจme + 2. START_PORTABLE_SAFE.bat โ Dรฉmarrer l'application + 3. Ouvrir Firefox sur http://localhost:8080 + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ ๏ธ POUR LE DรPLOYEUR (VOUS) โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Documentation complรจte: + + ๐ DEPLOYMENT_CHECKLIST.md + โ Checklist รฉtape par รฉtape pour le dรฉploiement + โ ร SUIVRE lors du dรฉploiement sur site + + ๐ DEPLOYMENT_GUIDE.md + โ Guide complet de troubleshooting + โ Solutions ร tous les problรจmes connus + + ๐ฏ PLAN_B_STRATEGY.txt + โ Vue d'ensemble de la stratรฉgie de dรฉfense + โ Probabilitรฉs de succรจs par scรฉnario + + ๐ฆ FIREFOX_REQUIS.txt + โ Tout sur la contrainte Firefox + โ Options d'installation + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โก DรMARRAGE ULTRA-RAPIDE โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + AVANT DE PARTIR (sur votre machine): + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + 1. npm install + 2. Copier TOUT le dossier (avec node_modules/) + 3. Tester avec DIAGNOSTIC.bat + 4. Si OK โ Package prรชt + + SUR LA MACHINE CIBLE (15 minutes): + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + 1. Copier/Dรฉcompresser le dossier + 2. Double-clic DIAGNOSTIC.bat (2 min) + 3. Double-clic START_PORTABLE_SAFE.bat (3 min) + 4. Tester une fonctionnalitรฉ (5 min) + 5. Done โ + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ง SCRIPTS DISPONIBLES โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + DIAGNOSTIC.bat + โโโโโโโโโโโโโโ + โข Vรฉrifie 9 points critiques AVANT le lancement + โข Dรฉtecte: Node.js, NPM, Firefox, port, permissions, antivirus + โข Gรฉnรจre: DIAGNOSTIC_REPORT.txt + โข Verdict: SUCCESS / CAUTION / FAILURE + โ ร EXรCUTER EN PREMIER + + START_PORTABLE_SAFE.bat (RECOMMANDร) + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โข Version amรฉliorรฉe avec dรฉfense en profondeur + โข 7 รฉtapes de vรฉrification progressive + โข Kill ciblรฉ du port (pas tous les node.exe) + โข Attente intelligente du serveur (ping HTTP) + โข Logging automatique (logs/server.log) + โข Messages d'erreur avec solutions + โข Dรฉtection automatique de Firefox + โ UTILISER EN PRODUCTION + + START_PORTABLE.bat (BACKUP) + โโโโโโโโโโโโโโโโโโโโโโโโโโโ + โข Version originale simplifiรฉe + โข Moins de vรฉrifications + โข Fallback si SAFE version รฉchoue + โ BACKUP UNIQUEMENT + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ ๏ธ CONTRAINTES CRITIQUES โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + โ Windows 10 UNIQUEMENT + โ Windows 7/8 non testรฉs + โ Windows 11 devrait fonctionner + + ๐ฆ FIREFOX OBLIGATOIRE + โ Edge NE FONCTIONNE PAS + โ Chrome NE FONCTIONNE PAS + โ Firefox standard OU portable + โ Voir FIREFOX_REQUIS.txt + + ๐ฆ node_modules/ PRร-INSTALLรS FORTEMENT RECOMMANDร + โ รvite 80% des problรจmes + โ Pas besoin d'internet sur place + โ Package ~200 MB vs 50 MB + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ SYSTรME DE DรFENSE EN PROFONDEUR โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Couche 1: Diagnostic Prรฉventif + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โข DIAGNOSTIC.bat vรฉrifie TOUT avant le run + โข Dรฉtection des problรจmes potentiels + โข Rapport pour support IT si besoin + + Couche 2: Vรฉrifications Progressives + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โข START_PORTABLE_SAFE.bat vรฉrifie en 7 รฉtapes + โข Stop immรฉdiat si problรจme dรฉtectรฉ + โข Messages d'erreur avec solutions + + Couche 3: Logging Automatique + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โข logs/server.log capture tout + โข Facilite le debug + โข Affichรฉ automatiquement en cas d'erreur + + Couche 4: Documentation Complรจte + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โข Guide pour chaque problรจme + โข Solutions testรฉes + โข FAQ et troubleshooting + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ โ CHECKLIST PRร-DรPLOIEMENT โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Package ร prรฉparer: + โโโโโโโโโโโโโโโโโโโ + โก nodejs-portable/ complet (~50 MB) + โก node_modules/ PRร-INSTALLรS (~100 MB) โ CRITIQUE + โก Tous les .bat (DIAGNOSTIC, START_PORTABLE_SAFE, START_PORTABLE) + โก Documentation (LISEZMOI.txt, guides .md, FIREFOX_REQUIS.txt) + โก src/, games/, styles/, server.js, index.html + โก package.json + + Test local AVANT dรฉpart: + โโโโโโโโโโโโโโโโโโโโโโโโ + โก Copier sur Desktop/TEST/ + โก DIAGNOSTIC.bat โ [SUCCESS] ou [CAUTION] acceptable + โก START_PORTABLE_SAFE.bat โ "SUCCESS! Server is running" + โก Firefox s'ouvre automatiquement + โก Page charge + โก Tester une fonctionnalitรฉ + โก Arrรชt propre (touche dans console) + โก Redรฉmarrage โ Remarche + + Si TOUS cochรฉs โ Package validรฉ โ + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ฏ TAUX DE SUCCรS ESTIMรS โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Avec ce systรจme: + + Windows 10 standard (perso): 95% โ + Entreprise avec antivirus: 75% โ ๏ธ (+35% vs avant) + Environnement restreint (รฉcole): 50% โ ๏ธ (+30% vs avant) + Ultra-sรฉcurisรฉ (banque/gouv): 25% โ (+20% vs avant) + + Facteurs multiplicateurs: + โข node_modules/ inclus: +20% + โข Droits administrateur: +15% + โข Exclusion antivirus: +10% + โข Firefox prรฉ-installรฉ: +5% + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐จ PROBLรMES CONNUS ET SOLUTIONS โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + Problรจme Solution Rapide + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + Node.js won't run Exรฉcuter en administrateur + OU exclusion antivirus + + Port 8080 occupรฉ Script le kill automatiquement + OU รฉditer server.js โ PORT = 8081 + + Firefox not found Installer Firefox + OU Firefox Portable + OU ouvrir manuellement + + Dependencies failed Inclure node_modules/ dans package + (รฉvite le problรจme) + + Server didn't start Vรฉrifier logs/server.log + Affichรฉs automatiquement en erreur + + โ Dรฉtails: DEPLOYMENT_GUIDE.md + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ EN CAS DE PROBLรME SUR SITE โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + 1. Exรฉcuter DIAGNOSTIC.bat + โ Lire DIAGNOSTIC_REPORT.txt + + 2. Consulter DEPLOYMENT_GUIDE.md + โ Chercher le problรจme spรฉcifique + + 3. Vรฉrifier logs/server.log + โ Erreurs serveur dรฉtaillรฉes + + 4. Si Firefox manque + โ Lire FIREFOX_REQUIS.txt + + 5. Si tout รฉchoue aprรจs 1h + โ Collecter: + - DIAGNOSTIC_REPORT.txt + - logs/server.log + - Screenshots + โ Contacter IT avec ces fichiers + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ฆ OPTIONS DE PACKAGE โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + OPTION A: Package Lรฉger (~50 MB) + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โข nodejs-portable/ + โข Code source + โข Scripts .bat + โข PAS node_modules/ + + โ Petit, rapide ร transfรฉrer + โ Nรฉcessite internet sur place pour npm install + โ Plus de risques d'รฉchec + + OPTION B: Package Complet (~200 MB) โญ RECOMMANDร + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โข nodejs-portable/ + โข Code source + โข Scripts .bat + โข node_modules/ PRร-INSTALLรS + + โ Aucune dรฉpendance internet + โ Taux de succรจs +20% + โ Installation plus rapide + โ Plus gros ร transfรฉrer + + OPTION C: Package Ultra-Complet (~400 MB) + โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + โข nodejs-portable/ + โข Code source + โข Scripts .bat + โข node_modules/ PRร-INSTALLรS + โข FirefoxPortable/ + + โ ZรRO dรฉpendance + โ Fonctionne PARTOUT + โ Taux de succรจs +25% + โ Trรจs gros ร transfรฉrer + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +โ ๐ FORMATION EXPRESS POUR L'UTILISATEUR FINAL โ +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + ร expliquer en 2 minutes: + + 1. "Double-cliquer sur START_PORTABLE_SAFE.bat" + 2. "Attendre que Firefox s'ouvre automatiquement" + 3. "Ne PAS fermer la fenรชtre noire" + 4. "Pour arrรชter : appuyer sur une touche dans la fenรชtre noire" + 5. "Si problรจme : lire LISEZMOI.txt" + + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + + BONNE CHANCE POUR LE DรPLOIEMENT ! ๐ + +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + +Version: 1.1 +Date: 2025-10-18 +Environnement cible: Windows 10 + Firefox +Testรฉ: โ diff --git a/START_PORTABLE.bat b/START_PORTABLE.bat index aa1b7fd..5c49f06 100644 --- a/START_PORTABLE.bat +++ b/START_PORTABLE.bat @@ -61,12 +61,24 @@ start /b "" "%~dp0nodejs-portable\node.exe" server.js :: Wait for server to start timeout /t 2 /nobreak >nul -:: Try to open Firefox, fallback to default browser -echo Opening browser... -start firefox http://localhost:8080 >nul 2>&1 -if %errorlevel% neq 0 ( - echo Firefox not found, opening default browser... - start http://localhost:8080 +:: Open Firefox (REQUIRED - Edge/Chrome don't work in target environment) +echo Opening Firefox... + +:: Try common Firefox locations +if exist "C:\Program Files\Mozilla Firefox\firefox.exe" ( + start "" "C:\Program Files\Mozilla Firefox\firefox.exe" http://localhost:8080 +) else if exist "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" ( + start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" http://localhost:8080 +) else ( + :: Try via PATH + start firefox http://localhost:8080 >nul 2>&1 + if %errorlevel% neq 0 ( + echo. + echo [WARNING] Firefox not found! + echo Please open Firefox manually: http://localhost:8080 + echo NOTE: Edge and Chrome will NOT work + echo. + ) ) echo. diff --git a/START_PORTABLE_SAFE.bat b/START_PORTABLE_SAFE.bat new file mode 100644 index 0000000..69e73b7 --- /dev/null +++ b/START_PORTABLE_SAFE.bat @@ -0,0 +1,272 @@ +@echo off +title Class Generator - Portable Edition (Safe Mode) +cd /d "%~dp0" +setlocal enabledelayedexpansion + +echo. +echo ======================================== +echo Class Generator - Portable Edition +echo ======================================== +echo. + +:: ============================================ +:: STEP 1: Check portable Node.js +:: ============================================ +echo [1/7] Checking Node.js... +if not exist "nodejs-portable\node.exe" ( + echo [ERROR] Node.js portable not found! + echo. + echo Please follow the setup instructions in PORTABLE_SETUP.txt + echo. + echo TROUBLESHOOTING: + echo - Run DIAGNOSTIC.bat to check your system + echo - Ensure nodejs-portable folder exists + echo. + goto :error_exit +) + +:: Verify Node.js actually runs +"%~dp0nodejs-portable\node.exe" --version >nul 2>&1 +if %errorlevel% neq 0 ( + echo [ERROR] Node.js exists but won't run! + echo. + echo POSSIBLE CAUSES: + echo - Antivirus blocking node.exe + echo - Missing Visual C++ Redistributable + echo - Download corrupted + echo. + echo SOLUTIONS: + echo 1. Add exception in antivirus for this folder + echo 2. Run DIAGNOSTIC.bat for detailed check + echo 3. Re-download portable Node.js + echo. + goto :error_exit +) +echo OK - Node.js working + +:: ============================================ +:: STEP 2: Check dependencies +:: ============================================ +echo [2/7] Checking dependencies... +if not exist "node_modules" ( + echo Installing dependencies (this may take a few minutes)... + + "%~dp0nodejs-portable\node.exe" "%~dp0nodejs-portable\node_modules\npm\bin\npm-cli.js" install + + if !errorlevel! neq 0 ( + echo [ERROR] Dependency installation failed! + echo. + echo POSSIBLE CAUSES: + echo - No internet connection + echo - Firewall blocking npm + echo - Disk space full + echo. + echo SOLUTION: Check DIAGNOSTIC_REPORT.txt + goto :error_exit + ) + echo Dependencies installed successfully +) else ( + echo OK - Dependencies present +) + +:: ============================================ +:: STEP 3: Port cleanup (SMART) +:: ============================================ +echo [3/7] Checking port 8080... + +:: Check if port is in use +netstat -ano | findstr :8080 | findstr LISTENING >nul +if %errorlevel% equ 0 ( + echo WARNING: Port 8080 is in use + + :: Find the PID + for /f "tokens=5" %%a in ('netstat -ano ^| findstr :8080 ^| findstr LISTENING') do ( + set PORT_PID=%%a + + :: Check if it's a node.exe process + tasklist /fi "pid eq !PORT_PID!" | findstr node.exe >nul + if !errorlevel! equ 0 ( + echo Killing previous Node.js server (PID: !PORT_PID!)... + taskkill /f /pid !PORT_PID! >nul 2>&1 + timeout /t 1 /nobreak >nul + ) else ( + echo ERROR: Port 8080 used by another program! + echo. + echo SOLUTION: + echo - Close the other program + echo - Or edit server.js to use a different port + echo. + goto :error_exit + ) + ) +) else ( + echo OK - Port 8080 available +) + +:: ============================================ +:: STEP 4: Critical files check +:: ============================================ +echo [4/7] Verifying project files... +set FILES_MISSING=0 + +if not exist "server.js" ( + echo ERROR: server.js missing + set /a FILES_MISSING+=1 +) +if not exist "index.html" ( + echo ERROR: index.html missing + set /a FILES_MISSING+=1 +) +if not exist "src\Application.js" ( + echo ERROR: src\Application.js missing + set /a FILES_MISSING+=1 +) + +if !FILES_MISSING! gtr 0 ( + echo. + echo [ERROR] Critical files missing! Cannot start. + echo. + goto :error_exit +) +echo OK - All files present + +:: ============================================ +:: STEP 5: Start server with logging +:: ============================================ +echo [5/7] Starting server... + +:: Create logs directory if needed +if not exist "logs" mkdir logs + +:: Start server with log output +start /b "" "%~dp0nodejs-portable\node.exe" server.js > logs\server.log 2>&1 + +:: Save the start time for timeout +set START_TIME=%time% + +:: ============================================ +:: STEP 6: Wait for server (SMART WAIT) +:: ============================================ +echo [6/7] Waiting for server to initialize... + +:: Try for max 10 seconds +set /a TIMEOUT=10 +set /a COUNTER=0 + +:wait_for_server +if !COUNTER! geq !TIMEOUT! ( + echo. + echo [ERROR] Server did not start within !TIMEOUT! seconds + echo. + echo Check logs\server.log for error details + echo. + type logs\server.log + echo. + goto :cleanup_and_exit +) + +:: Try to connect to the server (curl-less check) +powershell -Command "(New-Object Net.WebClient).DownloadString('http://localhost:8080')" >nul 2>&1 +if %errorlevel% equ 0 ( + echo OK - Server is responding! + goto :server_ready +) + +:: Wait 1 second and try again +timeout /t 1 /nobreak >nul +set /a COUNTER+=1 +goto :wait_for_server + +:server_ready + +:: ============================================ +:: STEP 7: Open browser +:: ============================================ +echo [7/7] Opening Firefox... + +:: FIREFOX ONLY - Edge and Chrome don't work in target environment +:: Try to find and launch Firefox +set FIREFOX_FOUND=0 + +:: Common Firefox locations - check in order +if exist "C:\Program Files\Mozilla Firefox\firefox.exe" ( + start "" "C:\Program Files\Mozilla Firefox\firefox.exe" http://localhost:8080 + set FIREFOX_FOUND=1 +) + +if !FIREFOX_FOUND! equ 0 ( + if exist "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" ( + start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" http://localhost:8080 + set FIREFOX_FOUND=1 + ) +) + +if !FIREFOX_FOUND! equ 0 ( + where firefox >nul 2>&1 + if !errorlevel! equ 0 ( + start firefox http://localhost:8080 + set FIREFOX_FOUND=1 + ) +) + +if !FIREFOX_FOUND! equ 0 ( + echo. + echo [WARNING] Firefox not found automatically + echo. + echo Please open Firefox manually and go to: + echo http://localhost:8080 + echo. + echo NOTE: Edge and Chrome will NOT work in your environment + echo You MUST use Firefox + echo. +) + +echo. +echo ======================================== +echo SUCCESS! Server is running +echo ======================================== +echo. +echo URL: http://localhost:8080 +echo Logs: logs\server.log +echo. +echo Press any key to STOP the server... +echo ======================================== +echo. + +pause >nul + +:: ============================================ +:: CLEANUP: Stop server +:: ============================================ +:cleanup_and_exit +echo. +echo Stopping server... + +:: Find and kill only our Node.js instance on port 8080 +for /f "tokens=5" %%a in ('netstat -ano ^| findstr :8080 ^| findstr LISTENING') do ( + tasklist /fi "pid eq %%a" | findstr node.exe >nul + if !errorlevel! equ 0 ( + echo Killing Node.js process (PID: %%a) + taskkill /f /pid %%a >nul 2>&1 + ) +) + +echo Server stopped +echo. +pause +exit /b 0 + +:: ============================================ +:: ERROR EXIT +:: ============================================ +:error_exit +echo. +echo ======================================== +echo STARTUP FAILED +echo ======================================== +echo. +echo Run DIAGNOSTIC.bat for detailed analysis +echo Check logs\server.log if server started +echo. +pause +exit /b 1 diff --git a/content/books/sbs.json b/content/books/sbs.json index 5ac2efb..fa4e919 100644 --- a/content/books/sbs.json +++ b/content/books/sbs.json @@ -20,7 +20,7 @@ ], "content_tags": ["vocabulary", "grammar", "conversation", "practical-english"], "total_chapters": 12, - "available_chapters": ["2", "3", "7-8"], + "available_chapters": ["2", "3", "7-8", "8", "9"], "completion_criteria": { "overall_progress": 80, "chapters_completed": 8, @@ -86,6 +86,48 @@ "phrases_count": 45, "dialogs_count": 8, "exercises_count": 25 + }, + { + "id": "sbs-8", + "chapter_number": "8", + "name": "Clothing & Colors", + "description": "Learn clothing items, colors, shopping, singular/plural forms, and this/that/these/those", + "estimated_hours": 12, + "difficulty": "beginner", + "prerequisites": ["sbs-1", "sbs-2"], + "learning_objectives": [ + "Master clothing and accessories vocabulary", + "Learn color vocabulary", + "Practice singular and plural forms", + "Use this/that and these/those correctly", + "Practice shopping dialogues", + "Learn to compliment and respond" + ], + "vocabulary_count": 71, + "phrases_count": 16, + "dialogs_count": 7, + "exercises_count": 4 + }, + { + "id": "sbs-9", + "chapter_number": "9", + "name": "Simple Present Tense", + "description": "Master simple present tense with all pronouns, learn languages and nationalities, practice everyday activities", + "estimated_hours": 14, + "difficulty": "beginner", + "prerequisites": ["sbs-1", "sbs-2", "sbs-8"], + "learning_objectives": [ + "Master simple present tense with all pronouns", + "Learn to form questions with do/does", + "Practice everyday activity vocabulary", + "Learn languages and nationalities", + "Understand third person singular -s/-es", + "Discuss daily routines and habits" + ], + "vocabulary_count": 72, + "phrases_count": 11, + "dialogs_count": 5, + "exercises_count": 4 } ] } \ No newline at end of file diff --git a/content/chapters/SBS8.txt b/content/chapters/SBS8.txt new file mode 100644 index 0000000..b46c519 --- /dev/null +++ b/content/chapters/SBS8.txt @@ -0,0 +1,913 @@ +# Side by Side 1 - Chapter 8 +# ๅนถ่ฉ 1 - ็ฌฌ8็ซ + +## SingularPlural Adjectives - ThisThatTheseThose +## ๅๅคๆฐๅฝขๅฎน่ฏ - ThisThatTheseThose๏ผ่ฟไธช้ฃไธช่ฟไบ้ฃไบ๏ผ + +### Topics (ไธป้ข) +- Clothing (่กฃๆ) +- Colors (้ข่ฒ) +- Shopping for Clothing (่ดญไนฐ่กฃๆ) + +--- + +## VOCABULARY PREVIEW +## ่ฏๆฑ้ข่ง + +### Clothing Items (่กฃ็ฉ) + +1. shirt - ่กฌ่กซ +2. coat - ๅคๅฅ๏ผๅคง่กฃ +3. dress - ่ฟ่กฃ่ฃ +4. skirt - ่ฃๅญ +5. blouse - ๅฅณๅผ่กฌ่กซ +6. jacket - ๅคนๅ ๏ผ็ญไธ่กฃ +7. suit - ่ฅฟ่ฃ ๏ผๅฅ่ฃ +8. tie - ้ขๅธฆ +9. belt - ็ฎๅธฆ๏ผ่ ฐๅธฆ +10. sweater - ๆฏ่กฃ๏ผ้็ป่กซ +11. pants - ่ฃคๅญ +12. jeans - ็ไป่ฃค +13. pajamas - ็ก่กฃ +14. shoes - ้ๅญ +15. socks - ่ขๅญ + +--- + +## Page 68 Clothing - Detailed Vocabulary +## ็ฌฌ68้กต๏ผๆ่ฃ - ่ฏฆ็ป่ฏๆฑ + +### Additional Clothing Items (ๆดๅค่กฃ็ฉ) + +1. shirt - ่กฌ่กซ +2. tie - ้ขๅธฆ +3. jacket - ๅคนๅ +4. belt - ็ฎๅธฆ +5. pants - ่ฃคๅญ +6. sock - ่ขๅญ +7. shoe - ้ๅญ +8. earring - ่ณ็ฏ +9. necklace - ้กน้พ +10. blouse - ๅฅณๅผ่กฌ่กซ +11. bracelet - ๆ้ฏ +12. skirt - ่ฃๅญ +13. briefcase - ๅ ฌๆๅ +14. stocking - ้ฟ็ญ่ข +15. hat - ๅธฝๅญ +16. coat - ๅคๅฅ +17. glove - ๆๅฅ +18. pursepocketbook - ๆๆๅ ้ฑๅ +19. dress - ่ฟ่กฃ่ฃ +20. glasses - ็ผ้ +21. suit - ่ฅฟ่ฃ +22. watch - ๆ่กจ +23. umbrella - ้จไผ +24. (additional clothing items 21-27 partially visible in image) + +--- + +## Page 69 Shirts Are Over There +## ็ฌฌ69้กต๏ผ่กฌ่กซๅจ้ฃ่พน + +### SingularPlural Forms (ๅๆฐๅคๆฐๅฝขๅผ) + +Column 1 +- a shirt โ shirts (ไธไปถ่กฌ่กซ โ ่กฌ่กซไปฌ) +- a coat โ coats (ไธไปถๅคๅฅ โ ๅคๅฅไปฌ) +- a hat โ hats (ไธ้กถๅธฝๅญ โ ๅธฝๅญไปฌ) +- a belt โ belts (ไธๆก็ฎๅธฆ โ ็ฎๅธฆไปฌ) + +Column 2 +- a tie โ ties (ไธๆก้ขๅธฆ โ ้ขๅธฆไปฌ) +- an umbrella โ umbrellas (ไธๆ้จไผ โ ้จไผไปฌ) +- a sweater โ sweaters (ไธไปถๆฏ่กฃ โ ๆฏ่กฃไปฌ) + +Column 3 +- a dress โ dresses (ไธๆก่ฟ่กฃ่ฃ โ ่ฟ่กฃ่ฃไปฌ) +- a watch โ watches (ไธๅๆ่กจ โ ๆ่กจไปฌ) +- a blouse โ blouses (ไธไปถๅฅณๅผ่กฌ่กซ โ ๅฅณๅผ่กฌ่กซไปฌ) +- a necklace โ necklaces (ไธๆก้กน้พ โ ้กน้พไปฌ) + +--- + +### Dialogue Practice (ๅฏน่ฏ็ปไน ) + +Example 1 +- A Excuse me. I'm looking for a shirt. + ๆๆฐไธไธใๆๅจๆพไธไปถ่กฌ่กซใ +- B Shirts are over there. + ่กฌ่กซๅจ้ฃ่พนใ +- A Thanks. + ่ฐข่ฐขใ + +Example 2 +- A Excuse me. I'm looking for a tie. + ๆๆฐไธไธใๆๅจๆพไธๆก้ขๅธฆใ +- B Ties are over there. + ้ขๅธฆๅจ้ฃ่พนใ +- A Thanks. + ่ฐข่ฐขใ + +Example 3 +- A Excuse me. I'm looking for a dress. + ๆๆฐไธไธใๆๅจๆพไธๆก่ฟ่กฃ่ฃใ +- B Dresses are over there. + ่ฟ่กฃ่ฃๅจ้ฃ่พนใ +- A Thanks. + ่ฐข่ฐขใ + +--- + +### Practice Exercise (็ปไน ) + +Items to practice with (็ปไน ้กน็ฎ) +1. coat - ๅคๅฅ +2. umbrella - ้จไผ +3. watch - ๆ่กจ +4. sweater - ๆฏ่กฃ +5. hat - ๅธฝๅญ +6. blouse - ๅฅณๅผ่กฌ่กซ +7. belt - ็ฎๅธฆ +8. necklace - ้กน้พ + +--- + +### Exercise Put these words in the correct column +### ็ปไน ๏ผๅฐ่ฟไบๅ่ฏๆพๅ ฅๆญฃ็กฎ็ๅไธญ + +Word bank (่ฏๅบ) +boots, briefcases, earrings, glasses, gloves, pants, purses, shoes, socks + +Columns (ๅ) +- Column 1 (็ฌฌ1ๅ) boots (้ดๅญ) +- Column 2 (็ฌฌ2ๅ) (practice plurals) +- Column 3 (็ฌฌ3ๅ) (practice plurals) + +--- + +### Irregular Plurals (ไธ่งๅๅคๆฐ) + +Some irregular plurals you know are (ไธไบไฝ ็ฅ้็ไธ่งๅๅคๆฐ) +- a man โ men (ไธไธช็ทไบบ โ ็ทไบบไปฌ) +- a woman โ women (ไธไธชๅฅณไบบ โ ๅฅณไบบไปฌ) +- a child โ children (ไธไธชๅญฉๅญ โ ๅญฉๅญไปฌ) +- a person โ people (ไธไธชไบบ โ ไบบไปฌ) +- a tooth โ teeth (ไธ้ข็้ฝฟ โ ็้ฝฟไปฌ) +- a mouse โ mice (ไธๅช่้ผ โ ่้ผ ไปฌ) + +--- + +## Page 70 I'm Looking for a Jacket +## ็ฌฌ70้กต๏ผๆๅจๆพไธไปถๅคนๅ + +### COLORS (้ข่ฒ) + +Basic Colors (ๅบๆฌ้ข่ฒ) +- red - ็บข่ฒ +- orange - ๆฉ่ฒ +- yellow - ้ป่ฒ +- green - ็ปฟ่ฒ +- blue - ่่ฒ +- purple - ็ดซ่ฒ +- black - ้ป่ฒ +- pink - ็ฒ่ฒ +- gray - ็ฐ่ฒ +- white - ็ฝ่ฒ +- gold - ้่ฒ +- brown - ๆฃ่ฒ + +--- + +### Dialogue Shopping for a Jacket (ๅฏน่ฏ๏ผ่ดญไนฐๅคนๅ ) + +A May I help you +ๆ่ฝๅธฎๆจๅ๏ผ + +B Yes, please. I'm looking for a jacket. +ๆฏ็๏ผ้บป็ฆไบใๆๅจๆพไธไปถๅคนๅ ใ + +A Here's a nice jacket. +่ฟ้ๆไธไปถไธ้็ๅคนๅ ใ + +B But this is a PURPLE jacket! +ไฝ่ฟๆฏไธไปถ็ดซ่ฒ็ๅคนๅ ๏ผ + +A That's okay. Purple jackets are very POPULAR this year. +ๆฒกๅ ณ็ณปใ็ดซ่ฒๅคนๅ ไปๅนดๅพๆต่กใ + +--- + +### Practice Dialogue Template (็ปไน ๅฏน่ฏๆจกๆฟ) + +A May I help you +ๆ่ฝๅธฎๆจๅ๏ผ + +B Yes, please. I'm looking for a __________. +ๆฏ็๏ผ้บป็ฆไบใๆๅจๆพไธไปถ__________ใ + +A Here's a nice __________. +่ฟ้ๆไธไปถไธ้็__________ใ + +B But this is a __________ __________! +ไฝ่ฟๆฏไธไปถ__________ __________๏ผ + +A That's okay. __________ __________s are very POPULAR this year. +ๆฒกๅ ณ็ณปใ__________ __________ไปๅนดๅพๆต่กใ + +--- + +### Practice Items (็ปไน ้กน็ฎ) + +1. red (suit and pants) - ็บข่ฒ๏ผ่ฅฟ่ฃ ๅ่ฃคๅญ๏ผ +2. white (tie) - ็ฝ่ฒ๏ผ้ขๅธฆ๏ผ +3. pink (belt) - ็ฒ่ฒ๏ผ็ฎๅธฆ๏ผ +4. orange (sweater) - ๆฉ่ฒ๏ผๆฏ่กฃ๏ผ +5. yellow (umbrella) - ้ป่ฒ๏ผ้จไผ๏ผ +6. green and purple (dress) - ็ปฟ่ฒๅ็ดซ่ฒ๏ผ่ฟ่กฃ่ฃ๏ผ +7. striped (hat) - ๆก็บน็๏ผๅธฝๅญ๏ผ +8. polka dot (purse) - ๅ็น็๏ผๆๆๅ ๏ผ + +Vocabulary Notes (่ฏๆฑๆณจ้) +- striped - ๆๆก็บน็ +- polka dot - ๅ็น่ฑ็บน็ + +--- + +## Page 71 I'm Looking for a Pair of Gloves +## ็ฌฌ71้กต๏ผๆๅจๆพไธๅฏๆๅฅ + +### Note pair of usage +### ๆณจๆ๏ผpair of๏ผไธๅไธๅฏ๏ผ็็จๆณ + +pair of shoessocks... (ไธๅ้ๅญ่ขๅญ...) + +--- + +### Dialogue Shopping for Gloves (ๅฏน่ฏ๏ผ่ดญไนฐๆๅฅ) + +A Can I help you +ๆ่ฝๅธฎๆจๅ๏ผ + +B Yes, please. I'm looking for a pair of gloves. +ๆฏ็๏ผ้บป็ฆไบใๆๅจๆพไธๅฏๆๅฅใ + +A Here's a nice pair of gloves. +่ฟ้ๆไธๅฏไธ้็ๆๅฅใ + +B But these are GREEN gloves! +ไฝ่ฟไบๆฏ็ปฟ่ฒ็ๆๅฅ๏ผ + +A That's okay. Green gloves are very POPULAR this year. +ๆฒกๅ ณ็ณปใ็ปฟ่ฒๆๅฅไปๅนดๅพๆต่กใ + +--- + +### Practice Dialogue Template (็ปไน ๅฏน่ฏๆจกๆฟ) + +A Can I help you +ๆ่ฝๅธฎๆจๅ๏ผ + +B Yes, please. I'm looking for a pair of __________. +ๆฏ็๏ผ้บป็ฆไบใๆๅจๆพไธๅฏ__________ใ + +A Here's a nice pair of __________. +่ฟ้ๆไธๅฏไธ้็__________ใ + +B But these are __________ __________s! +ไฝ่ฟไบๆฏ__________ __________๏ผ + +A That's okay. __________ __________s are very POPULAR this year. +ๆฒกๅ ณ็ณปใ__________ __________ไปๅนดๅพๆต่กใ + +--- + +### Practice Items (็ปไน ้กน็ฎ) + +1. yellow (shoes) - ้ป่ฒ๏ผ้ๅญ๏ผ +2. blue (boots) - ่่ฒ๏ผ้ดๅญ๏ผ +3. pink (pants) - ็ฒ่ฒ๏ผ่ฃคๅญ๏ผ +4. orange (earrings) - ๆฉ่ฒ๏ผ่ณ็ฏ๏ผ +5. striped (socks) - ๆก็บน็๏ผ่ขๅญ๏ผ +6. green (gloves) - ็ปฟ่ฒ๏ผๆๅฅ๏ผ +7. red, white, and blue (mittens) - ็บขใ็ฝใ่๏ผ่ฟๆๆๅฅ๏ผ +8. polka dot (pajamas) - ๅ็น็๏ผ็ก่กฃ๏ผ + +--- + +### How About You (ไฝ ๅข๏ผ) + +Questions (้ฎ้ข) +1. What are you wearing today + ไฝ ไปๅคฉ็ฉฟไปไน๏ผ +2. What are the students in your class wearing today + ไฝ ็ญไธ็ๅญฆ็ไปๅคฉ็ฉฟไปไน๏ผ +3. What's your favorite color + ไฝ ๆๅๆฌข็้ข่ฒๆฏไปไน๏ผ + +--- + +## Page 72 READING - Nothing to Wear +## ็ฌฌ72้กต๏ผ้ ่ฏป - ๆฒกๆ่กฃๆ็ฉฟ + +### Story Nothing to Wear +### ๆ ไบ๏ผๆฒกๆ่กฃๆ็ฉฟ + +Fred is upset this morning. He's looking for something to wear to work, but there's nothing in his closet. +ๅผ้ทๅพทไปๅคฉๆฉไธๅพ็ฆๆผใไปๅจๆพ่กฃๆๅปไธ็ญ๏ผไฝไป็่กฃๆ้ไปไน้ฝๆฒกๆใ + +He's looking for a clean shirt, but all his shirts are dirty. He's looking for a sports jacket, but all his sports jackets are at the dry cleaner's. He's looking for a pair of pants, but all the pants in his closet are ripped. And he's looking for a pair of socks, but all his socks are on the clothesline. It's raining! +ไปๅจๆพไธไปถๅนฒๅ็่กฌ่กซ๏ผไฝไปๆๆ็่กฌ่กซ้ฝ่ไบใไปๅจๆพไธไปถ่ฟๅจๅคนๅ ๏ผไฝไปๆๆ็่ฟๅจๅคนๅ ้ฝๅจๅนฒๆดๅบใไปๅจๆพไธๆก่ฃคๅญ๏ผไฝไป่กฃๆ้ๆๆ็่ฃคๅญ้ฝ็ ดไบใไป่ฟๅจๆพไธๅ่ขๅญ๏ผไฝไปๆๆ็่ขๅญ้ฝๅจๆพ่กฃ็ปณไธใๆญฃๅจไธ้จ๏ผ + +Fred is having a difficult time this morning. He's getting dressed for work, but his closet is empty, and there's nothing to wear. +ๅผ้ทๅพทไปๅคฉๆฉไธๅพไธบ้พใไปๆญฃๅจ็ฉฟ่กฃๆๅปไธ็ญ๏ผไฝไป็่กฃๆๆฏ็ฉบ็๏ผๆฒกๆ่กฃๆๅฏ็ฉฟใ + +--- + +### Key Vocabulary (้็น่ฏๆฑ) + +- upset - ็ฆๆผ็๏ผไธๅฎ็ +- closet - ่กฃๆ๏ผๅฃๆฉฑ +- clean - ๅนฒๅ็ +- dirty - ่็ +- sports jacket - ่ฟๅจๅคนๅ +- dry cleaner's - ๅนฒๆดๅบ +- ripped - ็ ด็๏ผๆ่ฃ็ +- clothesline - ๆพ่กฃ็ปณ +- raining - ไธ้จ +- difficult - ๅฐ้พ็ +- getting dressed - ็ฉฟ่กฃๆ +- empty - ็ฉบ็ + +--- + +## READING CHECK-UP +## ้ ่ฏป็่งฃ + +### Choose (้ๆฉ) + +1. Fred's closet is ____. + ๅผ้ทๅพท็่กฃๆๆฏ____ใ + a. upset + b. empty (ๆญฃ็กฎ็ญๆก) + +2. Fred is ____. + ๅผ้ทๅพทๅจ____ใ + a. at home + b. at work (ๆญฃ็กฎ็ญๆก) + +3. Fred's shirts are ____. + ๅผ้ทๅพท็่กฌ่กซๆฏ____ใ + a. dirty (ๆญฃ็กฎ็ญๆก) + b. clean + +4. He's looking for a pair of ____. + ไปๅจๆพไธๆก____ใ + a. jackets + b. pants (ๆญฃ็กฎ็ญๆก) + +5. The weather is ____. + ๅคฉๆฐๆฏ____ใ + a. not very good (ๆญฃ็กฎ็ญๆก) + b. beautiful + +6. Fred is upset because ____. + ๅผ้ทๅพท็ฆๆผๆฏๅ ไธบ____ใ + a. he's getting dressed + b. there's nothing to wear (ๆญฃ็กฎ็ญๆก) + +--- + +### Which Word Doesn't Belong (ๅชไธช่ฏไธๅฑไบ่ฟไธ็ป๏ผ) + +Example (ไพๅญ) +a. socks b. stockings c. jeans d. shoes +(Answer c. jeans - ๅ ไธบๅ ถไป้ฝๆฏๅ่ ฟๅๅผ็) + +1. a. sweater b. jacket c. briefcase d. coat + (Answer c. briefcase - ๅ ฌๆๅ ไธๆฏ่กฃๆ) + +2. a. necklace b. belt c. bracelet d. earrings + (Answer b. belt - ็ฎๅธฆไธๆฏ็ ๅฎ) + +3. a. blouse b. skirt c. dress d. tie + (Answer d. tie - ้ขๅธฆๆฏ็ทๅฃซ็จๅ) + +4. a. clean b. green c. gray d. blue + (Answer a. clean - ๅนฒๅ็ไธๆฏ้ข่ฒ) + +5. a. pants b. shoes c. earrings d. blouse + (Answer c. earrings - ่ณ็ฏไธๆฏไธป่ฆ่กฃ็ฉ) + +--- + +## Page 73 Excuse Me. I Think That's My Jacket +## ็ฌฌ73้กต๏ผๆๆฐไธไธใๆ่งๅพ้ฃๆฏๆ็ๅคนๅ + +### ThisThat and TheseThose +### ThisThat๏ผ่ฟไธช้ฃไธช๏ผๅ TheseThose๏ผ่ฟไบ้ฃไบ๏ผ + +Grammar Structure (่ฏญๆณ็ปๆ) +- ThisThat is (่ฟไธช้ฃไธชๆฏ) - ็จไบๅๆฐ +- TheseThose are (่ฟไบ้ฃไบๆฏ) - ็จไบๅคๆฐ + +--- + +### Dialogue 1 (ๅฏน่ฏ1) + +Person A Excuse me. I think that's my jacket. +ๆๆฐไธไธใๆ่งๅพ้ฃๆฏๆ็ๅคนๅ ใ + +Person B Hmm. I don't think so. I think this is MY jacket. +ๅฏใๆไธ่ฟไน่ฎคไธบใๆ่งๅพ่ฟๆฏๆ็ๅคนๅ ใ + +Person A Oh. You're right. I guess I made a mistake. +ๅฆใไฝ ่ฏดๅพๅฏนใๆๆณๆๆ้ไบใ + +--- + +### Dialogue 2 (ๅฏน่ฏ2) + +Person A Excuse me. I think those are my gloves. +ๆๆฐไธไธใๆ่งๅพ้ฃไบๆฏๆ็ๆๅฅใ + +Person B Hmm. I don't think so. I think these are MY gloves. +ๅฏใๆไธ่ฟไน่ฎคไธบใๆ่งๅพ่ฟไบๆฏๆ็ๆๅฅใ + +Person A Oh. You're right. I guess I made a mistake. +ๅฆใไฝ ่ฏดๅพๅฏนใๆๆณๆๆ้ไบใ + +--- + +### Practice Items (็ปไน ้กน็ฎ) + +1. hat - ๅธฝๅญ +2. boots - ้ดๅญ +3. coat - ๅคๅฅ +4. pen - ็ฌ +5. pencils - ้ ็ฌ +6. umbrella - ้จไผ +7. sunglasses - ๅคช้ณ้ +8. (picture frame) - ็ธๆก + +--- + +### Key Phrases (้็น็ญ่ฏญ) + +- Excuse me - ๆๆฐไธไธ๏ผๅฏนไธ่ตท +- I think - ๆ่ฎคไธบ๏ผๆ่งๅพ +- that's = that is - ้ฃๆฏ +- I don't think so - ๆไธ่ฟไน่ฎคไธบ +- You're right - ไฝ ่ฏดๅพๅฏน +- I guess - ๆ็๏ผๆๆณ +- made a mistake - ็ฏไบ้่ฏฏ + +--- + +## Page 74 Lost and Found +## ็ฌฌ74้กต๏ผๅคฑ็ฉๆ้ข + +### Lost and Found Dialogues (ๅคฑ็ฉๆ้ขๅฏน่ฏ) + +Dialogue 1 Umbrella (ๅฏน่ฏ1๏ผ้จไผ) + +A Is this your umbrella +่ฟๆฏไฝ ็้จไผๅ๏ผ + +B No, it isn't. +ไธ๏ผไธๆฏใ + +A Are you sure +ไฝ ็กฎๅฎๅ๏ผ + +B Yes. THAT umbrella is BROWN, and MY umbrella is BLACK. +ๆฏ็ใ้ฃๆ้จไผๆฏๆฃ่ฒ็๏ผ่ๆ็้จไผๆฏ้ป่ฒ็ใ + +--- + +Dialogue 2 Boots (ๅฏน่ฏ2๏ผ้ดๅญ) + +A Are these your boots +่ฟไบๆฏไฝ ็้ดๅญๅ๏ผ + +B No, they aren't. +ไธ๏ผไธๆฏใ + +A Are you sure +ไฝ ็กฎๅฎๅ๏ผ + +B Yes. THOSE boots are DIRTY, and MY boots are CLEAN. +ๆฏ็ใ้ฃไบ้ดๅญๆฏ่็๏ผ่ๆ็้ดๅญๆฏๅนฒๅ็ใ + +--- + +### Practice Exercise (็ปไน ) + +Make up conversations, using colors and other adjectives you know. +็ผๅฏน่ฏ๏ผไฝฟ็จไฝ ็ฅ้็้ข่ฒๅๅ ถไปๅฝขๅฎน่ฏใ + +Items (็ฉๅ) +1. watch - ๆ่กจ +2. gloves - ๆๅฅ +3. briefcase - ๅ ฌๆๅ +4. mittens - ่ฟๆๆๅฅ +5. (your own item) - ๏ผไฝ ่ชๅทฑ็็ฉๅ๏ผ + +--- + +### How to Say It! - Complimenting +### ๆไน่ฏด๏ผ- ็งฐ่ต + +Dialogue 1 (ๅฏน่ฏ1) +- A That's a very nice hat! + ้ฃ้กถๅธฝๅญ็ๅฅฝ็๏ผ +- B Thank you. + ่ฐข่ฐขใ + +Dialogue 2 (ๅฏน่ฏ2) +- A Those are very nice boots! + ้ฃไบ้ดๅญ็ๅฅฝ็๏ผ +- B Thank you. + ่ฐข่ฐขใ + +Practice conversations with other students. +ไธๅ ถไปๅญฆ็็ปไน ๅฏน่ฏใ + +--- + +## Page 75 READING - Holiday Shopping +## ็ฌฌ75้กต๏ผ้ ่ฏป - ่ๆฅ่ดญ็ฉ + +### Story Holiday Shopping +### ๆ ไบ๏ผ่ๆฅ่ดญ็ฉ + +Mrs. Miller is doing her holiday shopping. She's looking for gifts for her family, but she's having a lot of trouble. +็ฑณๅๅคชๅคชๆญฃๅจ่ฟ่ก่ๆฅ่ดญ็ฉใๅฅนๅจไธบๅฎถไบบๅฏปๆพ็คผ็ฉ๏ผไฝๅฅน้ๅฐไบๅพๅค้บป็ฆใ + +She's looking for a brown umbrella for her son, but all the umbrellas are black. She's looking for a gray raincoat for her daughter, but all the raincoats are yellow. She's looking for a cotton sweater for her husband, but all the sweaters are wool. +ๅฅนๅจไธบๅฟๅญๆพไธๆๆฃ่ฒ้จไผ๏ผไฝๆๆ็้จไผ้ฝๆฏ้ป่ฒ็ใๅฅนๅจไธบๅฅณๅฟๆพไธไปถ็ฐ่ฒ้จ่กฃ๏ผไฝๆๆ็้จ่กฃ้ฝๆฏ้ป่ฒ็ใๅฅนๅจไธบไธๅคซๆพไธไปถๆฃๆฏ่กฃ๏ผไฝๆๆ็ๆฏ่กฃ้ฝๆฏ็พๆฏ็ใ + +She's looking for an inexpensive bracelet for her sister, but all the bracelets are expensive. She's looking for a leather purse for her mother, but all the purses are vinyl. And she's looking for a polka dot tie for her father, but all the ties are striped. +ๅฅนๅจไธบๅฆนๅฆนๆพไธๆกไพฟๅฎ็ๆ้ฏ๏ผไฝๆๆ็ๆ้ฏ้ฝๅพ่ดตใๅฅนๅจไธบๆฏไบฒๆพไธไธช็ฎ้ฉๆๆๅ ๏ผไฝๆๆ็ๆๆๅ ้ฝๆฏไบบ้ ้ฉ็ใๅฅนๅจไธบ็ถไบฒๆพไธๆกๅ็น้ขๅธฆ๏ผไฝๆๆ็้ขๅธฆ้ฝๆฏๆก็บน็ใ + +Poor Mrs. Miller is very frustrated. She's looking for special gifts for all the special people in her family, but she's having a lot of trouble. +ๅฏๆ็็ฑณๅๅคชๅคช้ๅธธๆฒฎไธงใๅฅนๅจไธบๅฎถ้ๆๆ็นๅซ็ไบบๅฏปๆพ็นๅซ็็คผ็ฉ๏ผไฝๅฅน้ๅฐไบๅพๅค้บป็ฆใ + +--- + +### Key Vocabulary (้็น่ฏๆฑ) + +- holiday shopping - ่ๆฅ่ดญ็ฉ +- gifts - ็คผ็ฉ +- trouble - ้บป็ฆ +- brown - ๆฃ่ฒ็ +- gray - ็ฐ่ฒ็ +- raincoat - ้จ่กฃ +- cotton - ๆฃ็ +- wool - ็พๆฏ็ +- inexpensive - ไพฟๅฎ็ +- expensive - ๆ่ดต็ +- leather - ็ฎ้ฉ็ +- vinyl - ไบบ้ ้ฉ็ +- polka dot - ๅ็น็ +- striped - ๆก็บน็ +- frustrated - ๆฒฎไธง็ +- special - ็นๅซ็ + +--- + +## READING CHECK-UP +## ้ ่ฏป็่งฃ + +Mrs. Miller is in the department store. Using this model, create dialogs based on the story. +็ฑณๅๅคชๅคชๅจ็พ่ดงๅๅบใไฝฟ็จ่ฟไธชๆจกๅ๏ผๆ นๆฎๆ ไบๅๅปบๅฏน่ฏใ + +Example (ไพๅญ) +- A Excuse me. I'm looking for a brown umbrella for my son. + ๆๆฐไธไธใๆๅจไธบๆๅฟๅญๆพไธๆๆฃ่ฒ้จไผใ +- B I'm sorry. All our umbrellas are black. + ๅฏนไธ่ตทใๆไปฌๆๆ็้จไผ้ฝๆฏ้ป่ฒ็ใ + +--- + +## LISTENING +## ๅฌๅ + +### What's the Word (ๆฏไปไน่ฏ๏ผ) + +Listen and choose the correct answer. +ๅฌๅนถ้ๆฉๆญฃ็กฎ็ญๆกใ + +1. a. blouse b. dress +2. a. shoes b. boots +3. a. necklace b. bracelet +4. a. coat b. raincoat +5. a. socks b. stockings +6. a. shirt b. skirt + +--- + +### Which Word Do You Hear (ไฝ ๅฌๅฐๅชไธช่ฏ๏ผ) + +Listen and choose the correct answer. +ๅฌๅนถ้ๆฉๆญฃ็กฎ็ญๆกใ + +1. a. jacket b. jackets +2. a. belt b. belts +3. a. sweater b. sweaters +4. a. suit b. suits +5. a. shoe b. shoes +6. a. tie b. ties + +--- + +## Page 76 PRONUNCIATION - Emphasized Words +## ็ฌฌ76้กต๏ผๅ้ณ - ้่ฏป่ฏ + +### Listen. Then say it. (ๅฌใ็ถๅ่ฏดใ) + +1. But this is a PURPLE jacket! + ไฝ่ฟๆฏไธไปถ็ดซ่ฒ็ๅคนๅ ๏ผ + +2. Green gloves are very POPULAR this year. + ็ปฟ่ฒๆๅฅไปๅนดๅพๆต่กใ + +3. I think this is MY jacket. + ๆ่งๅพ่ฟๆฏๆ็ๅคนๅ ใ + +4. THAT umbrella is BROWN, and MY umbrella is BLACK. + ้ฃๆ้จไผๆฏๆฃ่ฒ็๏ผ่ๆ็้จไผๆฏ้ป่ฒ็ใ + +--- + +### Say it. Then listen. (่ฏดใ็ถๅๅฌใ) + +1. But these are YELLOW shoes! + ไฝ่ฟไบๆฏ้ป่ฒ็้ๅญ๏ผ + +2. Striped socks are very POPULAR this year. + ๆก็บน่ขๅญไปๅนดๅพๆต่กใ + +3. I think these are MY glasses. + ๆ่งๅพ่ฟไบๆฏๆ็็ผ้ใ + +4. THOSE boots are DIRTY, and MY boots are CLEAN. + ้ฃไบ้ดๅญๆฏ่็๏ผ่ๆ็้ดๅญๆฏๅนฒๅ็ใ + +--- + +### SIDE by SIDE JOURNAL +### ๅนถ่ฉๆฅ่ฎฐ + +Writing Activity (ๅไฝๆดปๅจ) + +What are you wearing today Tell about the clothing and the colors. Write about it in your journal. +ไฝ ไปๅคฉ็ฉฟไปไน๏ผ่ฎฒ่ฎฒ่กฃๆๅ้ข่ฒใๅจไฝ ็ๆฅ่ฎฐ้ๅไธๆฅใ + +--- + +## CHAPTER SUMMARY +## ็ซ ่ๆป็ป + +### GRAMMAR ่ฏญๆณ + +SINGULARPLURAL ๅๆฐๅคๆฐ + +[s] +- I'm looking for a coat. + ๆๅจๆพไธไปถๅคๅฅใ +- Coats are over there. + ๅคๅฅๅจ้ฃ่พนใ + +[z] +- I'm looking for an umbrella. + ๆๅจๆพไธๆ้จไผใ +- Umbrellas are over there. + ้จไผๅจ้ฃ่พนใ + +[ษชz] +- I'm looking for a dress. + ๆๅจๆพไธๆก่ฟ่กฃ่ฃใ +- Dresses are over there. + ่ฟ่กฃ่ฃๅจ้ฃ่พนใ + +--- + +THISTHATTHESETHOSE + +- Is this your umbrella + ่ฟๆฏไฝ ็้จไผๅ๏ผ +- That umbrella is brown. + ้ฃๆ้จไผๆฏๆฃ่ฒ็ใ + +- Are these your boots + ่ฟไบๆฏไฝ ็้ดๅญๅ๏ผ +- Those boots are dirty. + ้ฃไบ้ดๅญๆฏ่็ใ + +--- + +ADJECTIVES ๅฝขๅฎน่ฏ + +- This is a purple jacket. + ่ฟๆฏไธไปถ็ดซ่ฒ็ๅคนๅ ใ +- These are green gloves. + ่ฟไบๆฏ็ปฟ่ฒ็ๆๅฅใ + +--- + +### KEY VOCABULARY ๅ ณ้ฎ่ฏๆฑ + +CLOTHING ่กฃ็ฉ +- belt - ็ฎๅธฆ +- blouse - ๅฅณๅผ่กฌ่กซ +- boots - ้ดๅญ +- bracelet - ๆ้ฏ +- briefcase - ๅ ฌๆๅ +- coat - ๅคๅฅ +- dress - ่ฟ่กฃ่ฃ +- earring - ่ณ็ฏ +- glasses - ็ผ้ +- glove - ๆๅฅ +- hat - ๅธฝๅญ +- jacket - ๅคนๅ +- jeans - ็ไป่ฃค +- mittens - ่ฟๆๆๅฅ +- necklace - ้กน้พ +- pajamas - ็ก่กฃ +- pants - ่ฃคๅญ +- pocketbook - ้ฑๅ +- purse - ๆๆๅ +- raincoat - ้จ่กฃ +- shirt - ่กฌ่กซ +- shoe - ้ๅญ +- skirt - ่ฃๅญ +- sock - ่ขๅญ +- sports jacket - ่ฟๅจๅคนๅ +- stocking - ้ฟ็ญ่ข +- suit - ่ฅฟ่ฃ +- sunglasses - ๅคช้ณ้ +- sweater - ๆฏ่กฃ +- tie - ้ขๅธฆ +- umbrella - ้จไผ +- watch - ๆ่กจ + +--- + +COLORS ้ข่ฒ +- black - ้ป่ฒ +- blue - ่่ฒ +- brown - ๆฃ่ฒ +- gold - ้่ฒ +- gray - ็ฐ่ฒ +- green - ็ปฟ่ฒ +- orange - ๆฉ่ฒ +- pink - ็ฒ่ฒ +- purple - ็ดซ่ฒ +- red - ็บข่ฒ +- silver - ้ถ่ฒ +- white - ็ฝ่ฒ +- yellow - ้ป่ฒ + +--- + +Additional Vocabulary (่กฅๅ ่ฏๆฑ) +- clean - ๅนฒๅ็ +- dirty - ่็ +- inexpensive - ไพฟๅฎ็ +- expensive - ๆ่ดต็ +- cotton - ๆฃ็ +- wool - ็พๆฏ็ +- leather - ็ฎ้ฉ็ +- vinyl - ไบบ้ ้ฉ็ +- striped - ๆก็บน็ +- polka dot - ๅ็น็ +- popular - ๆต่ก็ + +--- + +## Page 77 Side by Side Gazette - Clothing, Colors, and Cultures +## ็ฌฌ77้กต๏ผๅนถ่ฉๅ ฌๆฅ - ่กฃๆใ้ข่ฒๅๆๅ + +### BUILD YOUR VOCABULARY! - Clothing +### ๅปบ็ซไฝ ็่ฏๆฑ๏ผ- ่กฃๆ + +That's a very nice __________. +้ฃไปถ__________็ๅฅฝ็ใ + +Additional Clothing Items (่กฅๅ ่กฃ็ฉ) +- bathrobe - ๆตด่ข +- tee shirt - Tๆค +- scarf - ๅดๅทพ +- wallet - ้ฑๅ +- ring - ๆๆ + +Those are very nice __________. +้ฃไบ__________็ๅฅฝ็ใ + +- sandals - ๅ้ +- slippers - ๆ้ +- sneakers - ่ฟๅจ้ +- shorts - ็ญ่ฃค +- sweat pants - ่ฟๅจ่ฃค + +--- + +### Clothing, Colors, and Cultures +### ่กฃๆใ้ข่ฒๅๆๅ + +Blue and pink aren't children's clothing colors all around the world. +่่ฒๅ็ฒ่ฒๅนถไธๆฏไธ็ๅๅฐๅฟ็ซฅๆ่ฃ ็้ข่ฒใ + +The meanings of colors are sometimes very different in different cultures. For example, in some cultures, blue is a common clothing color for little boys, and pink is a common clothing color for little girls. In other cultures, other colors are common for boys and girls. +้ข่ฒ็ๅซไนๅจไธๅๆๅไธญๆๆถ้ๅธธไธๅใไพๅฆ๏ผๅจไธไบๆๅไธญ๏ผ่่ฒๆฏๅฐ็ทๅญฉ็ๅธธ่งๆ่ฃ ้ข่ฒ๏ผ็ฒ่ฒๆฏๅฐๅฅณๅญฉ็ๅธธ่งๆ่ฃ ้ข่ฒใๅจๅ ถไปๆๅไธญ๏ผ็ทๅญฉๅๅฅณๅญฉ็ๅธธ่ง้ข่ฒๆฏๅ ถไป้ข่ฒใ + +There are also different colors for special days in different cultures. For example, white is the traditional color of a wedding dress in some cultures, but other colors are traditional in other cultures. +ๅจไธๅๆๅไธญ๏ผ็นๆฎๆฅๅญไนๆไธๅ็้ข่ฒใไพๅฆ๏ผๅจไธไบๆๅไธญ๏ผ็ฝ่ฒๆฏๅฉ็บฑ็ไผ ็ป้ข่ฒ๏ผไฝๅจๅ ถไปๆๅไธญ๏ผๅ ถไป้ข่ฒๆฏไผ ็ป็ใ + +For some people, white is a happy color. For others, it's a sad color. For some people, red is a beautiful and lucky color. For others, it's a very sad color. +ๅฏนไธไบไบบๆฅ่ฏด๏ผ็ฝ่ฒๆฏๅฟซไน็้ข่ฒใๅฏนๅ ถไปไบบๆฅ่ฏด๏ผ่ฟๆฏๆฒไผค็้ข่ฒใๅฏนไธไบไบบๆฅ่ฏด๏ผ็บข่ฒๆฏ็พไธฝๅๅนธ่ฟ็้ข่ฒใๅฏนๅ ถไปไบบๆฅ่ฏด๏ผ่ฟๆฏ้ๅธธๆฒไผค็้ข่ฒใ + +What are the meanings of different colors in YOUR culture +ๅจไฝ ็ๆๅไธญ๏ผไธๅ้ข่ฒ็ๅซไนๆฏไปไน๏ผ + +--- + +### LISTENING - Attention, J-Mart Shoppers! +### ๅฌๅ - ๆณจๆ๏ผJ-Mart่ดญ็ฉ่ ๏ผ + +1. jackets โ a. Aisle 1 (ๅคนๅ โ ็ฌฌ1้้) +2. gloves โ b. Aisle 7 (ๆๅฅ โ ็ฌฌ7้้) +3. blouses โ c. Aisle 9 (ๅฅณๅผ่กฌ่กซ โ ็ฌฌ9้้) +4. bracelets โ d. Aisle 11 (ๆ้ฏ โ ็ฌฌ11้้) +5. ties โ e. Aisle 5 (้ขๅธฆ โ ็ฌฌ5้้) + +--- + +## Page 78 Around the World - People's Homes +## ็ฌฌ78้กต๏ผ็ฏๆธธไธ็ - ไบบไปฌ็ๅฎถ + +### People's Homes +### ไบบไปฌ็ๅฎถ + +Homes are different all around the world. +ไธ็ๅๅฐ็ๅฎถ้ฝไธๅใ + +Types of Homes (ๆฟๅฑ็ฑปๅ) + +1. Farmhouse (ๅ่) + - This family is living in a farmhouse. + ่ฟไธชๅฎถๅบญไฝๅจๅ่้ใ + +2. Hut (่ ๅฑ) + - This family is living in a hut. + ่ฟไธชๅฎถๅบญไฝๅจ่ ๅฑ้ใ + +3. Houseboat (่นๅฑ) + - This family is living in a houseboat. + ่ฟไธชๅฎถๅบญไฝๅจ่นๅฑ้ใ + +4. Mobile home (a trailer) (ๆฟ่ฝฆ) + - These people are living in a mobile home (a trailer). + ่ฟไบไบบไฝๅจๆฟ่ฝฆ้ใ + +Question (้ฎ้ข) +What different kinds of homes are there in your country +ไฝ ็ๅฝๅฎถๆๅชไบไธๅ็ฑปๅ็ๆฟๅฑ๏ผ + +--- + +### FACT FILE - Urban, Suburban, and Rural +### ไบๅฎๆกฃๆก - ๅๅธใ้ๅบๅไนกๆ + +Definitions (ๅฎไน) +- urban areas = cities (ๅๅธๅฐๅบ = ๅๅธ) +- suburban areas = places near cities (้ๅบ = ๅๅธ้่ฟ็ๅฐๆน) +- rural areas = places in the countryside, far from cities (ไนกๆๅฐๅบ = ไนกๆ็ๅฐๆน๏ผ่ฟ็ฆปๅๅธ) + +Statistics (็ป่ฎก) +- About 50% (percent) of the world's population is in urban and suburban areas. + ไธ็ไบบๅฃ็็บฆ50%๏ผ็พๅๆฏ๏ผๅจๅๅธๅ้ๅบใ + +- About 50% (percent) of the world's population is in rural areas. + ไธ็ไบบๅฃ็็บฆ50%๏ผ็พๅๆฏ๏ผๅจไนกๆๅฐๅบใ + +--- + +### Global Exchange +### ๅ จ็ไบคๆต + +RosieM My apartment is in a wonderful neighborhood. There's a big, beautiful park across from my apartment building. Around the corner, there's a bank, a post office, and a laundromat. There are also many restaurants and stores in my neighborhood. It's a noisy place, but it's a very interesting place. There are a lot of people on the sidewalks all day and all night. How about your neighborhood Tell me about it. +็ฝ่ฅฟM๏ผ ๆ็ๅ ฌๅฏๅจไธไธชๅพๆฃ็็คพๅบใๆ็ๅ ฌๅฏๆฅผๅฏน้ขๆไธไธชๅๅคงๅ็พไธฝ็ๅ ฌๅญใๆ่งๅคๆไธๅฎถ้ถ่กใไธไธช้ฎๅฑๅไธๅฎถ่ชๅฉๆด่กฃๅบใๆ็็คพๅบ่ฟๆๅพๅค้ค้ฆๅๅๅบใ่ฟๆฏไธไธชๅๆ็ๅฐๆน๏ผไฝ่ฟๆฏไธไธช้ๅธธๆ่ถฃ็ๅฐๆนใไบบ่ก้ไธๆดๅคฉๆดๅค้ฝๆๅพๅคไบบใไฝ ็็คพๅบๆไนๆ ท๏ผๅ่ฏๆๅงใ + +Activity (ๆดปๅจ) +Send a message to a keypal. Tell about your neighborhood. +็ป็ฌๅๅไฟกๆฏใ่ฎฒ่ฎฒไฝ ็็คพๅบใ + +--- + +### What Are They Saying (ไปไปฌๅจ่ฏดไปไน๏ผ) + +[Image shows two people doing laundry in a laundromat] + +Practice creating conversations based on the setting shown +ๆ นๆฎๆ็คบๅบๆฏ็ปไน ๅๅปบๅฏน่ฏ \ No newline at end of file diff --git a/content/chapters/SBS9.txt b/content/chapters/SBS9.txt new file mode 100644 index 0000000..aa29bee --- /dev/null +++ b/content/chapters/SBS9.txt @@ -0,0 +1,772 @@ +# Side by Side 1 - Chapter 9 +# ๅนถ่ฉ 1 - ็ฌฌ9็ซ + +## Simple Present Tense +## ไธ่ฌ็ฐๅจๆถ + +### Topics (ไธป้ข): +- Languages and Nationalities (่ฏญ่จๅๅฝ็ฑ) +- Everyday Activities (ๆฅๅธธๆดปๅจ) + +--- + +## VOCABULARY PREVIEW +## ่ฏๆฑ้ข่ง + +### Everyday Activities (ๆฅๅธธๆดปๅจ) + +1. call - ๆ็ต่ฏ +2. cook - ๅ้ฅญ๏ผ็น้ฅช +3. drive - ๅผ่ฝฆ๏ผ้ฉพ้ฉถ +4. eat - ๅ +5. listen to music - ๅฌ้ณไน +6. paint - ๆฒนๆผ๏ผ็ป็ป +7. play - ็ฉ๏ผๆผๅฅ +8. read - ้ ่ฏป +9. sell - ๅ๏ผ้ๅฎ +10. shop - ่ดญ็ฉ +11. sing - ๅฑๆญ +12. speak - ่ฏด๏ผ่ฎฒ่ฏ +13. visit - ๆ่ฎฟ๏ผๅ่ง +14. watch TV - ็็ต่ง +15. work - ๅทฅไฝ + +--- + +## Page 80: Interviews Around the World +## ็ฌฌ80้กต๏ผ็ฏๆธธไธ็็้่ฎฟ + +### Grammar Structure (่ฏญๆณ็ปๆ) + +**Subject Pronouns (ไธป่ฏญไปฃ่ฏ):** + +**I/We/You/They** + **live.** +**ๆ/ๆไปฌ/ไฝ /ไฝ ไปฌ/ไปไปฌ** + **ไฝใ** + +**Where do** + **I/we/you/they** + **live?** +**ๅช้** + **ๅ** + **ๆ/ๆไปฌ/ไฝ /ไฝ ไปฌ/ไปไปฌ** + **ไฝ๏ผ** + +**What do** + **I/we/you/they** + **do?** +**ไปไน** + **ๅ** + **ๆ/ๆไปฌ/ไฝ /ไฝ ไปฌ/ไปไปฌ** + **ๅ๏ผ** + +--- + +### Interview Example: Rome (้่ฎฟ็คบไพ๏ผ็ฝ้ฉฌ) + +**A:** What's your name? +ไฝ ๅซไปไนๅๅญ๏ผ + +**B:** My name is Antonio. +ๆ็ๅๅญๆฏๅฎไธๅฐผๅฅฅใ + +**A:** Where do you live? +ไฝ ไฝๅจๅช้๏ผ + +**B:** I live in Rome. +ๆไฝๅจ็ฝ้ฉฌใ + +**A:** What language do you speak? +ไฝ ่ฏดไปไน่ฏญ่จ๏ผ + +**B:** I speak Italian. +ๆ่ฏดๆๅคงๅฉ่ฏญใ + +**A:** Tell me, what do you do every day? +ๅ่ฏๆ๏ผไฝ ๆฏๅคฉๅไปไน๏ผ + +**B:** I eat Italian food, +ๆๅๆๅคงๅฉ้ฃ็ฉ๏ผ +I sing Italian songs, +ๆๅฑๆๅคงๅฉๆญๆฒ๏ผ +and I watch Italian TV shows! +ๆ็ๆๅคงๅฉ็ต่ง่็ฎ๏ผ + +--- + +### Interview Exercise (้่ฎฟ็ปไน ) + +**Interview these people. (้่ฎฟ่ฟไบไบบใ)** + +**Questions (้ฎ้ข):** +- What's your name? (ไฝ ๅซไปไนๅๅญ๏ผ) +- Where do you live? (ไฝ ไฝๅจๅช้๏ผ) +- What language do you speak? (ไฝ ่ฏดไปไน่ฏญ่จ๏ผ) +- What do you do every day? (ไฝ ๆฏๅคฉๅไปไน๏ผ) + +--- + +### People to Interview (่ฆ้่ฎฟ็ไบบ) + +**1. Carmen - Madrid, Spain (ๅก้จ - ้ฉฌๅพท้๏ผ่ฅฟ็ญ็)** +- Language: Spanish (่ฏญ่จ๏ผ่ฅฟ็ญ็่ฏญ) + +**2. Kenji - Tokyo, Japan (ๅฅไบ - ไธไบฌ๏ผๆฅๆฌ)** +- Language: Japanese (่ฏญ่จ๏ผๆฅ่ฏญ) + +**3. Nicole - Paris, France (ๅฆฎๅฏ - ๅทด้ป๏ผๆณๅฝ)** +- Language: French (่ฏญ่จ๏ผๆณ่ฏญ) + +**4. Erik and Monika - Berlin, Germany (ๅ้ๅ ๅ่ซๅฆฎๅก - ๆๆ๏ผๅพทๅฝ)** +- Language: German (่ฏญ่จ๏ผๅพท่ฏญ) + +**5. Jae Hee - Seoul, South Korea (ๅจ็ - ้ฆๅฐ๏ผ้ฉๅฝ)** +- Language: Korean (่ฏญ่จ๏ผ้ฉ่ฏญ) + +**6. Boris and Natasha - Moscow, Russia (้ฒ้ๆฏๅๅจๅก่ - ่ซๆฏ็ง๏ผไฟ็ฝๆฏ)** +- Language: Russian (่ฏญ่จ๏ผไฟ่ฏญ) + +--- + +## Page 81: People Around the World +## ็ฌฌ81้กต๏ผไธ็ๅๅฐ็ไบบ + +### Grammar Structure (่ฏญๆณ็ปๆ) + +**He/She/It** + **lives.** +**ไป/ๅฅน/ๅฎ** + **ไฝใ** + +**Where does** + **he/she/it** + **live?** +**ๅช้** + **ๅ** + **ไป/ๅฅน/ๅฎ** + **ไฝ๏ผ** + +**What does** + **he/she/it** + **do?** +**ไปไน** + **ๅ** + **ไป/ๅฅน/ๅฎ** + **ๅ๏ผ** + +--- + +### Interview Example: Mexico City (้่ฎฟ็คบไพ๏ผๅขจ่ฅฟๅฅๅ) + +**A:** What's his name? +ไปๅซไปไนๅๅญ๏ผ + +**B:** His name is Miguel. +ไป็ๅๅญๆฏ็ฑณๆ ผๅฐใ + +**A:** Where does he live? +ไปไฝๅจๅช้๏ผ + +**B:** He lives in Mexico City. +ไปไฝๅจๅขจ่ฅฟๅฅๅใ + +**A:** What language does he speak? +ไป่ฏดไปไน่ฏญ่จ๏ผ + +**B:** He speaks Spanish. +ไป่ฏด่ฅฟ็ญ็่ฏญใ + +**A:** What does he do every day? +ไปๆฏๅคฉๅไปไน๏ผ + +**B:** He eats Mexican food, +ไปๅๅขจ่ฅฟๅฅ้ฃ็ฉ๏ผ +he reads Mexican newspapers, +ไป่ฏปๅขจ่ฅฟๅฅๆฅ็บธ๏ผ +and he listens to Mexican music. +ไปๅฌๅขจ่ฅฟๅฅ้ณไนใ + +--- + +### Ask and Answer Questions About These People +### ้ฎ็ญๅ ณไบ่ฟไบไบบ็้ฎ้ข + +**Questions (้ฎ้ข):** +- What's his/her name? (ไป/ๅฅนๅซไปไนๅๅญ๏ผ) +- Where does he/she live? (ไป/ๅฅนไฝๅจๅช้๏ผ) +- What language does he/she speak? (ไป/ๅฅน่ฏดไปไน่ฏญ่จ๏ผ) +- What does he/she do every day? (ไป/ๅฅนๆฏๅคฉๅไปไน๏ผ) + +--- + +### People to Ask About (่ฆ้ฎ็ไบบ) + +**1. Kate - Toronto, Canada (ๅฏ็น - ๅคไผฆๅค๏ผๅ ๆฟๅคง)** +- Languages: English, Canadian (่ฏญ่จ๏ผ่ฑ่ฏญ๏ผๅ ๆฟๅคง่ฏญ) + +**2. Carlos - San Juan, Puerto Rico (ๅกๆดๆฏ - ๅฃ่กๅฎ๏ผๆณขๅค้ปๅ)** +- Languages: Spanish, Puerto Rican (่ฏญ่จ๏ผ่ฅฟ็ญ็่ฏญ๏ผๆณขๅค้ปๅ่ฏญ) + +**3. Anna - Athens, Greece (ๅฎๅจ - ้ ๅ ธ๏ผๅธ่ )** +- Language: Greek (่ฏญ่จ๏ผๅธ่ ่ฏญ) + +**4. Ming - Hong Kong, China (ๆ - ้ฆๆธฏ๏ผไธญๅฝ)** +- Language: Chinese (่ฏญ่จ๏ผไธญๆ) + +**5. Sonia - Rio de Janeiro, Brazil (็ดขๅฐผๅจ - ้็บฆ็ญๅ ๅข๏ผๅทด่ฅฟ)** +- Languages: Portuguese, Brazilian (่ฏญ่จ๏ผ่ก่็่ฏญ๏ผๅทด่ฅฟ่ฏญ) + +**6. Omar - Cairo, Egypt (ๅฅฅ้ฉฌๅฐ - ๅผ็ฝ๏ผๅๅ)** +- Languages: Arabic, Egyptian (่ฏญ่จ๏ผ้ฟๆไผฏ่ฏญ๏ผๅๅ่ฏญ) + +--- + +## Page 82: TALK ABOUT IT! - Where Do They Live, and What Do They Do? +## ็ฌฌ82้กต๏ผ่ฐ่ฎบๅฎ๏ผ- ไปไปฌไฝๅจๅช้๏ผไปไปฌๅไปไน๏ผ + +### Grammar Review (่ฏญๆณๅคไน ) + +**I/We/You/They** + **live.** +**ๆ/ๆไปฌ/ไฝ /ไฝ ไปฌ/ไปไปฌ** + **ไฝใ** + +**Where do** + **I/we/you/they** + **live?** +**ๅจๅช้** + **ๆ/ๆไปฌ/ไฝ /ไฝ ไปฌ/ไปไปฌ** + **ไฝ๏ผ** + +**What do** + **I/we/you/they** + **do?** +**ไปไน** + **ๆ/ๆไปฌ/ไฝ /ไฝ ไปฌ/ไปไปฌ** + **ๅ๏ผ** + +**He/She/It** + **lives.** +**ไป/ๅฅน/ๅฎ** + **ไฝใ** + +**Where does** + **he/she/it** + **live?** +**ๅจๅช้** + **ไป/ๅฅน/ๅฎ** + **ไฝ๏ผ** + +**What does** + **he/she/it** + **do?** +**ไปไน** + **ไป/ๅฅน/ๅฎ** + **ๅ๏ผ** + +--- + +### People and Their Activities (ไบบไปฌๅไปไปฌ็ๆดปๅจ) + +**1. Linda - London, England (็ณ่พพ - ไผฆๆฆ๏ผ่ฑๆ ผๅ ฐ)** +- My name is Linda. + ๆ็ๅๅญๆฏ็ณ่พพใ +- I live in London. + ๆไฝๅจไผฆๆฆใ +- I work in a library. + ๆๅจๅพไนฆ้ฆๅทฅไฝใ + +**2. Brian - Boston, USA (ๅธ่ฑๆฉ - ๆณขๅฃซ้กฟ๏ผ็พๅฝ)** +- My name is Brian. + ๆ็ๅๅญๆฏๅธ่ฑๆฉใ +- I live in Boston. + ๆไฝๅจๆณขๅฃซ้กฟใ +- I work in a bank. + ๆๅจ้ถ่กๅทฅไฝใ + +**3. Walter and Wendy - Washington, D.C., USA (ๆฒๅฐ็นๅๆธฉ่ฟช - ๅ็้กฟ็นๅบ๏ผ็พๅฝ)** +- We're Walter and Wendy. + ๆไปฌๆฏๆฒๅฐ็นๅๆธฉ่ฟชใ +- We live in Washington, D.C. + ๆไปฌไฝๅจๅ็้กฟ็นๅบใ +- We work in an office. + ๆไปฌๅจๅๅ ฌๅฎคๅทฅไฝใ + +**4. Bob - Buffalo, USA (้ฒๅ - ๅธๆณ็ฝ๏ผ็พๅฝ)** +- My name is Bob. + ๆ็ๅๅญๆฏ้ฒๅใ +- I live in Buffalo. + ๆไฝๅจๅธๆณ็ฝใ +- I drive a bus. + ๆๅผๅ ฌๅ ฑๆฑฝ่ฝฆใ + +**5. Howard and Henry - Honolulu, Hawaii, USA (้ๅๅพทๅไบจๅฉ - ๆช้ฆๅฑฑ๏ผๅคๅจๅคท๏ผ็พๅฝ)** +- We're Howard and Henry. + ๆไปฌๆฏ้ๅๅพทๅไบจๅฉใ +- We live in Honolulu. + ๆไปฌไฝๅจๆช้ฆๅฑฑใ +- We paint houses. + ๆไปฌ็ฒๅทๆฟๅญใ + +**6. Tina - Tampa, USA (่ๅจ - ๅฆๅธ๏ผ็พๅฝ)** +- My name is Tina. + ๆ็ๅๅญๆฏ่ๅจใ +- I live in Tampa. + ๆไฝๅจๅฆๅธใ +- I drive a taxi. + ๆๅผๅบ็ง่ฝฆใ + +**7. Carol and Ray - Cleveland, USA (ๅก็ฝๅฐๅ้ท - ๅ ๅฉๅคซๅ ฐ๏ผ็พๅฝ)** +- We're Carol and Ray. + ๆไปฌๆฏๅก็ฝๅฐๅ้ทใ +- We live in Cleveland. + ๆไปฌไฝๅจๅ ๅฉๅคซๅ ฐใ +- We cook in a restaurant. + ๆไปฌๅจ้ค้ฆๅ้ฅญใ + +**8. Susan - San Diego, USA (่็ - ๅฃ่ฟญๆ๏ผ็พๅฝ)** +- My name is Susan. + ๆ็ๅๅญๆฏ่็ใ +- I live in San Diego. + ๆไฝๅจๅฃ่ฟญๆใ +- I sell cars. + ๆๅๆฑฝ่ฝฆใ + +**9. Victor - Vancouver, Canada (็ปดๅ ๅค - ๆธฉๅฅๅ๏ผๅ ๆฟๅคง)** +- My name is Victor. + ๆ็ๅๅญๆฏ็ปดๅ ๅคใ +- I live in Vancouver. + ๆไฝๅจๆธฉๅฅๅใ +- I play the violin. + ๆๆๅฐๆ็ดใ + +--- + +### Practice Dialogues (็ปไน ๅฏน่ฏ) + +**Use these models to talk with other students about the people above.** +**ไฝฟ็จ่ฟไบๆจกๅไธๅ ถไปๅญฆ็่ฐ่ฎบไธ้ข็ไบบใ** + +**Model 1 (ๆจกๅ1):** +- **A:** Where does *Linda* live? + *็ณ่พพ*ไฝๅจๅช้๏ผ +- **B:** *She* lives in *London*. + *ๅฅน*ไฝๅจ*ไผฆๆฆ*ใ +- **A:** What does *she* do? + *ๅฅน*ๅไปไน๏ผ +- **B:** *She works in a library*. + *ๅฅนๅจๅพไนฆ้ฆๅทฅไฝ*ใ + +**Model 2 (ๆจกๅ2):** +- **A:** Where do *Walter* and *Wendy* live? + *ๆฒๅฐ็น*ๅ*ๆธฉ่ฟช*ไฝๅจๅช้๏ผ +- **B:** They live in *Washington, D.C*. + ไปไปฌไฝๅจ*ๅ็้กฟ็นๅบ*ใ +- **A:** What do they do? + ไปไปฌๅไปไน๏ผ +- **B:** They *work in an office*. + ไปไปฌ*ๅจๅๅ ฌๅฎคๅทฅไฝ*ใ + +--- + +### How About You? (ไฝ ๅข๏ผ) + +**Questions (้ฎ้ข):** +- Where do you live? + ไฝ ไฝๅจๅช้๏ผ +- What do you do? + ไฝ ๅไปไน๏ผ + +--- + +## Page 83: READING - Mr. and Mrs. DiCarlo +## ็ฌฌ83้กต๏ผ้ ่ฏป - ่ฟชๅกๆดๅ ็ๅๅคซไบบ + +### Story: Mr. and Mrs. DiCarlo +### ๆ ไบ๏ผ่ฟชๅกๆดๅ ็ๅๅคซไบบ + +**Buon giorno!** (Italian greeting - "Good day!") +**ไฝ ๅฅฝ๏ผ**๏ผๆๅคงๅฉ่ฏญ้ฎๅ - "็พๅฅฝ็ไธๅคฉ๏ผ"๏ผ + +Mr. and Mrs. DiCarlo live in an old Italian neighborhood in New York City. They speak a little English, but usually they speak Italian. +่ฟชๅกๆดๅ ็ๅๅคซไบบไฝๅจ็บฝ็บฆๅธ็ไธไธช่ๆๅคงๅฉ็คพๅบใไปไปฌ่ฏดไธ็น่ฑ่ฏญ๏ผไฝ้ๅธธไปไปฌ่ฏดๆๅคงๅฉ่ฏญใ + +They read the Italian newspaper. They listen to Italian radio programs. They shop at the Italian grocery store around the corner from their apartment building. And every day they visit their friends and neighbors and talk about life back in "the old country." +ไปไปฌ่ฏปๆๅคงๅฉๆฅ็บธใไปไปฌๅฌๆๅคงๅฉๅนฟๆญ่็ฎใไปไปฌๅจไปไปฌๅ ฌๅฏๆฅผๆ่งๅค็ๆๅคงๅฉๆ่ดงๅบ่ดญ็ฉใๆฏๅคฉไปไปฌ้ฝๆ่ฎฟไปไปฌ็ๆๅๅ้ปๅฑ ๏ผ่ฐ่ฎบ"่ๅฎถ"็็ๆดปใ + +--- + +**Hi!** +**ๅจ๏ผ** + +Mr. and Mrs. DiCarlo are upset about their son, Joe. He lives in a small suburb outside the city. He speaks a little Italian, but usually he speaks English. He reads American newspapers. He listens to American radio programs. He shops at big suburban supermarkets and shopping malls. And when he visits his friends and neighbors, he always speaks English. +่ฟชๅกๆดๅ ็ๅๅคซไบบๅฏนไปไปฌ็ๅฟๅญไนๆๅฐไธๅฎใไปไฝๅจๅๅค็ไธไธชๅฐ้ๅบใไป่ฏดไธ็นๆๅคงๅฉ่ฏญ๏ผไฝ้ๅธธไป่ฏด่ฑ่ฏญใไป่ฏป็พๅฝๆฅ็บธใไปๅฌ็พๅฝๅนฟๆญ่็ฎใไปๅจๅคงๅ้ๅบ่ถ ๅธๅ่ดญ็ฉไธญๅฟ่ดญ็ฉใๅฝไปๆ่ฎฟไปไปฌ็ๆๅๅ้ปๅฑ ๆถ๏ผไปๆปๆฏ่ฏด่ฑ่ฏญใ + +In fact, Joe speaks Italian only when he calls his parents on the telephone, or when he visits them every weekend. +ไบๅฎไธ๏ผไนๅชๆๅจ็ป็ถๆฏๆ็ต่ฏๆๆฏไธชๅจๆซๆ่ฎฟไปไปฌๆถๆ่ฏดๆๅคงๅฉ่ฏญใ + +Mr. and Mrs. DiCarlo are sad because their son speaks so little Italian. They're afraid he's forgetting his language, his culture, and his country. +่ฟชๅกๆดๅ ็ๅๅคซไบบๅพไผคๅฟ๏ผๅ ไธบไปไปฌ็ๅฟๅญ่ฏดๅพๅฐ็ๆๅคงๅฉ่ฏญใไปไปฌๆ ๅฟไปๅฟ่ฎฐไบไป็่ฏญ่จใไป็ๆๅๅไป็ๅฝๅฎถใ + +--- + +### Key Vocabulary (้็น่ฏๆฑ) + +- neighborhood - ็คพๅบ๏ผ่กๅบ +- old - ่็๏ผๆง็ +- a little - ไธ็น +- usually - ้ๅธธ +- newspaper - ๆฅ็บธ +- radio programs - ๅนฟๆญ่็ฎ +- grocery store - ๆ่ดงๅบ +- around the corner - ๅจๆ่งๅค +- apartment building - ๅ ฌๅฏๆฅผ +- every day - ๆฏๅคฉ +- neighbors - ้ปๅฑ +- talk about - ่ฐ่ฎบ +- life - ็ๆดป +- the old country - ่ๅฎถ๏ผ็ฅๅฝ +- upset - ไธๅฎ็๏ผๅฟ็ฆ็ +- suburb - ้ๅบ +- outside - ๅจโฆโฆๅค้ข +- supermarket - ่ถ ๅธ +- shopping mall - ่ดญ็ฉไธญๅฟ +- always - ๆปๆฏ +- in fact - ไบๅฎไธ +- only - ๅชๆ๏ผไป ไป +- call - ๆ็ต่ฏ +- on the telephone - ๅจ็ต่ฏไธ +- visit - ๆ่ฎฟ +- every weekend - ๆฏไธชๅจๆซ +- sad - ไผคๅฟ็ +- because - ๅ ไธบ +- so little - ่ฟไนๅฐ +- afraid - ๅฎณๆ็๏ผๆ ๅฟ็ +- forgetting - ๅฟ่ฎฐ +- language - ่ฏญ่จ +- culture - ๆๅ +- country - ๅฝๅฎถ + +--- + +## Page 84: READING CHECK-UP +## ็ฌฌ84้กต๏ผ้ ่ฏป็่งฃ + +### What's the Answer? (็ญๆกๆฏไปไน๏ผ) + +1. Where do Mr. and Mrs. DiCarlo live? + ่ฟชๅกๆดๅ ็ๅๅคซไบบไฝๅจๅช้๏ผ + +2. Where does Joe live? + ไนไฝๅจๅช้๏ผ + +3. What language do Mr. and Mrs. DiCarlo usually speak? + ่ฟชๅกๆดๅ ็ๅๅคซไบบ้ๅธธ่ฏดไปไน่ฏญ่จ๏ผ + +4. What language does Joe usually speak? + ไน้ๅธธ่ฏดไปไน่ฏญ่จ๏ผ + +5. What do Mr. and Mrs. DiCarlo read? + ่ฟชๅกๆดๅ ็ๅๅคซไบบ่ฏปไปไน๏ผ + +6. What does Joe read? + ไน่ฏปไปไน๏ผ + +7. What do Mr. and Mrs. DiCarlo listen to? + ่ฟชๅกๆดๅ ็ๅๅคซไบบๅฌไปไน๏ผ + +8. What does Joe listen to? + ไนๅฌไปไน๏ผ + +9. Where do Mr. and Mrs. DiCarlo shop? + ่ฟชๅกๆดๅ ็ๅๅคซไบบๅจๅช้่ดญ็ฉ๏ผ + +10. Where does Joe shop? + ไนๅจๅช้่ดญ็ฉ๏ผ + +--- + +### Which Word Is Correct? (ๅชไธช่ฏๆฏๆญฃ็กฎ็๏ผ) + +1. Mrs. DiCarlo ( read / **reads** ) the Italian newspaper. + ่ฟชๅกๆดๅคซไบบ๏ผ่ฏป / **่ฏป**๏ผๆๅคงๅฉๆฅ็บธใ + +2. Mr. DiCarlo ( shop / **shops** ) at the Italian grocery store. + ่ฟชๅกๆดๅ ็๏ผ่ดญ็ฉ / **่ดญ็ฉ**๏ผๅจๆๅคงๅฉๆ่ดงๅบใ + +3. They ( live / **lives** ) in New York City. + ไปไปฌ๏ผไฝ / **ไฝ**๏ผๅจ็บฝ็บฆๅธใ + +4. Joe ( live / **lives** ) outside the city. + ไน๏ผไฝ / **ไฝ**๏ผๅจๅๅคใ + +5. He ( speak / **speaks** ) English. + ไป๏ผ่ฏด / **่ฏด**๏ผ่ฑ่ฏญใ + +6. Mr. and Mrs. DiCarlo ( listen / **listens** ) to the radio. + ่ฟชๅกๆดๅ ็ๅๅคซไบบ๏ผๅฌ / **ๅฌ**๏ผๆถ้ณๆบใ + +7. They ( visit / **visits** ) their friends every day. + ไปไปฌ๏ผๆ่ฎฟ / **ๆ่ฎฟ**๏ผไปไปฌ็ๆๅๆฏๅคฉใ + +8. Their friends ( talk / **talks** ) about life back in "the old country." + ไปไปฌ็ๆๅ๏ผ่ฐ่ฎบ / **่ฐ่ฎบ**๏ผๅ ณไบ"่ๅฎถ"็็ๆดปใ + +9. Joe ( call / **calls** ) his parents on the telephone. + ไน๏ผๆ็ต่ฏ / **ๆ็ต่ฏ**๏ผ็ปไป็็ถๆฏใ + +10. Joe's friends ( speak / **speaks** ) English. + ไน็ๆๅ๏ผ่ฏด / **่ฏด**๏ผ่ฑ่ฏญใ + +--- + +## LISTENING +## ๅฌๅ + +### Listen and choose the correct answer. +### ๅฌๅนถ้ๆฉๆญฃ็กฎ็ญๆกใ + +1. a. live **b. lives** +2. a. work **b. works** +3. a. speak **b. speaks** +4. a. drive **b. drives** +5. a. read **b. reads** +6. a. visit **b. visits** +7. a. cook **b. cooks** +8. a. paint **b. paints** +9. a. call **b. calls** +10. a. shop **b. shops** + +--- + +## How to Say It! - Hesitating +## ๆไน่ฏด๏ผ- ็น่ฑซ + +### Hesitating (็น่ฑซ) + +**A:** What do you do every day? +ไฝ ๆฏๅคฉๅไปไน๏ผ + +**B:** Hmm. Well... +ๅฏใๅฏโฆโฆ +I *work*, I *read the newspaper*, and I *visit my friends*. +ๆ*ๅทฅไฝ*๏ผๆ*่ฏปๆฅ็บธ*๏ผๆ*ๆ่ฎฟๆ็ๆๅ*ใ + +**Practice conversations with other students. Hesitate while you're thinking of your answer.** +**ไธๅ ถไปๅญฆ็็ปไน ๅฏน่ฏใๅจๆ่็ญๆกๆถ็น่ฑซใ** + +--- + +## Page 85: YOUR OWN WORDS +## ็ฌฌ85้กต๏ผไฝ ่ชๅทฑ็่ฏ + +### MRS. KOWALSKI +### ็ง็ฆๅฐๆฏๅบๅคซไบบ + +Mrs. Kowalski lives in an old Polish neighborhood in Chicago. She's upset about her son, Michael, and his wife, Kathy. Using the story on page 83 as a model, tell a story about Mrs. Kowalski. +็ง็ฆๅฐๆฏๅบๅคซไบบไฝๅจ่ๅ ๅฅ็ไธไธช่ๆณขๅ ฐ็คพๅบใๅฅนๅฏนๅฅน็ๅฟๅญ่ฟๅ ๅฐๅไป็ๅฆปๅญๅฏ่ฅฟๆๅฐไธๅฎใไฝฟ็จ็ฌฌ83้กต็ๆ ไบไฝไธบๆจกๅ๏ผ่ฎฒไธไธชๅ ณไบ็ง็ฆๅฐๆฏๅบๅคซไบบ็ๆ ไบใ + +--- + +## INTERVIEW +## ้่ฎฟ + +**Interview Questions (้่ฎฟ้ฎ้ข):** +- Where do you live? + ไฝ ไฝๅจๅช้๏ผ +- What language do you speak? + ไฝ ่ฏดไปไน่ฏญ่จ๏ผ +- What do you do every day? + ไฝ ๆฏๅคฉๅไปไน๏ผ + +--- + +### Interview Activity (้่ฎฟๆดปๅจ) + +**Interview another student.** +**้่ฎฟๅฆไธไธชๅญฆ็ใ** + +**Example (ไพๅญ):** +- I live in an apartment in the city. + ๆไฝๅจๅๅธ็ๅ ฌๅฏ้ใ +- I speak Spanish and a little English. + ๆ่ฏด่ฅฟ็ญ็่ฏญๅไธ็น่ฑ่ฏญใ +- I go to school and visit my friends. + ๆๅปไธๅญฆๅๆ่ฎฟๆ็ๆๅใ + +**Then tell the class about that person.** +**็ถๅๅ่ฏๅ จ็ญๅ ณไบ้ฃไธชไบบใ** + +**Example (ไพๅญ):** +- She lives in an apartment in the city. + ๅฅนไฝๅจๅๅธ็ๅ ฌๅฏ้ใ +- She speaks Spanish and a little English. + ๅฅน่ฏด่ฅฟ็ญ็่ฏญๅไธ็น่ฑ่ฏญใ +- She goes to school and visits her friends. + ๅฅนๅปไธๅญฆๅๆ่ฎฟๅฅน็ๆๅใ + +--- + +## Page 86: PRONUNCIATION - Blending with does +## ็ฌฌ86้กต๏ผๅ้ณ - ไธdoesๆทท่ฏป + +### Listen. Then say it. (ๅฌใ็ถๅ่ฏดใ) + +1. Where does *he* work? + ไปๅจๅช้ๅทฅไฝ๏ผ + +2. Where does *she* live? + ๅฅนไฝๅจๅช้๏ผ + +3. What does *he* do? + ไปๅไปไน๏ผ + +4. What does *she* read? + ๅฅน่ฏปไปไน๏ผ + +--- + +### Say it. Then listen. (่ฏดใ็ถๅๅฌใ) + +1. Where does *he* shop? + ไปๅจๅช้่ดญ็ฉ๏ผ + +2. Where does *she* eat? + ๅฅนๅจๅช้ๅ้ฅญ๏ผ + +3. What does *he* cook? + ไปๅไปไน้ฅญ๏ผ + +4. What does *she* talk about? + ๅฅน่ฐ่ฎบไปไน๏ผ + +--- + +### SIDE by SIDE JOURNAL +### ๅนถ่ฉๆฅ่ฎฐ + +**Writing Activity (ๅไฝๆดปๅจ):** + +Where do you live? What language do you speak? What do you do every day? Write a paragraph about it in your journal. +ไฝ ไฝๅจๅช้๏ผไฝ ่ฏดไปไน่ฏญ่จ๏ผไฝ ๆฏๅคฉๅไปไน๏ผๅจไฝ ็ๆฅ่ฎฐ้ๅไธๆฎตๅ ณไบๅฎ็่ฏใ + +--- + +## CHAPTER SUMMARY +## ็ซ ่ๆป็ป + +### GRAMMAR ่ฏญๆณ + +**SIMPLE PRESENT TENSE ไธ่ฌ็ฐๅจๆถ** + +**Affirmative (่ฏๅฎๅฅ):** + +| | I/we/you/they | He/She/It | +|---------|---------------|-----------| +| Where | do | does | +| | we/you/they | he/she/it | +| | live? | lives? | + +**Examples (ไพๅญ):** +- I live in Rome. + ๆไฝๅจ็ฝ้ฉฌใ +- We live in Rome. + ๆไปฌไฝๅจ็ฝ้ฉฌใ +- You live in Rome. + ไฝ ไฝๅจ็ฝ้ฉฌใ +- They live in Rome. + ไปไปฌไฝๅจ็ฝ้ฉฌใ +- He lives in Rome. + ไปไฝๅจ็ฝ้ฉฌใ +- She lives in Rome. + ๅฅนไฝๅจ็ฝ้ฉฌใ +- It lives in Rome. + ๅฎไฝๅจ็ฝ้ฉฌใ + +--- + +### KEY VOCABULARY ๅ ณ้ฎ่ฏๆฑ + +**EVERYDAY ACTIVITIES ๆฅๅธธๆดปๅจ** +- call - ๆ็ต่ฏ +- cook - ๅ้ฅญ +- drive - ๅผ่ฝฆ +- eat - ๅ +- listen - ๅฌ +- paint - ๆฒนๆผ๏ผ็ป็ป +- play - ็ฉ๏ผๆผๅฅ +- read - ้ ่ฏป +- sell - ๅ +- shop - ่ดญ็ฉ +- sing - ๅฑๆญ +- speak - ่ฏด +- visit - ๆ่ฎฟ +- watch TV - ็็ต่ง +- work - ๅทฅไฝ + +--- + +**NATIONALITIES ๅฝ็ฑ** + +**Column 1:** +- Brazilian - ๅทด่ฅฟ็ +- Canadian - ๅ ๆฟๅคง็ +- Chinese - ไธญๅฝ็ +- Egyptian - ๅๅ็ +- French - ๆณๅฝ็ +- German - ๅพทๅฝ็ +- Greek - ๅธ่ ็ +- Italian - ๆๅคงๅฉ็ + +**Column 2:** +- Japanese - ๆฅๆฌ็ +- Korean - ้ฉๅฝ็ +- Mexican - ๅขจ่ฅฟๅฅ็ +- Polish - ๆณขๅ ฐ็ +- Puerto Rican - ๆณขๅค้ปๅ็ +- Russian - ไฟ็ฝๆฏ็ +- Spanish - ่ฅฟ็ญ็็ + +--- + +**LANGUAGES ่ฏญ่จ** + +**Column 1:** +- Portuguese - ่ก่็่ฏญ +- English, French - ่ฑ่ฏญ๏ผๆณ่ฏญ +- Chinese - ไธญๆ +- Arabic - ้ฟๆไผฏ่ฏญ +- French - ๆณ่ฏญ +- German - ๅพท่ฏญ +- Greek - ๅธ่ ่ฏญ +- Italian - ๆๅคงๅฉ่ฏญ + +**Column 2:** +- Japanese - ๆฅ่ฏญ +- Korean - ้ฉ่ฏญ +- Spanish - ่ฅฟ็ญ็่ฏญ +- Polish - ๆณขๅ ฐ่ฏญ +- Spanish - ่ฅฟ็ญ็่ฏญ +- Russian - ไฟ่ฏญ +- Spanish - ่ฅฟ็ญ็่ฏญ + +--- + +## Additional Notes (่กฅๅ ่ฏดๆ) + +### Important Grammar Points (้่ฆ่ฏญๆณ็น) + +**1. Simple Present Tense - Third Person Singular (ไธ่ฌ็ฐๅจๆถ - ็ฌฌไธไบบ็งฐๅๆฐ)** +- Add **-s** to most verbs: work โ work**s**, live โ live**s** + ๅคงๅคๆฐๅจ่ฏๅ **-s**๏ผๅทฅไฝ โ ๅทฅไฝ**s**๏ผไฝ โ ไฝ**s** + +- Add **-es** to verbs ending in -s, -sh, -ch, -x, -o: watch โ watch**es** + ไปฅ-s, -sh, -ch, -x, -o็ปๅฐพ็ๅจ่ฏๅ **-es**๏ผ็ โ ็**es** + +**2. Question Formation (็้ฎๅฅๆๆ)** +- Use **do** with I/we/you/they: Where **do** you live? + ไธI/we/you/theyไฝฟ็จ**do**๏ผไฝ ไฝๅจ**ๅช้**๏ผ + +- Use **does** with he/she/it: Where **does** he live? + ไธhe/she/itไฝฟ็จ**does**๏ผไปไฝๅจ**ๅช้**๏ผ + +**3. Common Phrases (ๅธธ็จ็ญ่ฏญ)** +- every day - ๆฏๅคฉ +- every weekend - ๆฏไธชๅจๆซ +- in fact - ไบๅฎไธ +- usually - ้ๅธธ +- always - ๆปๆฏ +- a little - ไธ็น + +--- + +## Cultural Notes (ๆๅๆณจ้) + +### Immigration and Language (็งปๆฐๅ่ฏญ่จ) + +The story of the DiCarlo family represents a common experience for immigrant families. First-generation immigrants often maintain strong connections to their homeland through language, food, and cultural practices. Second-generation children often adopt the language and culture of their new country while maintaining some connections to their parents' heritage. +่ฟชๅกๆดๅฎถๆ็ๆ ไบไปฃ่กจไบ็งปๆฐๅฎถๅบญ็ๅ ฑๅ็ปๅใ็ฌฌไธไปฃ็งปๆฐ้ๅธธ้่ฟ่ฏญ่จใ้ฃ็ฉๅๆๅๅฎ่ทตไธ็ฅๅฝไฟๆ็ดงๅฏ่็ณปใ็ฌฌไบไปฃๅญฉๅญ้ๅธธ้็จๆฐๅฝๅฎถ็่ฏญ่จๅๆๅ๏ผๅๆถไฟๆไธ็ถๆฏ้ไบง็ไธไบ่็ณปใ + +This creates both opportunities and challenges: +่ฟๆขๅ้ ไบๆบไผ๏ผไนๅธฆๆฅไบๆๆ๏ผ +- Opportunities: Bilingualism, cultural awareness + ๆบไผ๏ผๅ่ฏญ่ฝๅ๏ผๆๅๆ่ฏ +- Challenges: Generation gaps, cultural identity + ๆๆ๏ผไปฃๆฒ๏ผๆๅ่ฎคๅ + +--- + +## Practice Tips (็ปไน ๆๅทง) + +1. **Practice verb conjugations daily (ๆฏๅคฉ็ปไน ๅจ่ฏๅไฝ)** + - I speak, you speak, he/she speaks + ๆ่ฏด๏ผไฝ ่ฏด๏ผไป/ๅฅน่ฏด + +2. **Use real-life contexts (ไฝฟ็จ็ๅฎ็ๆดปๅบๆฏ)** + - Talk about your daily routine + ่ฐ่ฎบไฝ ็ๆฅๅธธ็ๆดป + +3. **Interview classmates (้่ฎฟๅๅญฆ)** + - Practice question formation + ็ปไน ็้ฎๅฅๆๆ + +4. **Read about different cultures (้ ่ฏปไธๅๆๅ)** + - Learn about languages and nationalities + ไบ่งฃ่ฏญ่จๅๅฝ็ฑ \ No newline at end of file diff --git a/content/chapters/sbs-8.json b/content/chapters/sbs-8.json new file mode 100644 index 0000000..7dbf231 --- /dev/null +++ b/content/chapters/sbs-8.json @@ -0,0 +1,782 @@ +{ + "id": "sbs-8", + "book_id": "sbs", + "name": "Clothing & Colors", + "description": "Side by Side Level 1 - Chapter 8: Clothing items, colors, shopping, singular/plural, this/that/these/those", + "difficulty": "beginner", + "language": "en-US", + "chapter_number": "8", + "metadata": { + "version": "1.0", + "created": "2025-10-18", + "updated": "2025-10-18", + "source": "Side by Side English Learning Series", + "target_level": "beginner", + "estimated_hours": 12, + "prerequisites": ["sbs-1", "sbs-2"], + "learning_objectives": [ + "Master clothing and accessories vocabulary", + "Learn color vocabulary", + "Practice singular and plural forms", + "Use this/that and these/those correctly", + "Practice shopping dialogues", + "Learn to compliment and respond" + ], + "content_tags": ["vocabulary", "clothing", "colors", "shopping", "plurals", "demonstratives"], + "completion_criteria": { + "vocabulary_mastery": 80, + "quiz_score": 75, + "games_completed": 3 + } + }, + "vocabulary": { + "shirt": { "user_language": "่กฌ่กซ", "type": "noun", "pronunciation": "/สษหrt/" }, + "coat": { "user_language": "ๅคๅฅ๏ผๅคง่กฃ", "type": "noun", "pronunciation": "/koสt/" }, + "dress": { "user_language": "่ฟ่กฃ่ฃ", "type": "noun", "pronunciation": "/dres/" }, + "skirt": { "user_language": "่ฃๅญ", "type": "noun", "pronunciation": "/skษหrt/" }, + "blouse": { "user_language": "ๅฅณๅผ่กฌ่กซ", "type": "noun", "pronunciation": "/blaสs/" }, + "jacket": { "user_language": "ๅคนๅ ๏ผ็ญไธ่กฃ", "type": "noun", "pronunciation": "/หdสรฆkษชt/" }, + "suit": { "user_language": "่ฅฟ่ฃ ๏ผๅฅ่ฃ ", "type": "noun", "pronunciation": "/suหt/" }, + "tie": { "user_language": "้ขๅธฆ", "type": "noun", "pronunciation": "/taษช/" }, + "belt": { "user_language": "็ฎๅธฆ๏ผ่ ฐๅธฆ", "type": "noun", "pronunciation": "/belt/" }, + "sweater": { "user_language": "ๆฏ่กฃ๏ผ้็ป่กซ", "type": "noun", "pronunciation": "/หswetษr/" }, + "pants": { "user_language": "่ฃคๅญ", "type": "noun", "pronunciation": "/pรฆnts/" }, + "jeans": { "user_language": "็ไป่ฃค", "type": "noun", "pronunciation": "/dสiหnz/" }, + "pajamas": { "user_language": "็ก่กฃ", "type": "noun", "pronunciation": "/pษหdสษหmษz/" }, + "shoes": { "user_language": "้ๅญ", "type": "noun", "pronunciation": "/สuหz/" }, + "socks": { "user_language": "่ขๅญ", "type": "noun", "pronunciation": "/sษหks/" }, + "boots": { "user_language": "้ดๅญ", "type": "noun", "pronunciation": "/buหts/" }, + "hat": { "user_language": "ๅธฝๅญ", "type": "noun", "pronunciation": "/hรฆt/" }, + "glove": { "user_language": "ๆๅฅ", "type": "noun", "pronunciation": "/ษกlสv/" }, + "umbrella": { "user_language": "้จไผ", "type": "noun", "pronunciation": "/สmหbrelษ/" }, + "watch": { "user_language": "ๆ่กจ", "type": "noun", "pronunciation": "/wษหtส/" }, + "earring": { "user_language": "่ณ็ฏ", "type": "noun", "pronunciation": "/หษชrษชล/" }, + "necklace": { "user_language": "้กน้พ", "type": "noun", "pronunciation": "/หneklษs/" }, + "bracelet": { "user_language": "ๆ้ฏ", "type": "noun", "pronunciation": "/หbreษชslษt/" }, + "briefcase": { "user_language": "ๅ ฌๆๅ ", "type": "noun", "pronunciation": "/หbriหfkeษชs/" }, + "stocking": { "user_language": "้ฟ็ญ่ข", "type": "noun", "pronunciation": "/หstษหkษชล/" }, + "purse": { "user_language": "ๆๆๅ ", "type": "noun", "pronunciation": "/pษหrs/" }, + "pocketbook": { "user_language": "้ฑๅ ", "type": "noun", "pronunciation": "/หpษหkษชtbสk/" }, + "glasses": { "user_language": "็ผ้", "type": "noun", "pronunciation": "/หษกlรฆsษชz/" }, + "sunglasses": { "user_language": "ๅคช้ณ้", "type": "noun", "pronunciation": "/หsสnษกlรฆsษชz/" }, + "raincoat": { "user_language": "้จ่กฃ", "type": "noun", "pronunciation": "/หreษชnkoสt/" }, + "mittens": { "user_language": "่ฟๆๆๅฅ", "type": "noun", "pronunciation": "/หmษชtษnz/" }, + "sports jacket": { "user_language": "่ฟๅจๅคนๅ ", "type": "noun", "pronunciation": "/spษหrts หdสรฆkษชt/" }, + "red": { "user_language": "็บข่ฒ", "type": "adjective", "pronunciation": "/red/" }, + "orange": { "user_language": "ๆฉ่ฒ", "type": "adjective", "pronunciation": "/หษหrษชndส/" }, + "yellow": { "user_language": "้ป่ฒ", "type": "adjective", "pronunciation": "/หjeloส/" }, + "green": { "user_language": "็ปฟ่ฒ", "type": "adjective", "pronunciation": "/ษกriหn/" }, + "blue": { "user_language": "่่ฒ", "type": "adjective", "pronunciation": "/bluห/" }, + "purple": { "user_language": "็ดซ่ฒ", "type": "adjective", "pronunciation": "/หpษหrpษl/" }, + "black": { "user_language": "้ป่ฒ", "type": "adjective", "pronunciation": "/blรฆk/" }, + "pink": { "user_language": "็ฒ่ฒ", "type": "adjective", "pronunciation": "/pษชลk/" }, + "gray": { "user_language": "็ฐ่ฒ", "type": "adjective", "pronunciation": "/ษกreษช/" }, + "white": { "user_language": "็ฝ่ฒ", "type": "adjective", "pronunciation": "/waษชt/" }, + "gold": { "user_language": "้่ฒ", "type": "adjective", "pronunciation": "/ษกoสld/" }, + "brown": { "user_language": "ๆฃ่ฒ", "type": "adjective", "pronunciation": "/braสn/" }, + "silver": { "user_language": "้ถ่ฒ", "type": "adjective", "pronunciation": "/หsษชlvษr/" }, + "clean": { "user_language": "ๅนฒๅ็", "type": "adjective", "pronunciation": "/kliหn/" }, + "dirty": { "user_language": "่็", "type": "adjective", "pronunciation": "/หdษหrti/" }, + "upset": { "user_language": "็ฆๆผ็๏ผไธๅฎ็", "type": "adjective", "pronunciation": "/สpหset/" }, + "closet": { "user_language": "่กฃๆ๏ผๅฃๆฉฑ", "type": "noun", "pronunciation": "/หklษหzษt/" }, + "dry cleaner's": { "user_language": "ๅนฒๆดๅบ", "type": "noun", "pronunciation": "/draษช หkliหnษrz/" }, + "ripped": { "user_language": "็ ด็๏ผๆ่ฃ็", "type": "adjective", "pronunciation": "/rษชpt/" }, + "clothesline": { "user_language": "ๆพ่กฃ็ปณ", "type": "noun", "pronunciation": "/หkloสรฐzlaษชn/" }, + "raining": { "user_language": "ไธ้จ", "type": "verb", "pronunciation": "/หreษชnษชล/" }, + "difficult": { "user_language": "ๅฐ้พ็", "type": "adjective", "pronunciation": "/หdษชfษชkษlt/" }, + "getting dressed": { "user_language": "็ฉฟ่กฃๆ", "type": "verb phrase", "pronunciation": "/หษกetษชล drest/" }, + "empty": { "user_language": "็ฉบ็", "type": "adjective", "pronunciation": "/หempti/" }, + "striped": { "user_language": "ๆๆก็บน็", "type": "adjective", "pronunciation": "/straษชpt/" }, + "polka dot": { "user_language": "ๅ็น่ฑ็บน็", "type": "adjective", "pronunciation": "/หpoสlkษ dษหt/" }, + "popular": { "user_language": "ๆต่ก็", "type": "adjective", "pronunciation": "/หpษหpjษlษr/" }, + "inexpensive": { "user_language": "ไพฟๅฎ็", "type": "adjective", "pronunciation": "/หษชnษชkหspensษชv/" }, + "expensive": { "user_language": "ๆ่ดต็", "type": "adjective", "pronunciation": "/ษชkหspensษชv/" }, + "cotton": { "user_language": "ๆฃ็", "type": "adjective", "pronunciation": "/หkษหtษn/" }, + "wool": { "user_language": "็พๆฏ็", "type": "adjective", "pronunciation": "/wสl/" }, + "leather": { "user_language": "็ฎ้ฉ็", "type": "adjective", "pronunciation": "/หleรฐษr/" }, + "vinyl": { "user_language": "ไบบ้ ้ฉ็", "type": "adjective", "pronunciation": "/หvaษชnษl/" }, + "frustrated": { "user_language": "ๆฒฎไธง็", "type": "adjective", "pronunciation": "/หfrสstreษชtษชd/" }, + "special": { "user_language": "็นๅซ็", "type": "adjective", "pronunciation": "/หspeสษl/" }, + "gifts": { "user_language": "็คผ็ฉ", "type": "noun", "pronunciation": "/ษกษชfts/" }, + "trouble": { "user_language": "้บป็ฆ", "type": "noun", "pronunciation": "/หtrสbษl/" }, + "holiday shopping": { "user_language": "่ๆฅ่ดญ็ฉ", "type": "noun phrase", "pronunciation": "/หhษหlษdeษช หสษหpษชล/" }, + "pair": { "user_language": "ไธๅ๏ผไธๅฏ", "type": "noun", "pronunciation": "/per/" } + }, + "phrases": { + "Excuse me. I'm looking for a shirt": { "user_language": "ๆๆฐไธไธใๆๅจๆพไธไปถ่กฌ่กซใ", "context": "shopping", "pronunciation": "/ษชkหskjuหz miห aษชm หlสkษชล fษหr ษ สษหrt/" }, + "Shirts are over there": { "user_language": "่กฌ่กซๅจ้ฃ่พนใ", "context": "shopping-response", "pronunciation": "/สษหrts ษหr หoสvษr รฐer/" }, + "May I help you?": { "user_language": "ๆ่ฝๅธฎๆจๅ๏ผ", "context": "customer-service", "pronunciation": "/meษช aษช help juห/" }, + "Yes, please": { "user_language": "ๆฏ็๏ผ้บป็ฆไบ", "context": "polite-response", "pronunciation": "/jes pliหz/" }, + "Here's a nice jacket": { "user_language": "่ฟ้ๆไธไปถไธ้็ๅคนๅ ใ", "context": "offering", "pronunciation": "/hษชrz ษ naษชs หdสรฆkษชt/" }, + "But this is a purple jacket!": { "user_language": "ไฝ่ฟๆฏไธไปถ็ดซ่ฒ็ๅคนๅ ๏ผ", "context": "objection", "pronunciation": "/bสt รฐษชs ษชz ษ หpษหrpษl หdสรฆkษชt/" }, + "That's okay": { "user_language": "ๆฒกๅ ณ็ณป", "context": "reassurance", "pronunciation": "/รฐรฆts oสหkeษช/" }, + "Purple jackets are very popular this year": { "user_language": "็ดซ่ฒๅคนๅ ไปๅนดๅพๆต่กใ", "context": "sales-pitch", "pronunciation": "/หpษหrpษl หdสรฆkษชts ษหr หveri หpษหpjษlษr รฐษชs jษชr/" }, + "I'm looking for a pair of gloves": { "user_language": "ๆๅจๆพไธๅฏๆๅฅใ", "context": "shopping", "pronunciation": "/aษชm หlสkษชล fษหr ษ per ษv ษกlสvz/" }, + "I think that's my jacket": { "user_language": "ๆ่งๅพ้ฃๆฏๆ็ๅคนๅ ใ", "context": "claiming-item", "pronunciation": "/aษช ฮธษชลk รฐรฆts maษช หdสรฆkษชt/" }, + "I don't think so": { "user_language": "ๆไธ่ฟไน่ฎคไธบ", "context": "disagreeing", "pronunciation": "/aษช doสnt ฮธษชลk soส/" }, + "You're right": { "user_language": "ไฝ ่ฏดๅพๅฏน", "context": "agreeing", "pronunciation": "/jสr raษชt/" }, + "I guess I made a mistake": { "user_language": "ๆๆณๆๆ้ไบ", "context": "apologizing", "pronunciation": "/aษช ษกes aษช meษชd ษ mษชหsteษชk/" }, + "Is this your umbrella?": { "user_language": "่ฟๆฏไฝ ็้จไผๅ๏ผ", "context": "lost-and-found", "pronunciation": "/ษชz รฐษชs jสr สmหbrelษ/" }, + "Are you sure?": { "user_language": "ไฝ ็กฎๅฎๅ๏ผ", "context": "confirming", "pronunciation": "/ษหr juห สสr/" }, + "That's a very nice hat!": { "user_language": "้ฃ้กถๅธฝๅญ็ๅฅฝ็๏ผ", "context": "compliment", "pronunciation": "/รฐรฆts ษ หveri naษชs hรฆt/" }, + "Thank you": { "user_language": "่ฐข่ฐข", "context": "responding-compliment", "pronunciation": "/ฮธรฆลk juห/" } + }, + "dialogs": { + "shopping_singular": { + "title": "Shirts Are Over There", + "participants": ["Customer", "Employee"], + "lines": [ + { "speaker": "Customer", "text": "Excuse me. I'm looking for a shirt.", "user_language": "ๆๆฐไธไธใๆๅจๆพไธไปถ่กฌ่กซใ" }, + { "speaker": "Employee", "text": "Shirts are over there.", "user_language": "่กฌ่กซๅจ้ฃ่พนใ" }, + { "speaker": "Customer", "text": "Thanks.", "user_language": "่ฐข่ฐขใ" } + ] + }, + "shopping_color": { + "title": "Shopping for a Jacket", + "participants": ["Customer", "Salesperson"], + "lines": [ + { "speaker": "Salesperson", "text": "May I help you?", "user_language": "ๆ่ฝๅธฎๆจๅ๏ผ" }, + { "speaker": "Customer", "text": "Yes, please. I'm looking for a jacket.", "user_language": "ๆฏ็๏ผ้บป็ฆไบใๆๅจๆพไธไปถๅคนๅ ใ" }, + { "speaker": "Salesperson", "text": "Here's a nice jacket.", "user_language": "่ฟ้ๆไธไปถไธ้็ๅคนๅ ใ" }, + { "speaker": "Customer", "text": "But this is a PURPLE jacket!", "user_language": "ไฝ่ฟๆฏไธไปถ็ดซ่ฒ็ๅคนๅ ๏ผ" }, + { "speaker": "Salesperson", "text": "That's okay. Purple jackets are very POPULAR this year.", "user_language": "ๆฒกๅ ณ็ณปใ็ดซ่ฒๅคนๅ ไปๅนดๅพๆต่กใ" } + ] + }, + "shopping_pair": { + "title": "Shopping for Gloves", + "participants": ["Customer", "Salesperson"], + "lines": [ + { "speaker": "Salesperson", "text": "Can I help you?", "user_language": "ๆ่ฝๅธฎๆจๅ๏ผ" }, + { "speaker": "Customer", "text": "Yes, please. I'm looking for a pair of gloves.", "user_language": "ๆฏ็๏ผ้บป็ฆไบใๆๅจๆพไธๅฏๆๅฅใ" }, + { "speaker": "Salesperson", "text": "Here's a nice pair of gloves.", "user_language": "่ฟ้ๆไธๅฏไธ้็ๆๅฅใ" }, + { "speaker": "Customer", "text": "But these are GREEN gloves!", "user_language": "ไฝ่ฟไบๆฏ็ปฟ่ฒ็ๆๅฅ๏ผ" }, + { "speaker": "Salesperson", "text": "That's okay. Green gloves are very POPULAR this year.", "user_language": "ๆฒกๅ ณ็ณปใ็ปฟ่ฒๆๅฅไปๅนดๅพๆต่กใ" } + ] + }, + "lost_and_found_singular": { + "title": "Lost and Found - Umbrella", + "participants": ["Person A", "Person B"], + "lines": [ + { "speaker": "Person A", "text": "Is this your umbrella?", "user_language": "่ฟๆฏไฝ ็้จไผๅ๏ผ" }, + { "speaker": "Person B", "text": "No, it isn't.", "user_language": "ไธ๏ผไธๆฏใ" }, + { "speaker": "Person A", "text": "Are you sure?", "user_language": "ไฝ ็กฎๅฎๅ๏ผ" }, + { "speaker": "Person B", "text": "Yes. THAT umbrella is BROWN, and MY umbrella is BLACK.", "user_language": "ๆฏ็ใ้ฃๆ้จไผๆฏๆฃ่ฒ็๏ผ่ๆ็้จไผๆฏ้ป่ฒ็ใ" } + ] + }, + "lost_and_found_plural": { + "title": "Lost and Found - Boots", + "participants": ["Person A", "Person B"], + "lines": [ + { "speaker": "Person A", "text": "Are these your boots?", "user_language": "่ฟไบๆฏไฝ ็้ดๅญๅ๏ผ" }, + { "speaker": "Person B", "text": "No, they aren't.", "user_language": "ไธ๏ผไธๆฏใ" }, + { "speaker": "Person A", "text": "Are you sure?", "user_language": "ไฝ ็กฎๅฎๅ๏ผ" }, + { "speaker": "Person B", "text": "Yes. THOSE boots are DIRTY, and MY boots are CLEAN.", "user_language": "ๆฏ็ใ้ฃไบ้ดๅญๆฏ่็๏ผ่ๆ็้ดๅญๆฏๅนฒๅ็ใ" } + ] + }, + "mistake": { + "title": "I Think That's My Jacket", + "participants": ["Person A", "Person B"], + "lines": [ + { "speaker": "Person A", "text": "Excuse me. I think that's my jacket.", "user_language": "ๆๆฐไธไธใๆ่งๅพ้ฃๆฏๆ็ๅคนๅ ใ" }, + { "speaker": "Person B", "text": "Hmm. I don't think so. I think this is MY jacket.", "user_language": "ๅฏใๆไธ่ฟไน่ฎคไธบใๆ่งๅพ่ฟๆฏๆ็ๅคนๅ ใ" }, + { "speaker": "Person A", "text": "Oh. You're right. I guess I made a mistake.", "user_language": "ๅฆใไฝ ่ฏดๅพๅฏนใๆๆณๆๆ้ไบใ" } + ] + }, + "compliment": { + "title": "Complimenting", + "participants": ["Person A", "Person B"], + "lines": [ + { "speaker": "Person A", "text": "That's a very nice hat!", "user_language": "้ฃ้กถๅธฝๅญ็ๅฅฝ็๏ผ" }, + { "speaker": "Person B", "text": "Thank you.", "user_language": "่ฐข่ฐขใ" } + ] + } + }, + "texts": [ + { + "title": "Nothing to Wear", + "original_language": "Fred is upset this morning. He's looking for something to wear to work, but there's nothing in his closet.\n\nHe's looking for a clean shirt, but all his shirts are dirty. He's looking for a sports jacket, but all his sports jackets are at the dry cleaner's. He's looking for a pair of pants, but all the pants in his closet are ripped. And he's looking for a pair of socks, but all his socks are on the clothesline. It's raining!\n\nFred is having a difficult time this morning. He's getting dressed for work, but his closet is empty, and there's nothing to wear.", + "user_language": "ๅผ้ทๅพทไปๅคฉๆฉไธๅพ็ฆๆผใไปๅจๆพ่กฃๆๅปไธ็ญ๏ผไฝไป็่กฃๆ้ไปไน้ฝๆฒกๆใ\n\nไปๅจๆพไธไปถๅนฒๅ็่กฌ่กซ๏ผไฝไปๆๆ็่กฌ่กซ้ฝ่ไบใไปๅจๆพไธไปถ่ฟๅจๅคนๅ ๏ผไฝไปๆๆ็่ฟๅจๅคนๅ ้ฝๅจๅนฒๆดๅบใไปๅจๆพไธๆก่ฃคๅญ๏ผไฝไป่กฃๆ้ๆๆ็่ฃคๅญ้ฝ็ ดไบใไป่ฟๅจๆพไธๅ่ขๅญ๏ผไฝไปๆๆ็่ขๅญ้ฝๅจๆพ่กฃ็ปณไธใๆญฃๅจไธ้จ๏ผ\n\nๅผ้ทๅพทไปๅคฉๆฉไธๅพไธบ้พใไปๆญฃๅจ็ฉฟ่กฃๆๅปไธ็ญ๏ผไฝไป็่กฃๆๆฏ็ฉบ็๏ผๆฒกๆ่กฃๆๅฏ็ฉฟใ" + }, + { + "title": "Holiday Shopping", + "original_language": "Mrs. Miller is doing her holiday shopping. She's looking for gifts for her family, but she's having a lot of trouble.\n\nShe's looking for a brown umbrella for her son, but all the umbrellas are black. She's looking for a gray raincoat for her daughter, but all the raincoats are yellow. She's looking for a cotton sweater for her husband, but all the sweaters are wool.\n\nShe's looking for an inexpensive bracelet for her sister, but all the bracelets are expensive. She's looking for a leather purse for her mother, but all the purses are vinyl. And she's looking for a polka dot tie for her father, but all the ties are striped.\n\nPoor Mrs. Miller is very frustrated. She's looking for special gifts for all the special people in her family, but she's having a lot of trouble.", + "user_language": "็ฑณๅๅคชๅคชๆญฃๅจ่ฟ่ก่ๆฅ่ดญ็ฉใๅฅนๅจไธบๅฎถไบบๅฏปๆพ็คผ็ฉ๏ผไฝๅฅน้ๅฐไบๅพๅค้บป็ฆใ\n\nๅฅนๅจไธบๅฟๅญๆพไธๆๆฃ่ฒ้จไผ๏ผไฝๆๆ็้จไผ้ฝๆฏ้ป่ฒ็ใๅฅนๅจไธบๅฅณๅฟๆพไธไปถ็ฐ่ฒ้จ่กฃ๏ผไฝๆๆ็้จ่กฃ้ฝๆฏ้ป่ฒ็ใๅฅนๅจไธบไธๅคซๆพไธไปถๆฃๆฏ่กฃ๏ผไฝๆๆ็ๆฏ่กฃ้ฝๆฏ็พๆฏ็ใ\n\nๅฅนๅจไธบๅฆนๅฆนๆพไธๆกไพฟๅฎ็ๆ้ฏ๏ผไฝๆๆ็ๆ้ฏ้ฝๅพ่ดตใๅฅนๅจไธบๆฏไบฒๆพไธไธช็ฎ้ฉๆๆๅ ๏ผไฝๆๆ็ๆๆๅ ้ฝๆฏไบบ้ ้ฉ็ใๅฅนๅจไธบ็ถไบฒๆพไธๆกๅ็น้ขๅธฆ๏ผไฝๆๆ็้ขๅธฆ้ฝๆฏๆก็บน็ใ\n\nๅฏๆ็็ฑณๅๅคชๅคช้ๅธธๆฒฎไธงใๅฅนๅจไธบๅฎถ้ๆๆ็นๅซ็ไบบๅฏปๆพ็นๅซ็็คผ็ฉ๏ผไฝๅฅน้ๅฐไบๅพๅค้บป็ฆใ" + } + ], + "grammar": { + "singular-plural": { + "title": "Singular and Plural Forms", + "explanation": "Most nouns add -s for plural. Nouns ending in -s, -x, -z, -ch, -sh add -es.", + "examples": [ + { + "english": "a shirt โ shirts", + "translation": "ไธไปถ่กฌ่กซ โ ่กฌ่กซไปฌ", + "explanation": "Regular plural: add -s" + }, + { + "english": "a dress โ dresses", + "translation": "ไธๆก่ฟ่กฃ่ฃ โ ่ฟ่กฃ่ฃไปฌ", + "explanation": "Nouns ending in -s add -es" + }, + { + "english": "a watch โ watches", + "translation": "ไธๅๆ่กจ โ ๆ่กจไปฌ", + "explanation": "Nouns ending in -ch add -es" + } + ] + }, + "this-that-these-those": { + "title": "This, That, These, Those", + "explanation": "Use this/that for singular, these/those for plural. This/these are near, that/those are far.", + "examples": [ + { + "english": "This is my jacket. (near, singular)", + "translation": "่ฟๆฏๆ็ๅคนๅ ใ๏ผ่ฟ๏ผๅๆฐ๏ผ", + "explanation": "Use 'this is' for singular items close to you" + }, + { + "english": "That umbrella is brown. (far, singular)", + "translation": "้ฃๆ้จไผๆฏๆฃ่ฒ็ใ๏ผ่ฟ๏ผๅๆฐ๏ผ", + "explanation": "Use 'that' for singular items away from you" + }, + { + "english": "These are my gloves. (near, plural)", + "translation": "่ฟไบๆฏๆ็ๆๅฅใ๏ผ่ฟ๏ผๅคๆฐ๏ผ", + "explanation": "Use 'these are' for plural items close to you" + }, + { + "english": "Those boots are dirty. (far, plural)", + "translation": "้ฃไบ้ดๅญๆฏ่็ใ๏ผ่ฟ๏ผๅคๆฐ๏ผ", + "explanation": "Use 'those' for plural items away from you" + } + ] + }, + "adjectives": { + "title": "Adjectives Before Nouns", + "explanation": "Adjectives (like colors) come before nouns in English. They don't change for plural.", + "examples": [ + { + "english": "a purple jacket", + "translation": "ไธไปถ็ดซ่ฒ็ๅคนๅ ", + "explanation": "Adjective 'purple' comes before noun 'jacket'" + }, + { + "english": "green gloves", + "translation": "็ปฟ่ฒ็ๆๅฅ", + "explanation": "Adjective 'green' stays the same for plural nouns" + }, + { + "english": "That's a very nice hat!", + "translation": "้ฃ้กถๅธฝๅญ็ๅฅฝ็๏ผ", + "explanation": "Multiple adjectives can modify one noun" + } + ] + }, + "pair-of": { + "title": "Using 'Pair of'", + "explanation": "Use 'a pair of' for items that come in twos (shoes, socks, gloves, pants, etc.)", + "examples": [ + { + "english": "I'm looking for a pair of gloves", + "translation": "ๆๅจๆพไธๅฏๆๅฅ", + "explanation": "Gloves come in pairs (left and right)" + }, + { + "english": "Here's a nice pair of shoes", + "translation": "่ฟ้ๆไธๅไธ้็้ๅญ", + "explanation": "Shoes always come in pairs" + }, + { + "english": "a pair of pants", + "translation": "ไธๆก่ฃคๅญ", + "explanation": "Pants is always plural in English, use 'a pair of'" + } + ] + } + }, + "fillInBlanks": [ + { + "sentence": "Excuse me. I'm looking for a ___", + "options": ["shirt", "shirts", "shoe", "glove"], + "correctAnswer": "shirt", + "explanation": "Use singular 'a shirt' with the article 'a'", + "grammarFocus": "singular-plural" + }, + { + "sentence": "___ are over there", + "options": ["Shirts", "Shirt", "A shirt", "The shirt"], + "correctAnswer": "Shirts", + "explanation": "Use plural when talking about items in general", + "grammarFocus": "singular-plural" + }, + { + "sentence": "This is a ___ jacket", + "options": ["purple", "purples", "a purple", "the purple"], + "correctAnswer": "purple", + "explanation": "Adjectives don't change form and come before nouns", + "grammarFocus": "adjectives" + }, + { + "sentence": "I'm looking for a pair of ___", + "options": ["gloves", "glove", "a glove", "the gloves"], + "correctAnswer": "gloves", + "explanation": "Use plural after 'a pair of'", + "grammarFocus": "pair-of" + }, + { + "sentence": "___ umbrella is brown", + "options": ["That", "This", "These", "Those"], + "correctAnswer": "That", + "explanation": "Use 'that' for singular items that are far", + "grammarFocus": "this-that-these-those" + }, + { + "sentence": "___ boots are dirty", + "options": ["Those", "That", "This", "These"], + "correctAnswer": "Those", + "explanation": "Use 'those' for plural items that are far", + "grammarFocus": "this-that-these-those" + }, + { + "sentence": "I think ___ is my jacket", + "options": ["that", "those", "these", "this"], + "correctAnswer": "that", + "explanation": "Use 'that' when pointing to a singular item away from you", + "grammarFocus": "this-that-these-those" + }, + { + "sentence": "I think ___ are my gloves", + "options": ["these", "this", "that", "those"], + "correctAnswer": "these", + "explanation": "Use 'these' when pointing to plural items near you", + "grammarFocus": "this-that-these-those" + }, + { + "sentence": "Purple jackets are very ___ this year", + "options": ["popular", "populars", "popularity", "popularly"], + "correctAnswer": "popular", + "explanation": "Use adjective 'popular' after 'very'", + "grammarFocus": "adjectives" + }, + { + "sentence": "All his shirts are ___", + "options": ["dirty", "clean", "new", "old"], + "correctAnswer": "dirty", + "explanation": "According to the story, Fred's shirts are dirty", + "grammarFocus": "vocabulary" + }, + { + "sentence": "Is this ___ umbrella?", + "options": ["your", "you", "yours", "you're"], + "correctAnswer": "your", + "explanation": "Use possessive adjective 'your' before a noun", + "grammarFocus": "possessives" + }, + { + "sentence": "That's a very nice ___!", + "options": ["hat", "hats", "a hat", "the hat"], + "correctAnswer": "hat", + "explanation": "Use singular noun after the article 'a'", + "grammarFocus": "singular-plural" + }, + { + "sentence": "I guess I made a ___", + "options": ["mistake", "correct", "right", "wrong"], + "correctAnswer": "mistake", + "explanation": "The expression is 'make a mistake'", + "grammarFocus": "expressions" + }, + { + "sentence": "Fred's closet is ___", + "options": ["empty", "full", "big", "small"], + "correctAnswer": "empty", + "explanation": "According to the story, Fred's closet is empty", + "grammarFocus": "vocabulary" + }, + { + "sentence": "Mrs. Miller is looking for ___ for her family", + "options": ["gifts", "gift", "a gift", "the gift"], + "correctAnswer": "gifts", + "explanation": "She's looking for multiple gifts for different people", + "grammarFocus": "singular-plural" + } + ], + "corrections": [ + { + "correct": "Shirts are over there", + "incorrect": "Shirt are over there", + "explanation": "Use plural 'shirts' when talking about items in general, not just one", + "grammarFocus": "singular-plural" + }, + { + "correct": "This is a purple jacket", + "incorrect": "This is purple jacket", + "explanation": "Include the article 'a' before singular countable nouns", + "grammarFocus": "articles" + }, + { + "correct": "These are green gloves", + "incorrect": "These are greens gloves", + "explanation": "Adjectives don't take plural form in English", + "grammarFocus": "adjectives" + }, + { + "correct": "I'm looking for a pair of gloves", + "incorrect": "I'm looking for a gloves", + "explanation": "Use 'a pair of' for items that come in twos", + "grammarFocus": "pair-of" + }, + { + "correct": "That umbrella is brown", + "incorrect": "That umbrella brown", + "explanation": "Include the verb 'is' in complete sentences", + "grammarFocus": "to-be" + }, + { + "correct": "Those boots are dirty", + "incorrect": "That boots are dirty", + "explanation": "Use 'those' with plural nouns, not 'that'", + "grammarFocus": "this-that-these-those" + }, + { + "correct": "I don't think so", + "incorrect": "I don't think yes", + "explanation": "The correct expression is 'I don't think so', not 'I don't think yes'", + "grammarFocus": "expressions" + }, + { + "correct": "You're right", + "incorrect": "Your right", + "explanation": "Use 'you're' (you are), not the possessive 'your'", + "grammarFocus": "contractions" + }, + { + "correct": "I made a mistake", + "incorrect": "I did a mistake", + "explanation": "Use 'make a mistake', not 'do a mistake'", + "grammarFocus": "collocations" + }, + { + "correct": "Are these your boots?", + "incorrect": "Is these your boots?", + "explanation": "Use 'are' with plural 'these', not 'is'", + "grammarFocus": "subject-verb-agreement" + } + ], + "exercises": { + "singular_to_plural": { + "type": "transformation", + "instructions": "Change from singular to plural", + "items": [ + { "singular": "a shirt", "plural": "shirts", "user_language_s": "ไธไปถ่กฌ่กซ", "user_language_p": "่กฌ่กซไปฌ" }, + { "singular": "a coat", "plural": "coats", "user_language_s": "ไธไปถๅคๅฅ", "user_language_p": "ๅคๅฅไปฌ" }, + { "singular": "a dress", "plural": "dresses", "user_language_s": "ไธๆก่ฟ่กฃ่ฃ", "user_language_p": "่ฟ่กฃ่ฃไปฌ" }, + { "singular": "a watch", "plural": "watches", "user_language_s": "ไธๅๆ่กจ", "user_language_p": "ๆ่กจไปฌ" }, + { "singular": "an umbrella", "plural": "umbrellas", "user_language_s": "ไธๆ้จไผ", "user_language_p": "้จไผไปฌ" } + ] + }, + "this_that_practice": { + "type": "demonstrative_practice", + "instructions": "Use this/that or these/those", + "items": [ + { "context": "jacket (near)", "answer": "This is my jacket", "user_language": "่ฟๆฏๆ็ๅคนๅ " }, + { "context": "umbrella (far)", "answer": "That umbrella is brown", "user_language": "้ฃๆ้จไผๆฏๆฃ่ฒ็" }, + { "context": "gloves (near)", "answer": "These are my gloves", "user_language": "่ฟไบๆฏๆ็ๆๅฅ" }, + { "context": "boots (far)", "answer": "Those boots are dirty", "user_language": "้ฃไบ้ดๅญๆฏ่็" } + ] + }, + "reading_check_nothing_to_wear": { + "type": "multiple_choice", + "instructions": "Nothing to Wear - Choose the correct answer", + "items": [ + { + "question": "Fred's closet is ___", + "options": ["upset", "empty"], + "correctAnswer": "empty", + "user_language": "ๅผ้ทๅพท็่กฃๆๆฏ___" + }, + { + "question": "Fred's shirts are ___", + "options": ["dirty", "clean"], + "correctAnswer": "dirty", + "user_language": "ๅผ้ทๅพท็่กฌ่กซๆฏ___" + }, + { + "question": "The weather is ___", + "options": ["not very good", "beautiful"], + "correctAnswer": "not very good", + "user_language": "ๅคฉๆฐๆฏ___" + }, + { + "question": "Fred is upset because ___", + "options": ["he's getting dressed", "there's nothing to wear"], + "correctAnswer": "there's nothing to wear", + "user_language": "ๅผ้ทๅพท็ฆๆผๆฏๅ ไธบ___" + } + ] + }, + "word_doesnt_belong": { + "type": "odd_one_out", + "instructions": "Which word doesn't belong?", + "items": [ + { + "options": ["sweater", "jacket", "briefcase", "coat"], + "correctAnswer": "briefcase", + "explanation": "Briefcase is not clothing, it's an accessory", + "user_language": "ๅ ฌๆๅ ไธๆฏ่กฃๆ" + }, + { + "options": ["necklace", "belt", "bracelet", "earrings"], + "correctAnswer": "belt", + "explanation": "Belt is not jewelry", + "user_language": "็ฎๅธฆไธๆฏ็ ๅฎ" + }, + { + "options": ["blouse", "skirt", "dress", "tie"], + "correctAnswer": "tie", + "explanation": "Tie is typically for men", + "user_language": "้ขๅธฆๆฏ็ทๅฃซ็จๅ" + }, + { + "options": ["clean", "green", "gray", "blue"], + "correctAnswer": "clean", + "explanation": "Clean is not a color", + "user_language": "ๅนฒๅ็ไธๆฏ้ข่ฒ" + } + ] + } + }, + "pronunciation": { + "title": "Emphasized Words", + "instructions": "Practice emphasizing important words in sentences", + "exercises": [ + { + "sentence": "But this is a PURPLE jacket!", + "user_language": "ไฝ่ฟๆฏไธไปถ็ดซ่ฒ็ๅคนๅ ๏ผ", + "emphasis": ["PURPLE"], + "explanation": "Emphasize the color to show surprise or disagreement" + }, + { + "sentence": "Green gloves are very POPULAR this year.", + "user_language": "็ปฟ่ฒๆๅฅไปๅนดๅพๆต่กใ", + "emphasis": ["POPULAR"], + "explanation": "Emphasize 'popular' to reassure the customer" + }, + { + "sentence": "I think this is MY jacket.", + "user_language": "ๆ่งๅพ่ฟๆฏๆ็ๅคนๅ ใ", + "emphasis": ["MY"], + "explanation": "Emphasize 'my' to claim ownership" + }, + { + "sentence": "THAT umbrella is BROWN, and MY umbrella is BLACK.", + "user_language": "้ฃๆ้จไผๆฏๆฃ่ฒ็๏ผ่ๆ็้จไผๆฏ้ป่ฒ็ใ", + "emphasis": ["THAT", "BROWN", "MY", "BLACK"], + "explanation": "Emphasize contrasting words to show differences" + }, + { + "sentence": "But these are YELLOW shoes!", + "user_language": "ไฝ่ฟไบๆฏ้ป่ฒ็้ๅญ๏ผ", + "emphasis": ["YELLOW"], + "explanation": "Emphasize the unexpected color" + }, + { + "sentence": "Striped socks are very POPULAR this year.", + "user_language": "ๆก็บน่ขๅญไปๅนดๅพๆต่กใ", + "emphasis": ["POPULAR"], + "explanation": "Emphasize to justify the unusual choice" + }, + { + "sentence": "I think these are MY glasses.", + "user_language": "ๆ่งๅพ่ฟไบๆฏๆ็็ผ้ใ", + "emphasis": ["MY"], + "explanation": "Emphasize ownership" + }, + { + "sentence": "THOSE boots are DIRTY, and MY boots are CLEAN.", + "user_language": "้ฃไบ้ดๅญๆฏ่็๏ผ่ๆ็้ดๅญๆฏๅนฒๅ็ใ", + "emphasis": ["THOSE", "DIRTY", "MY", "CLEAN"], + "explanation": "Emphasize contrasting adjectives" + } + ] + }, + "irregular_plurals": { + "title": "Irregular Plurals Review", + "explanation": "Some plurals don't follow regular rules", + "items": [ + { "singular": "man", "plural": "men", "user_language_s": "ไธไธช็ทไบบ", "user_language_p": "็ทไบบไปฌ" }, + { "singular": "woman", "plural": "women", "user_language_s": "ไธไธชๅฅณไบบ", "user_language_p": "ๅฅณไบบไปฌ" }, + { "singular": "child", "plural": "children", "user_language_s": "ไธไธชๅญฉๅญ", "user_language_p": "ๅญฉๅญไปฌ" }, + { "singular": "person", "plural": "people", "user_language_s": "ไธไธชไบบ", "user_language_p": "ไบบไปฌ" }, + { "singular": "tooth", "plural": "teeth", "user_language_s": "ไธ้ข็้ฝฟ", "user_language_p": "็้ฝฟไปฌ" }, + { "singular": "mouse", "plural": "mice", "user_language_s": "ไธๅช่้ผ ", "user_language_p": "่้ผ ไปฌ" } + ] + }, + "listening_exercises": { + "what_word": { + "title": "What's the Word?", + "instructions": "Listen and choose the correct answer", + "items": [ + { "options": ["blouse", "dress"], "user_language": "ๅฅณๅผ่กฌ่กซ ๆ ่ฟ่กฃ่ฃ" }, + { "options": ["shoes", "boots"], "user_language": "้ๅญ ๆ ้ดๅญ" }, + { "options": ["necklace", "bracelet"], "user_language": "้กน้พ ๆ ๆ้ฏ" }, + { "options": ["coat", "raincoat"], "user_language": "ๅคๅฅ ๆ ้จ่กฃ" }, + { "options": ["socks", "stockings"], "user_language": "่ขๅญ ๆ ้ฟ็ญ่ข" }, + { "options": ["shirt", "skirt"], "user_language": "่กฌ่กซ ๆ ่ฃๅญ" } + ] + }, + "singular_or_plural": { + "title": "Which Word Do You Hear?", + "instructions": "Listen and choose singular or plural", + "items": [ + { "options": ["jacket", "jackets"], "user_language": "ๅคนๅ ๏ผๅ/ๅคๆฐ๏ผ" }, + { "options": ["belt", "belts"], "user_language": "็ฎๅธฆ๏ผๅ/ๅคๆฐ๏ผ" }, + { "options": ["sweater", "sweaters"], "user_language": "ๆฏ่กฃ๏ผๅ/ๅคๆฐ๏ผ" }, + { "options": ["suit", "suits"], "user_language": "่ฅฟ่ฃ ๏ผๅ/ๅคๆฐ๏ผ" }, + { "options": ["shoe", "shoes"], "user_language": "้ๅญ๏ผๅ/ๅคๆฐ๏ผ" }, + { "options": ["tie", "ties"], "user_language": "้ขๅธฆ๏ผๅ/ๅคๆฐ๏ผ" } + ] + }, + "attention_shoppers": { + "title": "Attention, J-Mart Shoppers!", + "instructions": "Match the item to the correct aisle number", + "items": [ + { "item": "jackets", "aisle": "Aisle 1", "user_language": "ๅคนๅ โ ็ฌฌ1้้" }, + { "item": "gloves", "aisle": "Aisle 7", "user_language": "ๆๅฅ โ ็ฌฌ7้้" }, + { "item": "blouses", "aisle": "Aisle 9", "user_language": "ๅฅณๅผ่กฌ่กซ โ ็ฌฌ9้้" }, + { "item": "bracelets", "aisle": "Aisle 11", "user_language": "ๆ้ฏ โ ็ฌฌ11้้" }, + { "item": "ties", "aisle": "Aisle 5", "user_language": "้ขๅธฆ โ ็ฌฌ5้้" } + ] + } + }, + "cultural_content": { + "title": "Clothing, Colors, and Cultures", + "sections": [ + { + "topic": "Colors and Children's Clothing", + "content": "Blue and pink aren't children's clothing colors all around the world. The meanings of colors are sometimes very different in different cultures. For example, in some cultures, blue is a common clothing color for little boys, and pink is a common clothing color for little girls. In other cultures, other colors are common for boys and girls.", + "user_language": "่่ฒๅ็ฒ่ฒๅนถไธๆฏไธ็ๅๅฐๅฟ็ซฅๆ่ฃ ็้ข่ฒใ้ข่ฒ็ๅซไนๅจไธๅๆๅไธญๆๆถ้ๅธธไธๅใไพๅฆ๏ผๅจไธไบๆๅไธญ๏ผ่่ฒๆฏๅฐ็ทๅญฉ็ๅธธ่งๆ่ฃ ้ข่ฒ๏ผ็ฒ่ฒๆฏๅฐๅฅณๅญฉ็ๅธธ่งๆ่ฃ ้ข่ฒใๅจๅ ถไปๆๅไธญ๏ผ็ทๅญฉๅๅฅณๅญฉ็ๅธธ่ง้ข่ฒๆฏๅ ถไป้ข่ฒใ" + }, + { + "topic": "Colors for Special Days", + "content": "There are also different colors for special days in different cultures. For example, white is the traditional color of a wedding dress in some cultures, but other colors are traditional in other cultures.", + "user_language": "ๅจไธๅๆๅไธญ๏ผ็นๆฎๆฅๅญไนๆไธๅ็้ข่ฒใไพๅฆ๏ผๅจไธไบๆๅไธญ๏ผ็ฝ่ฒๆฏๅฉ็บฑ็ไผ ็ป้ข่ฒ๏ผไฝๅจๅ ถไปๆๅไธญ๏ผๅ ถไป้ข่ฒๆฏไผ ็ป็ใ" + }, + { + "topic": "Color Meanings", + "content": "For some people, white is a happy color. For others, it's a sad color. For some people, red is a beautiful and lucky color. For others, it's a very sad color.", + "user_language": "ๅฏนไธไบไบบๆฅ่ฏด๏ผ็ฝ่ฒๆฏๅฟซไน็้ข่ฒใๅฏนๅ ถไปไบบๆฅ่ฏด๏ผ่ฟๆฏๆฒไผค็้ข่ฒใๅฏนไธไบไบบๆฅ่ฏด๏ผ็บข่ฒๆฏ็พไธฝๅๅนธ่ฟ็้ข่ฒใๅฏนๅ ถไปไบบๆฅ่ฏด๏ผ่ฟๆฏ้ๅธธๆฒไผค็้ข่ฒใ", + "question": "What are the meanings of different colors in YOUR culture?", + "question_user_language": "ๅจไฝ ็ๆๅไธญ๏ผไธๅ้ข่ฒ็ๅซไนๆฏไปไน๏ผ" + } + ], + "additional_vocabulary": { + "title": "Build Your Vocabulary - More Clothing", + "singular_items": [ + { "word": "bathrobe", "user_language": "ๆตด่ข", "pronunciation": "/หbรฆฮธroสb/" }, + { "word": "tee shirt", "user_language": "Tๆค", "pronunciation": "/tiห สษหrt/" }, + { "word": "scarf", "user_language": "ๅดๅทพ", "pronunciation": "/skษหrf/" }, + { "word": "wallet", "user_language": "้ฑๅ ", "pronunciation": "/หwษหlษชt/" }, + { "word": "ring", "user_language": "ๆๆ", "pronunciation": "/rษชล/" } + ], + "plural_items": [ + { "word": "sandals", "user_language": "ๅ้", "pronunciation": "/หsรฆndษlz/" }, + { "word": "slippers", "user_language": "ๆ้", "pronunciation": "/หslษชpษrz/" }, + { "word": "sneakers", "user_language": "่ฟๅจ้", "pronunciation": "/หsniหkษrz/" }, + { "word": "shorts", "user_language": "็ญ่ฃค", "pronunciation": "/สษหrts/" }, + { "word": "sweat pants", "user_language": "่ฟๅจ่ฃค", "pronunciation": "/swet pรฆnts/" } + ] + } + }, + "thematic_questions": { + "clothing_items": [ + { + "id": "q1", + "question": "What clothing items do you wear to work?", + "question_user_language": "ไฝ ไธ็ญ็ฉฟไปไน่กฃๆ๏ผ", + "tts_enabled": true, + "example_responses": [ + "I wear a shirt and pants", + "I wear a suit and tie", + "I wear a dress" + ], + "theme": "clothing_items" + }, + { + "id": "q2", + "question": "What are you wearing today?", + "question_user_language": "ไฝ ไปๅคฉ็ฉฟไปไน๏ผ", + "tts_enabled": true, + "example_responses": [ + "I'm wearing jeans and a sweater", + "I'm wearing a blue shirt", + "I'm wearing a dress and boots" + ], + "theme": "clothing_items" + }, + { + "id": "q3", + "question": "What are the students in your class wearing today?", + "question_user_language": "ไฝ ็ญไธ็ๅญฆ็ไปๅคฉ็ฉฟไปไน๏ผ", + "tts_enabled": true, + "example_responses": [ + "They're wearing jeans and shirts", + "Some are wearing dresses", + "Many students are wearing sweaters" + ], + "theme": "clothing_items" + } + ], + "colors": [ + { + "id": "q4", + "question": "What's your favorite color?", + "question_user_language": "ไฝ ๆๅๆฌข็้ข่ฒๆฏไปไน๏ผ", + "tts_enabled": true, + "example_responses": [ + "My favorite color is blue", + "I like red", + "Purple is my favorite" + ], + "theme": "colors" + }, + { + "id": "q5", + "question": "What color is your jacket?", + "question_user_language": "ไฝ ็ๅคนๅ ๆฏไปไน้ข่ฒ๏ผ", + "tts_enabled": true, + "example_responses": [ + "My jacket is black", + "It's blue", + "I have a brown jacket" + ], + "theme": "colors" + } + ], + "shopping": [ + { + "id": "q6", + "question": "What are you looking for?", + "question_user_language": "ไฝ ๅจๆพไปไน๏ผ", + "tts_enabled": true, + "example_responses": [ + "I'm looking for a shirt", + "I'm looking for a pair of shoes", + "I'm looking for a jacket" + ], + "theme": "shopping" + } + ] + }, + "statistics": { + "vocabulary_count": 71, + "phrases_count": 16, + "dialogs_count": 7, + "texts_count": 2, + "exercises_count": 4, + "fillInBlanks_count": 15, + "corrections_count": 10, + "thematic_questions_count": 5, + "estimated_completion_time": 12 + } +} diff --git a/content/chapters/sbs-9.json b/content/chapters/sbs-9.json new file mode 100644 index 0000000..ddcfd70 --- /dev/null +++ b/content/chapters/sbs-9.json @@ -0,0 +1,750 @@ +{ + "id": "sbs-9", + "book_id": "sbs", + "name": "Simple Present Tense", + "description": "Side by Side Level 1 - Chapter 9: Simple present tense, languages and nationalities, everyday activities", + "difficulty": "beginner", + "language": "en-US", + "chapter_number": "9", + "metadata": { + "version": "1.0", + "created": "2025-10-18", + "updated": "2025-10-18", + "source": "Side by Side English Learning Series", + "target_level": "beginner", + "estimated_hours": 14, + "prerequisites": ["sbs-1", "sbs-2", "sbs-8"], + "learning_objectives": [ + "Master simple present tense with all pronouns", + "Learn to form questions with do/does", + "Practice everyday activity vocabulary", + "Learn languages and nationalities", + "Understand third person singular -s/-es", + "Discuss daily routines and habits" + ], + "content_tags": ["grammar", "simple-present", "activities", "languages", "nationalities", "verb-conjugation"], + "completion_criteria": { + "vocabulary_mastery": 80, + "quiz_score": 75, + "games_completed": 3 + } + }, + "vocabulary": { + "call": { "user_language": "ๆ็ต่ฏ", "type": "verb", "pronunciation": "/kษหl/" }, + "cook": { "user_language": "ๅ้ฅญ๏ผ็น้ฅช", "type": "verb", "pronunciation": "/kสk/" }, + "drive": { "user_language": "ๅผ่ฝฆ๏ผ้ฉพ้ฉถ", "type": "verb", "pronunciation": "/draษชv/" }, + "eat": { "user_language": "ๅ", "type": "verb", "pronunciation": "/iหt/" }, + "listen to music": { "user_language": "ๅฌ้ณไน", "type": "verb phrase", "pronunciation": "/หlษชsษn tuห หmjuหzษชk/" }, + "paint": { "user_language": "ๆฒนๆผ๏ผ็ป็ป", "type": "verb", "pronunciation": "/peษชnt/" }, + "play": { "user_language": "็ฉ๏ผๆผๅฅ", "type": "verb", "pronunciation": "/pleษช/" }, + "read": { "user_language": "้ ่ฏป", "type": "verb", "pronunciation": "/riหd/" }, + "sell": { "user_language": "ๅ๏ผ้ๅฎ", "type": "verb", "pronunciation": "/sel/" }, + "shop": { "user_language": "่ดญ็ฉ", "type": "verb", "pronunciation": "/สษหp/" }, + "sing": { "user_language": "ๅฑๆญ", "type": "verb", "pronunciation": "/sษชล/" }, + "speak": { "user_language": "่ฏด๏ผ่ฎฒ่ฏ", "type": "verb", "pronunciation": "/spiหk/" }, + "visit": { "user_language": "ๆ่ฎฟ๏ผๅ่ง", "type": "verb", "pronunciation": "/หvษชzษชt/" }, + "watch TV": { "user_language": "็็ต่ง", "type": "verb phrase", "pronunciation": "/wษหtส tiห viห/" }, + "work": { "user_language": "ๅทฅไฝ", "type": "verb", "pronunciation": "/wษหrk/" }, + "Italian": { "user_language": "ๆๅคงๅฉ่ฏญ๏ผๆๅคงๅฉ็", "type": "adjective/noun", "pronunciation": "/ษชหtรฆljษn/" }, + "Spanish": { "user_language": "่ฅฟ็ญ็่ฏญ๏ผ่ฅฟ็ญ็็", "type": "adjective/noun", "pronunciation": "/หspรฆnษชส/" }, + "Japanese": { "user_language": "ๆฅ่ฏญ๏ผๆฅๆฌ็", "type": "adjective/noun", "pronunciation": "/หdสรฆpษหniหz/" }, + "French": { "user_language": "ๆณ่ฏญ๏ผๆณๅฝ็", "type": "adjective/noun", "pronunciation": "/frentส/" }, + "German": { "user_language": "ๅพท่ฏญ๏ผๅพทๅฝ็", "type": "adjective/noun", "pronunciation": "/หdสษหrmษn/" }, + "Korean": { "user_language": "้ฉ่ฏญ๏ผ้ฉๅฝ็", "type": "adjective/noun", "pronunciation": "/kษหriษn/" }, + "Russian": { "user_language": "ไฟ่ฏญ๏ผไฟ็ฝๆฏ็", "type": "adjective/noun", "pronunciation": "/หrสสษn/" }, + "Chinese": { "user_language": "ไธญๆ๏ผไธญๅฝ็", "type": "adjective/noun", "pronunciation": "/tสaษชหniหz/" }, + "Greek": { "user_language": "ๅธ่ ่ฏญ๏ผๅธ่ ็", "type": "adjective/noun", "pronunciation": "/ษกriหk/" }, + "Portuguese": { "user_language": "่ก่็่ฏญ๏ผ่ก่็็", "type": "adjective/noun", "pronunciation": "/หpษหrtสษหษกiหz/" }, + "Arabic": { "user_language": "้ฟๆไผฏ่ฏญ๏ผ้ฟๆไผฏ็", "type": "adjective/noun", "pronunciation": "/หรฆrษbษชk/" }, + "Polish": { "user_language": "ๆณขๅ ฐ่ฏญ๏ผๆณขๅ ฐ็", "type": "adjective/noun", "pronunciation": "/หpoสlษชส/" }, + "Brazilian": { "user_language": "ๅทด่ฅฟ็๏ผๅทด่ฅฟไบบ", "type": "adjective/noun", "pronunciation": "/brษหzษชliษn/" }, + "Canadian": { "user_language": "ๅ ๆฟๅคง็๏ผๅ ๆฟๅคงไบบ", "type": "adjective/noun", "pronunciation": "/kษหneษชdiษn/" }, + "Egyptian": { "user_language": "ๅๅ็๏ผๅๅไบบ", "type": "adjective/noun", "pronunciation": "/ษชหdสษชpสษn/" }, + "Puerto Rican": { "user_language": "ๆณขๅค้ปๅ็๏ผๆณขๅค้ปๅไบบ", "type": "adjective/noun", "pronunciation": "/หpwertษ หriหkษn/" }, + "neighborhood": { "user_language": "็คพๅบ๏ผ่กๅบ", "type": "noun", "pronunciation": "/หneษชbษrhสd/" }, + "old": { "user_language": "่็๏ผๆง็", "type": "adjective", "pronunciation": "/oสld/" }, + "a little": { "user_language": "ไธ็น", "type": "adverb phrase", "pronunciation": "/ษ หlษชtษl/" }, + "usually": { "user_language": "้ๅธธ", "type": "adverb", "pronunciation": "/หjuหสuษli/" }, + "newspaper": { "user_language": "ๆฅ็บธ", "type": "noun", "pronunciation": "/หnuหzpeษชpษr/" }, + "radio programs": { "user_language": "ๅนฟๆญ่็ฎ", "type": "noun phrase", "pronunciation": "/หreษชdioส หproสษกrรฆmz/" }, + "grocery store": { "user_language": "ๆ่ดงๅบ", "type": "noun phrase", "pronunciation": "/หษกroสsษri stษหr/" }, + "around the corner": { "user_language": "ๅจๆ่งๅค", "type": "prepositional phrase", "pronunciation": "/ษหraสnd รฐษ หkษหrnษr/" }, + "apartment building": { "user_language": "ๅ ฌๅฏๆฅผ", "type": "noun phrase", "pronunciation": "/ษหpษหrtmษnt หbษชldษชล/" }, + "every day": { "user_language": "ๆฏๅคฉ", "type": "adverb phrase", "pronunciation": "/หevri deษช/" }, + "neighbors": { "user_language": "้ปๅฑ ", "type": "noun", "pronunciation": "/หneษชbษrz/" }, + "talk about": { "user_language": "่ฐ่ฎบ", "type": "verb phrase", "pronunciation": "/tษหk ษหbaสt/" }, + "life": { "user_language": "็ๆดป", "type": "noun", "pronunciation": "/laษชf/" }, + "the old country": { "user_language": "่ๅฎถ๏ผ็ฅๅฝ", "type": "noun phrase", "pronunciation": "/รฐi oสld หkสntri/" }, + "upset": { "user_language": "ไธๅฎ็๏ผๅฟ็ฆ็", "type": "adjective", "pronunciation": "/สpหset/" }, + "suburb": { "user_language": "้ๅบ", "type": "noun", "pronunciation": "/หsสbษหrb/" }, + "outside": { "user_language": "ๅจโฆโฆๅค้ข", "type": "preposition", "pronunciation": "/หaสtหsaษชd/" }, + "supermarket": { "user_language": "่ถ ๅธ", "type": "noun", "pronunciation": "/หsuหpษrmษหrkษชt/" }, + "shopping mall": { "user_language": "่ดญ็ฉไธญๅฟ", "type": "noun phrase", "pronunciation": "/หสษหpษชล mษหl/" }, + "always": { "user_language": "ๆปๆฏ", "type": "adverb", "pronunciation": "/หษหlweษชz/" }, + "in fact": { "user_language": "ไบๅฎไธ", "type": "adverb phrase", "pronunciation": "/ษชn fรฆkt/" }, + "only": { "user_language": "ๅชๆ๏ผไป ไป ", "type": "adverb", "pronunciation": "/หoสnli/" }, + "on the telephone": { "user_language": "ๅจ็ต่ฏไธ", "type": "prepositional phrase", "pronunciation": "/ษหn รฐษ หtelษชfoสn/" }, + "every weekend": { "user_language": "ๆฏไธชๅจๆซ", "type": "adverb phrase", "pronunciation": "/หevri หwiหkend/" }, + "sad": { "user_language": "ไผคๅฟ็", "type": "adjective", "pronunciation": "/sรฆd/" }, + "because": { "user_language": "ๅ ไธบ", "type": "conjunction", "pronunciation": "/bษชหkษหz/" }, + "so little": { "user_language": "่ฟไนๅฐ", "type": "adverb phrase", "pronunciation": "/soส หlษชtษl/" }, + "afraid": { "user_language": "ๅฎณๆ็๏ผๆ ๅฟ็", "type": "adjective", "pronunciation": "/ษหfreษชd/" }, + "forgetting": { "user_language": "ๅฟ่ฎฐ", "type": "verb", "pronunciation": "/fษrหษกetษชล/" }, + "language": { "user_language": "่ฏญ่จ", "type": "noun", "pronunciation": "/หlรฆลษกwษชdส/" }, + "culture": { "user_language": "ๆๅ", "type": "noun", "pronunciation": "/หkสltสษr/" }, + "country": { "user_language": "ๅฝๅฎถ", "type": "noun", "pronunciation": "/หkสntri/" }, + "library": { "user_language": "ๅพไนฆ้ฆ", "type": "noun", "pronunciation": "/หlaษชbreri/" }, + "bank": { "user_language": "้ถ่ก", "type": "noun", "pronunciation": "/bรฆลk/" }, + "office": { "user_language": "ๅๅ ฌๅฎค", "type": "noun", "pronunciation": "/หษหfษชs/" }, + "bus": { "user_language": "ๅ ฌๅ ฑๆฑฝ่ฝฆ", "type": "noun", "pronunciation": "/bสs/" }, + "houses": { "user_language": "ๆฟๅญ", "type": "noun", "pronunciation": "/หhaสzษชz/" }, + "taxi": { "user_language": "ๅบ็ง่ฝฆ", "type": "noun", "pronunciation": "/หtรฆksi/" }, + "restaurant": { "user_language": "้ค้ฆ", "type": "noun", "pronunciation": "/หrestrษหnt/" }, + "cars": { "user_language": "ๆฑฝ่ฝฆ", "type": "noun", "pronunciation": "/kษหrz/" }, + "violin": { "user_language": "ๅฐๆ็ด", "type": "noun", "pronunciation": "/หvaษชษหlษชn/" } + }, + "phrases": { + "What's your name?": { "user_language": "ไฝ ๅซไปไนๅๅญ๏ผ", "context": "introduction", "pronunciation": "/wสts jสr neษชm/" }, + "Where do you live?": { "user_language": "ไฝ ไฝๅจๅช้๏ผ", "context": "asking-location", "pronunciation": "/wer duห juห lษชv/" }, + "What language do you speak?": { "user_language": "ไฝ ่ฏดไปไน่ฏญ่จ๏ผ", "context": "asking-language", "pronunciation": "/wสt หlรฆลษกwษชdส duห juห spiหk/" }, + "What do you do every day?": { "user_language": "ไฝ ๆฏๅคฉๅไปไน๏ผ", "context": "asking-activities", "pronunciation": "/wสt duห juห duห หevri deษช/" }, + "Tell me": { "user_language": "ๅ่ฏๆ", "context": "request", "pronunciation": "/tel miห/" }, + "Where does he/she live?": { "user_language": "ไป/ๅฅนไฝๅจๅช้๏ผ", "context": "asking-location-third-person", "pronunciation": "/wer dสz hiห/สiห lษชv/" }, + "What does he/she do?": { "user_language": "ไป/ๅฅนๅไปไน๏ผ", "context": "asking-occupation", "pronunciation": "/wสt dสz hiห/สiห duห/" }, + "What language does he/she speak?": { "user_language": "ไป/ๅฅน่ฏดไปไน่ฏญ่จ๏ผ", "context": "asking-language-third-person", "pronunciation": "/wสt หlรฆลษกwษชdส dสz hiห/สiห spiหk/" }, + "Buon giorno": { "user_language": "ไฝ ๅฅฝ๏ผๆๅคงๅฉ่ฏญ๏ผ", "context": "greeting", "pronunciation": "/bwษn หdสษrno/" }, + "I speak a little English": { "user_language": "ๆ่ฏดไธ็น่ฑ่ฏญ", "context": "language-ability", "pronunciation": "/aษช spiหk ษ หlษชtษl หษชลษกlษชส/" }, + "Hmm. Well...": { "user_language": "ๅฏใๅฏโฆโฆ", "context": "hesitating", "pronunciation": "/hm wel/" } + }, + "dialogs": { + "interview_antonio": { + "title": "Interview in Rome", + "participants": ["Interviewer", "Antonio"], + "lines": [ + { "speaker": "Interviewer", "text": "What's your name?", "user_language": "ไฝ ๅซไปไนๅๅญ๏ผ" }, + { "speaker": "Antonio", "text": "My name is Antonio.", "user_language": "ๆ็ๅๅญๆฏๅฎไธๅฐผๅฅฅใ" }, + { "speaker": "Interviewer", "text": "Where do you live?", "user_language": "ไฝ ไฝๅจๅช้๏ผ" }, + { "speaker": "Antonio", "text": "I live in Rome.", "user_language": "ๆไฝๅจ็ฝ้ฉฌใ" }, + { "speaker": "Interviewer", "text": "What language do you speak?", "user_language": "ไฝ ่ฏดไปไน่ฏญ่จ๏ผ" }, + { "speaker": "Antonio", "text": "I speak Italian.", "user_language": "ๆ่ฏดๆๅคงๅฉ่ฏญใ" }, + { "speaker": "Interviewer", "text": "Tell me, what do you do every day?", "user_language": "ๅ่ฏๆ๏ผไฝ ๆฏๅคฉๅไปไน๏ผ" }, + { "speaker": "Antonio", "text": "I eat Italian food, I sing Italian songs, and I watch Italian TV shows!", "user_language": "ๆๅๆๅคงๅฉ้ฃ็ฉ๏ผๆๅฑๆๅคงๅฉๆญๆฒ๏ผๆ็ๆๅคงๅฉ็ต่ง่็ฎ๏ผ" } + ] + }, + "interview_miguel": { + "title": "Interview About Miguel", + "participants": ["Person A", "Person B"], + "lines": [ + { "speaker": "Person A", "text": "What's his name?", "user_language": "ไปๅซไปไนๅๅญ๏ผ" }, + { "speaker": "Person B", "text": "His name is Miguel.", "user_language": "ไป็ๅๅญๆฏ็ฑณๆ ผๅฐใ" }, + { "speaker": "Person A", "text": "Where does he live?", "user_language": "ไปไฝๅจๅช้๏ผ" }, + { "speaker": "Person B", "text": "He lives in Mexico City.", "user_language": "ไปไฝๅจๅขจ่ฅฟๅฅๅใ" }, + { "speaker": "Person A", "text": "What language does he speak?", "user_language": "ไป่ฏดไปไน่ฏญ่จ๏ผ" }, + { "speaker": "Person B", "text": "He speaks Spanish.", "user_language": "ไป่ฏด่ฅฟ็ญ็่ฏญใ" }, + { "speaker": "Person A", "text": "What does he do every day?", "user_language": "ไปๆฏๅคฉๅไปไน๏ผ" }, + { "speaker": "Person B", "text": "He eats Mexican food, he reads Mexican newspapers, and he listens to Mexican music.", "user_language": "ไปๅๅขจ่ฅฟๅฅ้ฃ็ฉ๏ผไป่ฏปๅขจ่ฅฟๅฅๆฅ็บธ๏ผไปๅฌๅขจ่ฅฟๅฅ้ณไนใ" } + ] + }, + "linda_location": { + "title": "Where Does Linda Live?", + "participants": ["Person A", "Person B"], + "lines": [ + { "speaker": "Person A", "text": "Where does Linda live?", "user_language": "็ณ่พพไฝๅจๅช้๏ผ" }, + { "speaker": "Person B", "text": "She lives in London.", "user_language": "ๅฅนไฝๅจไผฆๆฆใ" }, + { "speaker": "Person A", "text": "What does she do?", "user_language": "ๅฅนๅไปไน๏ผ" }, + { "speaker": "Person B", "text": "She works in a library.", "user_language": "ๅฅนๅจๅพไนฆ้ฆๅทฅไฝใ" } + ] + }, + "walter_wendy": { + "title": "Where Do Walter and Wendy Live?", + "participants": ["Person A", "Person B"], + "lines": [ + { "speaker": "Person A", "text": "Where do Walter and Wendy live?", "user_language": "ๆฒๅฐ็นๅๆธฉ่ฟชไฝๅจๅช้๏ผ" }, + { "speaker": "Person B", "text": "They live in Washington, D.C.", "user_language": "ไปไปฌไฝๅจๅ็้กฟ็นๅบใ" }, + { "speaker": "Person A", "text": "What do they do?", "user_language": "ไปไปฌๅไปไน๏ผ" }, + { "speaker": "Person B", "text": "They work in an office.", "user_language": "ไปไปฌๅจๅๅ ฌๅฎคๅทฅไฝใ" } + ] + }, + "hesitating": { + "title": "Hesitating While Answering", + "participants": ["Person A", "Person B"], + "lines": [ + { "speaker": "Person A", "text": "What do you do every day?", "user_language": "ไฝ ๆฏๅคฉๅไปไน๏ผ" }, + { "speaker": "Person B", "text": "Hmm. Well... I work, I read the newspaper, and I visit my friends.", "user_language": "ๅฏใๅฏโฆโฆๆๅทฅไฝ๏ผๆ่ฏปๆฅ็บธ๏ผๆๆ่ฎฟๆ็ๆๅใ" } + ] + } + }, + "texts": [ + { + "title": "Mr. and Mrs. DiCarlo", + "original_language": "Buon giorno! Mr. and Mrs. DiCarlo live in an old Italian neighborhood in New York City. They speak a little English, but usually they speak Italian. They read the Italian newspaper. They listen to Italian radio programs. They shop at the Italian grocery store around the corner from their apartment building. And every day they visit their friends and neighbors and talk about life back in the old country. Mr. and Mrs. DiCarlo are upset about their son, Joe. He lives in a small suburb outside the city. He speaks a little Italian, but usually he speaks English. He reads American newspapers. He listens to American radio programs. He shops at big suburban supermarkets and shopping malls. And when he visits his friends and neighbors, he always speaks English. In fact, Joe speaks Italian only when he calls his parents on the telephone, or when he visits them every weekend. Mr. and Mrs. DiCarlo are sad because their son speaks so little Italian. They're afraid he's forgetting his language, his culture, and his country.", + "user_language": "ไฝ ๅฅฝ๏ผ่ฟชๅกๆดๅ ็ๅๅคซไบบไฝๅจ็บฝ็บฆๅธ็ไธไธช่ๆๅคงๅฉ็คพๅบใไปไปฌ่ฏดไธ็น่ฑ่ฏญ๏ผไฝ้ๅธธไปไปฌ่ฏดๆๅคงๅฉ่ฏญใไปไปฌ่ฏปๆๅคงๅฉๆฅ็บธใไปไปฌๅฌๆๅคงๅฉๅนฟๆญ่็ฎใไปไปฌๅจไปไปฌๅ ฌๅฏๆฅผๆ่งๅค็ๆๅคงๅฉๆ่ดงๅบ่ดญ็ฉใๆฏๅคฉไปไปฌ้ฝๆ่ฎฟไปไปฌ็ๆๅๅ้ปๅฑ ๏ผ่ฐ่ฎบ่ๅฎถ็็ๆดปใ่ฟชๅกๆดๅ ็ๅๅคซไบบๅฏนไปไปฌ็ๅฟๅญไนๆๅฐไธๅฎใไปไฝๅจๅๅค็ไธไธชๅฐ้ๅบใไป่ฏดไธ็นๆๅคงๅฉ่ฏญ๏ผไฝ้ๅธธไป่ฏด่ฑ่ฏญใไป่ฏป็พๅฝๆฅ็บธใไปๅฌ็พๅฝๅนฟๆญ่็ฎใไปๅจๅคงๅ้ๅบ่ถ ๅธๅ่ดญ็ฉไธญๅฟ่ดญ็ฉใๅฝไปๆ่ฎฟไปไปฌ็ๆๅๅ้ปๅฑ ๆถ๏ผไปๆปๆฏ่ฏด่ฑ่ฏญใไบๅฎไธ๏ผไนๅชๆๅจ็ป็ถๆฏๆ็ต่ฏๆๆฏไธชๅจๆซๆ่ฎฟไปไปฌๆถๆ่ฏดๆๅคงๅฉ่ฏญใ่ฟชๅกๆดๅ ็ๅๅคซไบบๅพไผคๅฟ๏ผๅ ไธบไปไปฌ็ๅฟๅญ่ฏดๅพๅฐ็ๆๅคงๅฉ่ฏญใไปไปฌๆ ๅฟไปๅฟ่ฎฐไบไป็่ฏญ่จใไป็ๆๅๅไป็ๅฝๅฎถใ" + } + ], + "grammar": { + "simple-present-affirmative": { + "title": "Simple Present Tense - Affirmative", + "explanation": "Use base form for I/we/you/they. Add -s or -es for he/she/it.", + "examples": [ + { + "english": "I live in Rome. / We live in Rome.", + "translation": "ๆไฝๅจ็ฝ้ฉฌใ/ ๆไปฌไฝๅจ็ฝ้ฉฌใ", + "explanation": "Use base form 'live' with I/we/you/they" + }, + { + "english": "He lives in Rome. / She lives in Rome.", + "translation": "ไปไฝๅจ็ฝ้ฉฌใ/ ๅฅนไฝๅจ็ฝ้ฉฌใ", + "explanation": "Add -s to make 'lives' for he/she/it" + }, + { + "english": "I work. / He works.", + "translation": "ๆๅทฅไฝใ/ ไปๅทฅไฝใ", + "explanation": "work โ works (add -s)" + }, + { + "english": "I watch TV. / She watches TV.", + "translation": "ๆ็็ต่งใ/ ๅฅน็็ต่งใ", + "explanation": "watch โ watches (add -es for verbs ending in -ch)" + } + ] + }, + "simple-present-questions": { + "title": "Simple Present Tense - Questions", + "explanation": "Use 'do' with I/we/you/they. Use 'does' with he/she/it. The main verb stays in base form.", + "examples": [ + { + "english": "Where do you live?", + "translation": "ไฝ ไฝๅจๅช้๏ผ", + "explanation": "do + you + live (base form)" + }, + { + "english": "Where does he live?", + "translation": "ไปไฝๅจๅช้๏ผ", + "explanation": "does + he + live (base form, not 'lives')" + }, + { + "english": "What do they do?", + "translation": "ไปไปฌๅไปไน๏ผ", + "explanation": "do + they + do (base form)" + }, + { + "english": "What does she speak?", + "translation": "ๅฅน่ฏดไปไน๏ผ", + "explanation": "does + she + speak (base form, not 'speaks')" + } + ] + }, + "third-person-singular": { + "title": "Third Person Singular -s/-es", + "explanation": "Rules for adding -s or -es to verbs with he/she/it", + "examples": [ + { + "english": "Most verbs: add -s (work โ works, live โ lives)", + "translation": "ๅคงๅคๆฐๅจ่ฏ๏ผๅ -s๏ผๅทฅไฝ โ ๅทฅไฝs๏ผไฝ โ ไฝs๏ผ", + "explanation": "Regular rule" + }, + { + "english": "Verbs ending in -s, -sh, -ch, -x, -o: add -es (watch โ watches)", + "translation": "ไปฅ-s, -sh, -ch, -x, -o็ปๅฐพ็ๅจ่ฏ๏ผๅ -es๏ผ็ โ ็es๏ผ", + "explanation": "Special spelling rule" + }, + { + "english": "I speak / He speaks", + "translation": "ๆ่ฏด / ไป่ฏด", + "explanation": "speak โ speaks" + }, + { + "english": "I read / She reads", + "translation": "ๆ่ฏป / ๅฅน่ฏป", + "explanation": "read โ reads" + } + ] + }, + "frequency-adverbs": { + "title": "Frequency Adverbs", + "explanation": "Words that tell how often we do things", + "examples": [ + { + "english": "I always speak English.", + "translation": "ๆๆปๆฏ่ฏด่ฑ่ฏญใ", + "explanation": "always = 100% of the time" + }, + { + "english": "They usually speak Italian.", + "translation": "ไปไปฌ้ๅธธ่ฏดๆๅคงๅฉ่ฏญใ", + "explanation": "usually = most of the time" + }, + { + "english": "He visits them every day.", + "translation": "ไปๆฏๅคฉๆ่ฎฟไปไปฌใ", + "explanation": "every day = daily" + }, + { + "english": "She calls only on weekends.", + "translation": "ๅฅนๅชๅจๅจๆซๆ็ต่ฏใ", + "explanation": "only = just this time/way" + } + ] + } + }, + "fillInBlanks": [ + { + "sentence": "Where ___ you live?", + "options": ["do", "does", "are", "is"], + "correctAnswer": "do", + "explanation": "Use 'do' with 'you'", + "grammarFocus": "simple-present-questions" + }, + { + "sentence": "Where ___ he live?", + "options": ["does", "do", "is", "are"], + "correctAnswer": "does", + "explanation": "Use 'does' with he/she/it", + "grammarFocus": "simple-present-questions" + }, + { + "sentence": "I ___ in Rome", + "options": ["live", "lives", "living", "lived"], + "correctAnswer": "live", + "explanation": "Use base form with 'I'", + "grammarFocus": "simple-present-affirmative" + }, + { + "sentence": "She ___ in Tokyo", + "options": ["lives", "live", "living", "lived"], + "correctAnswer": "lives", + "explanation": "Add -s for he/she/it", + "grammarFocus": "simple-present-affirmative" + }, + { + "sentence": "What language ___ you speak?", + "options": ["do", "does", "are", "is"], + "correctAnswer": "do", + "explanation": "Use 'do' with 'you' in questions", + "grammarFocus": "simple-present-questions" + }, + { + "sentence": "He ___ Italian food every day", + "options": ["eats", "eat", "eating", "eaten"], + "correctAnswer": "eats", + "explanation": "Add -s for third person singular", + "grammarFocus": "third-person-singular" + }, + { + "sentence": "They ___ the newspaper", + "options": ["read", "reads", "reading", "readed"], + "correctAnswer": "read", + "explanation": "Use base form with 'they'", + "grammarFocus": "simple-present-affirmative" + }, + { + "sentence": "She ___ TV every evening", + "options": ["watches", "watch", "watching", "watched"], + "correctAnswer": "watches", + "explanation": "Add -es for verbs ending in -ch", + "grammarFocus": "third-person-singular" + }, + { + "sentence": "What ___ he do every day?", + "options": ["does", "do", "is", "are"], + "correctAnswer": "does", + "explanation": "Use 'does' with 'he' in questions", + "grammarFocus": "simple-present-questions" + }, + { + "sentence": "Mr. and Mrs. DiCarlo ___ in New York", + "options": ["live", "lives", "living", "lived"], + "correctAnswer": "live", + "explanation": "Use base form with plural subjects", + "grammarFocus": "simple-present-affirmative" + }, + { + "sentence": "Joe ___ a little Italian", + "options": ["speaks", "speak", "speaking", "spoke"], + "correctAnswer": "speaks", + "explanation": "Add -s for third person singular", + "grammarFocus": "third-person-singular" + }, + { + "sentence": "I ___ in a library", + "options": ["work", "works", "working", "worked"], + "correctAnswer": "work", + "explanation": "Use base form with 'I'", + "grammarFocus": "simple-present-affirmative" + }, + { + "sentence": "They ___ usually speak English", + "options": ["usually", "always", "never", "sometimes"], + "correctAnswer": "usually", + "explanation": "According to the story, they usually speak Italian", + "grammarFocus": "frequency-adverbs" + }, + { + "sentence": "Where ___ they work?", + "options": ["do", "does", "are", "is"], + "correctAnswer": "do", + "explanation": "Use 'do' with 'they'", + "grammarFocus": "simple-present-questions" + }, + { + "sentence": "He ___ his parents every weekend", + "options": ["visits", "visit", "visiting", "visited"], + "correctAnswer": "visits", + "explanation": "Add -s for third person singular", + "grammarFocus": "third-person-singular" + } + ], + "corrections": [ + { + "correct": "Where do you live?", + "incorrect": "Where you live?", + "explanation": "Use 'do' to form questions in simple present", + "grammarFocus": "simple-present-questions" + }, + { + "correct": "Where does he live?", + "incorrect": "Where do he live?", + "explanation": "Use 'does' with he/she/it, not 'do'", + "grammarFocus": "simple-present-questions" + }, + { + "correct": "She lives in Rome", + "incorrect": "She live in Rome", + "explanation": "Add -s for he/she/it in simple present", + "grammarFocus": "third-person-singular" + }, + { + "correct": "He speaks Italian", + "incorrect": "He speak Italian", + "explanation": "Add -s for third person singular", + "grammarFocus": "third-person-singular" + }, + { + "correct": "Where does she work?", + "incorrect": "Where does she works?", + "explanation": "Use base form after 'does', not -s form", + "grammarFocus": "simple-present-questions" + }, + { + "correct": "She watches TV", + "incorrect": "She watchs TV", + "explanation": "Add -es (not just -s) for verbs ending in -ch", + "grammarFocus": "third-person-singular" + }, + { + "correct": "They speak Spanish", + "incorrect": "They speaks Spanish", + "explanation": "Don't add -s with they/we/you/I", + "grammarFocus": "simple-present-affirmative" + }, + { + "correct": "What do they do?", + "incorrect": "What they do?", + "explanation": "Use 'do' to form questions", + "grammarFocus": "simple-present-questions" + }, + { + "correct": "I work in a bank", + "incorrect": "I works in a bank", + "explanation": "Don't add -s with 'I'", + "grammarFocus": "simple-present-affirmative" + }, + { + "correct": "He reads newspapers", + "incorrect": "He read newspapers", + "explanation": "Add -s for third person singular", + "grammarFocus": "third-person-singular" + } + ], + "exercises": { + "verb_conjugation": { + "type": "conjugation_practice", + "instructions": "Conjugate the verbs in simple present tense", + "items": [ + { + "verb": "live", + "conjugations": { + "I": "live", + "you": "live", + "he/she/it": "lives", + "we": "live", + "they": "live" + }, + "user_language": "ไฝ" + }, + { + "verb": "speak", + "conjugations": { + "I": "speak", + "you": "speak", + "he/she/it": "speaks", + "we": "speak", + "they": "speak" + }, + "user_language": "่ฏด" + }, + { + "verb": "watch", + "conjugations": { + "I": "watch", + "you": "watch", + "he/she/it": "watches", + "we": "watch", + "they": "watch" + }, + "user_language": "็" + } + ] + }, + "reading_comprehension": { + "type": "comprehension_questions", + "instructions": "Answer questions about Mr. and Mrs. DiCarlo", + "items": [ + { + "question": "Where do Mr. and Mrs. DiCarlo live?", + "answer": "They live in an old Italian neighborhood in New York City", + "user_language_q": "่ฟชๅกๆดๅ ็ๅๅคซไบบไฝๅจๅช้๏ผ", + "user_language_a": "ไปไปฌไฝๅจ็บฝ็บฆๅธ็ไธไธช่ๆๅคงๅฉ็คพๅบ" + }, + { + "question": "Where does Joe live?", + "answer": "He lives in a small suburb outside the city", + "user_language_q": "ไนไฝๅจๅช้๏ผ", + "user_language_a": "ไปไฝๅจๅๅค็ไธไธชๅฐ้ๅบ" + }, + { + "question": "What language do Mr. and Mrs. DiCarlo usually speak?", + "answer": "They usually speak Italian", + "user_language_q": "่ฟชๅกๆดๅ ็ๅๅคซไบบ้ๅธธ่ฏดไปไน่ฏญ่จ๏ผ", + "user_language_a": "ไปไปฌ้ๅธธ่ฏดๆๅคงๅฉ่ฏญ" + }, + { + "question": "What language does Joe usually speak?", + "answer": "He usually speaks English", + "user_language_q": "ไน้ๅธธ่ฏดไปไน่ฏญ่จ๏ผ", + "user_language_a": "ไป้ๅธธ่ฏด่ฑ่ฏญ" + }, + { + "question": "What do Mr. and Mrs. DiCarlo read?", + "answer": "They read the Italian newspaper", + "user_language_q": "่ฟชๅกๆดๅ ็ๅๅคซไบบ่ฏปไปไน๏ผ", + "user_language_a": "ไปไปฌ่ฏปๆๅคงๅฉๆฅ็บธ" + }, + { + "question": "Where does Joe shop?", + "answer": "He shops at big suburban supermarkets and shopping malls", + "user_language_q": "ไนๅจๅช้่ดญ็ฉ๏ผ", + "user_language_a": "ไปๅจๅคงๅ้ๅบ่ถ ๅธๅ่ดญ็ฉไธญๅฟ่ดญ็ฉ" + } + ] + }, + "choose_correct_form": { + "type": "multiple_choice", + "instructions": "Which word is correct?", + "items": [ + { + "sentence": "Mrs. DiCarlo ( read / reads ) the Italian newspaper", + "correct": "reads", + "user_language": "่ฟชๅกๆดๅคซไบบ๏ผ่ฏป / ่ฏป๏ผๆๅคงๅฉๆฅ็บธ" + }, + { + "sentence": "They ( live / lives ) in New York City", + "correct": "live", + "user_language": "ไปไปฌ๏ผไฝ / ไฝ๏ผๅจ็บฝ็บฆๅธ" + }, + { + "sentence": "Joe ( live / lives ) outside the city", + "correct": "lives", + "user_language": "ไน๏ผไฝ / ไฝ๏ผๅจๅๅค" + }, + { + "sentence": "He ( speak / speaks ) English", + "correct": "speaks", + "user_language": "ไป๏ผ่ฏด / ่ฏด๏ผ่ฑ่ฏญ" + }, + { + "sentence": "They ( visit / visits ) their friends every day", + "correct": "visit", + "user_language": "ไปไปฌ๏ผๆ่ฎฟ / ๆ่ฎฟ๏ผไปไปฌ็ๆๅๆฏๅคฉ" + } + ] + }, + "people_and_places": { + "type": "matching", + "instructions": "Match people with their cities and languages", + "items": [ + { "person": "Antonio", "city": "Rome", "language": "Italian", "user_language": "ๅฎไธๅฐผๅฅฅ - ็ฝ้ฉฌ - ๆๅคงๅฉ่ฏญ" }, + { "person": "Carmen", "city": "Madrid", "language": "Spanish", "user_language": "ๅก้จ - ้ฉฌๅพท้ - ่ฅฟ็ญ็่ฏญ" }, + { "person": "Kenji", "city": "Tokyo", "language": "Japanese", "user_language": "ๅฅไบ - ไธไบฌ - ๆฅ่ฏญ" }, + { "person": "Nicole", "city": "Paris", "language": "French", "user_language": "ๅฆฎๅฏ - ๅทด้ป - ๆณ่ฏญ" }, + { "person": "Boris and Natasha", "city": "Moscow", "language": "Russian", "user_language": "้ฒ้ๆฏๅๅจๅก่ - ่ซๆฏ็ง - ไฟ่ฏญ" } + ] + } + }, + "pronunciation": { + "title": "Blending with 'does'", + "instructions": "Practice blending 'does' with pronouns in questions", + "exercises": [ + { + "sentence": "Where does he work?", + "user_language": "ไปๅจๅช้ๅทฅไฝ๏ผ", + "focus": "does + he", + "explanation": "Blend 'does' smoothly with 'he'" + }, + { + "sentence": "Where does she live?", + "user_language": "ๅฅนไฝๅจๅช้๏ผ", + "focus": "does + she", + "explanation": "Blend 'does' smoothly with 'she'" + }, + { + "sentence": "What does he do?", + "user_language": "ไปๅไปไน๏ผ", + "focus": "does + he", + "explanation": "Don't pause between 'does' and 'he'" + }, + { + "sentence": "What does she read?", + "user_language": "ๅฅน่ฏปไปไน๏ผ", + "focus": "does + she", + "explanation": "Smooth connection" + }, + { + "sentence": "Where does he shop?", + "user_language": "ไปๅจๅช้่ดญ็ฉ๏ผ", + "focus": "does + he", + "explanation": "Natural blending" + }, + { + "sentence": "Where does she eat?", + "user_language": "ๅฅนๅจๅช้ๅ้ฅญ๏ผ", + "focus": "does + she", + "explanation": "Smooth flow" + }, + { + "sentence": "What does he cook?", + "user_language": "ไปๅไปไน้ฅญ๏ผ", + "focus": "does + he", + "explanation": "Connect the words" + }, + { + "sentence": "What does she talk about?", + "user_language": "ๅฅน่ฐ่ฎบไปไน๏ผ", + "focus": "does + she", + "explanation": "Natural pronunciation" + } + ] + }, + "listening_exercises": { + "base_or_s_form": { + "title": "Listen: Base Form or -s Form?", + "instructions": "Listen and choose the correct verb form", + "items": [ + { "options": ["live", "lives"], "user_language": "ไฝ ๆ ไฝs" }, + { "options": ["work", "works"], "user_language": "ๅทฅไฝ ๆ ๅทฅไฝs" }, + { "options": ["speak", "speaks"], "user_language": "่ฏด ๆ ่ฏดs" }, + { "options": ["drive", "drives"], "user_language": "ๅผ่ฝฆ ๆ ๅผ่ฝฆs" }, + { "options": ["read", "reads"], "user_language": "่ฏป ๆ ่ฏปs" }, + { "options": ["visit", "visits"], "user_language": "ๆ่ฎฟ ๆ ๆ่ฎฟs" }, + { "options": ["cook", "cooks"], "user_language": "ๅ้ฅญ ๆ ๅ้ฅญs" }, + { "options": ["paint", "paints"], "user_language": "ๆฒนๆผ ๆ ๆฒนๆผs" }, + { "options": ["call", "calls"], "user_language": "ๆ็ต่ฏ ๆ ๆ็ต่ฏs" }, + { "options": ["shop", "shops"], "user_language": "่ดญ็ฉ ๆ ่ดญ็ฉs" } + ] + } + }, + "cultural_content": { + "title": "Immigration and Language", + "sections": [ + { + "topic": "First and Second Generation Immigrants", + "content": "The story of the DiCarlo family represents a common experience for immigrant families. First-generation immigrants often maintain strong connections to their homeland through language, food, and cultural practices. Second-generation children often adopt the language and culture of their new country while maintaining some connections to their parents' heritage.", + "user_language": "่ฟชๅกๆดๅฎถๆ็ๆ ไบไปฃ่กจไบ็งปๆฐๅฎถๅบญ็ๅ ฑๅ็ปๅใ็ฌฌไธไปฃ็งปๆฐ้ๅธธ้่ฟ่ฏญ่จใ้ฃ็ฉๅๆๅๅฎ่ทตไธ็ฅๅฝไฟๆ็ดงๅฏ่็ณปใ็ฌฌไบไปฃๅญฉๅญ้ๅธธ้็จๆฐๅฝๅฎถ็่ฏญ่จๅๆๅ๏ผๅๆถไฟๆไธ็ถๆฏ้ไบง็ไธไบ่็ณปใ" + }, + { + "topic": "Opportunities and Challenges", + "content": "This creates both opportunities and challenges:\n- Opportunities: Bilingualism, cultural awareness\n- Challenges: Generation gaps, cultural identity", + "user_language": "่ฟๆขๅ้ ไบๆบไผ๏ผไนๅธฆๆฅไบๆๆ๏ผ\n- ๆบไผ๏ผๅ่ฏญ่ฝๅ๏ผๆๅๆ่ฏ\n- ๆๆ๏ผไปฃๆฒ๏ผๆๅ่ฎคๅ" + } + ] + }, + "thematic_questions": { + "daily_activities": [ + { + "id": "q1", + "question": "What do you do every day?", + "question_user_language": "ไฝ ๆฏๅคฉๅไปไน๏ผ", + "tts_enabled": true, + "example_responses": [ + "I work, I read, and I watch TV", + "I study, I cook, and I visit my friends", + "I shop, I eat, and I listen to music" + ], + "theme": "daily_activities" + }, + { + "id": "q2", + "question": "Where do you live?", + "question_user_language": "ไฝ ไฝๅจๅช้๏ผ", + "tts_enabled": true, + "example_responses": [ + "I live in the city", + "I live in a suburb", + "I live in an apartment" + ], + "theme": "daily_activities" + }, + { + "id": "q3", + "question": "What language do you speak?", + "question_user_language": "ไฝ ่ฏดไปไน่ฏญ่จ๏ผ", + "tts_enabled": true, + "example_responses": [ + "I speak English", + "I speak Spanish and a little English", + "I speak Chinese" + ], + "theme": "daily_activities" + } + ], + "occupations": [ + { + "id": "q4", + "question": "What does Linda do?", + "question_user_language": "็ณ่พพๅไปไน๏ผ", + "tts_enabled": true, + "example_responses": [ + "She works in a library", + "Linda works in a library", + "She's a librarian" + ], + "theme": "occupations" + }, + { + "id": "q5", + "question": "Where does Bob work?", + "question_user_language": "้ฒๅๅจๅช้ๅทฅไฝ๏ผ", + "tts_enabled": true, + "example_responses": [ + "He drives a bus", + "Bob drives a bus", + "He works as a bus driver" + ], + "theme": "occupations" + } + ] + }, + "statistics": { + "vocabulary_count": 72, + "phrases_count": 11, + "dialogs_count": 5, + "texts_count": 1, + "exercises_count": 4, + "fillInBlanks_count": 15, + "corrections_count": 10, + "thematic_questions_count": 5, + "pronunciation_exercises_count": 8, + "listening_exercises_count": 10, + "estimated_completion_time": 14 + } +} diff --git a/index.html b/index.html index e0ffd55..633a87a 100644 --- a/index.html +++ b/index.html @@ -721,7 +721,16 @@ }; window.openSettings = function() { - alert('Settings panel coming soon!'); + try { + const { router } = app.getCore(); + if (router) { + router.navigate('/settings'); + } else { + console.error('Router not available'); + } + } catch (error) { + console.error('Error opening settings:', error); + } }; window.navigateToDynamicRevision = function() { diff --git a/src/components/SettingsDebug.js b/src/components/SettingsDebug.js index 8cd60f9..3874324 100644 --- a/src/components/SettingsDebug.js +++ b/src/components/SettingsDebug.js @@ -1,4 +1,5 @@ import Module from '../core/Module.js'; +import ttsService from '../services/TTSService.js'; class SettingsDebug extends Module { constructor(name, dependencies, config) { @@ -17,9 +18,10 @@ class SettingsDebug extends Module { this._debugMessages = []; this._availableVoices = []; this._ttsSettings = { - rate: 0.8, + rate: 0.85, + pitch: 1.0, volume: 1.0, - selectedVoice: null + voicesByLanguage: {} // e.g., { 'en-US': 'Google US English', 'zh-CN': 'Google ๆฎ้่ฏ' } }; Object.seal(this); @@ -100,9 +102,19 @@ class SettingsDebug extends Module { _loadTTSSettings() { try { + // Load settings from TTSService + const defaults = ttsService.getDefaults(); + this._ttsSettings.rate = defaults.rate; + this._ttsSettings.volume = defaults.volume; + this._ttsSettings.pitch = defaults.pitch; + + // Also try to load from localStorage for voicesByLanguage const saved = localStorage.getItem('tts-settings'); if (saved) { - this._ttsSettings = { ...this._ttsSettings, ...JSON.parse(saved) }; + const savedSettings = JSON.parse(saved); + if (savedSettings.voicesByLanguage) { + this._ttsSettings.voicesByLanguage = savedSettings.voicesByLanguage; + } } } catch (e) { this._addDebugMessage(`Failed to load TTS settings: ${e.message}`, 'warning'); @@ -111,8 +123,19 @@ class SettingsDebug extends Module { _saveTTSSettings() { try { + // Apply settings to TTSService + ttsService.setDefaults({ + rate: this._ttsSettings.rate, + volume: this._ttsSettings.volume, + pitch: this._ttsSettings.pitch + }); + + // Apply preferred voices to TTSService + ttsService.setPreferredVoices(this._ttsSettings.voicesByLanguage); + + // Save to localStorage localStorage.setItem('tts-settings', JSON.stringify(this._ttsSettings)); - this._addDebugMessage('TTS settings saved', 'success'); + this._addDebugMessage('TTS settings saved and applied globally', 'success'); } catch (e) { this._addDebugMessage(`Failed to save TTS settings: ${e.message}`, 'error'); } @@ -400,6 +423,14 @@ class SettingsDebug extends Module { this._container.innerHTML = `