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") | |