Spaces:
Sleeping
Sleeping
| import tempfile | |
| from gtts import gTTS | |
| from deep_translator import GoogleTranslator | |
| import gradio as gr | |
| def translate_and_speak(text: str, target: str, log: list): | |
| if not text.strip(): | |
| # return empty outputs and keep log untouched | |
| return "", None, log, log | |
| # 1️⃣ translate | |
| dest = "es" if target == "Spanish" else "en" | |
| translated = GoogleTranslator(source='auto', target=dest).translate(text) | |
| # 2️⃣ speak | |
| tts = gTTS(translated, lang=dest) | |
| tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) | |
| tts.write_to_fp(tmp) | |
| tmp.flush() | |
| # 3️⃣ update log | |
| log_entry = [text, target, translated] | |
| new_log = log + [log_entry] | |
| # outputs: translated text, audio filepath, session table rows, updated state | |
| return translated, tmp.name, new_log, new_log | |
| with gr.Blocks(title="🌐💬 Translate & Speak + Session Log") as demo: | |
| gr.Markdown( | |
| "# 🗣️ Translate & Speak + Session Log\n" | |
| "Type text, choose language, click **Go**, and watch your session history." | |
| ) | |
| with gr.Row(): | |
| text_in = gr.Textbox(lines=3, placeholder="Enter text here…") | |
| lang_sel = gr.Radio(["Spanish", "English"], value="Spanish", label="Translate to") | |
| go_btn = gr.Button("Go 🔄", variant="primary") | |
| translated_out = gr.Textbox(label="Translated text", interactive=False) | |
| audio_out = gr.Audio(label="Speech output", type="filepath") | |
| session_log = gr.Dataframe( | |
| headers=["Input Text", "Target Language", "Translated Text"], | |
| datatype=["str", "str", "str"], | |
| wrap=True, | |
| interactive=False, | |
| label="Session Log" | |
| ) | |
| log_state = gr.State([]) # holds list of [input, lang, translation] | |
| go_btn.click( | |
| translate_and_speak, | |
| inputs=[text_in, lang_sel, log_state], | |
| outputs=[translated_out, audio_out, session_log, log_state] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(server_name="0.0.0.0") | |