import gradio as gr from utils.helpers import load_content from .translation_model import TranslationModel def phonics_component(): content = load_content() translator = TranslationModel() def practice_phonics(sound, user_input): if not user_input.strip(): return "Please enter a word" for level in ["beginner", "intermediate"]: examples = next((p["examples"] for p in content["phonics"][level] if p["sound"] == sound), []) if examples: # Translate user input to English to verify meaning translation = translator.translate(user_input.lower().strip(), "af", "en") # Check if the word contains the sound has_sound = sound.lower() in user_input.lower() # Check if it's a valid Afrikaans word by translating back back_translation = translator.translate(translation, "en", "af") is_valid = back_translation.lower().strip() == user_input.lower().strip() if user_input.lower().strip() in [ex.lower() for ex in examples]: return f"Correct! ✓ '{user_input}' contains the sound '{sound}'" elif has_sound and is_valid: return f"Good job! '{user_input}' is a valid word with the '{sound}' sound" else: return f"Try again. Examples: {', '.join(examples)}" return "Sound not found" with gr.Column() as phonics: for level in ["beginner", "intermediate"]: with gr.Tab(f"{level.capitalize()} Phonics"): for phoneme in content["phonics"][level]: with gr.Accordion(f"{phoneme['sound']} - {phoneme['pronunciation']}", open=False): sound_input = gr.Textbox(value=phoneme["sound"], visible=False) examples = gr.Markdown(", ".join(phoneme["examples"])) user_input = gr.Textbox(label="Type a word with this sound") check_btn = gr.Button("Check") result = gr.Textbox(label="Result") check_btn.click( fn=practice_phonics, inputs=[sound_input, user_input], outputs=result ) return phonics