File size: 1,985 Bytes
2c7bd07
 
22d2fd3
c0f9fa0
 
22d2fd3
57fc41b
e94cef8
 
dafe604
e94cef8
dafe604
22d2fd3
dafe604
e94cef8
dafe604
2c7bd07
 
 
dafe604
e94cef8
22d2fd3
e94cef8
22d2fd3
e94cef8
 
dafe604
e94cef8
dafe604
22d2fd3
e94cef8
dafe604
 
22d2fd3
e94cef8
22d2fd3
 
 
 
e94cef8
 
22d2fd3
 
 
 
 
 
 
e94cef8
dafe604
22d2fd3
 
 
e94cef8
dafe604
41bdec3
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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")