Krishna086 commited on
Commit
14a91a0
·
verified ·
1 Parent(s): ec946c9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -48
app.py CHANGED
@@ -18,79 +18,72 @@ def main():
18
  st.markdown("<p style='text-align: center; color: #666;'>Translate text like Google Translate</p>", unsafe_allow_html=True)
19
 
20
  # Language Controls
21
- col1, col2 = st.columns([1, 1])
22
  with col1:
23
- detected_options = lang_detect.detect_language(st.session_state.get("user_text", "")) if st.session_state.get("user_text", "").strip() and len(st.session_state.get("user_text", "").strip()) >= 10 else [("English", 1.0, "English")]
24
  source_lang = detected_options[0][0] if detected_options else "English"
25
  source_lang_code = next((k for k, v in LANGUAGES.items() if v[1] == source_lang), "en")
26
- source_lang_display = st.selectbox("Source Language", options=[LANGUAGES[source_lang_code][0]] + [v[0] for v in LANGUAGES.values()], index=0, key="source_lang", help="Auto-detected, override if needed", label_visibility="hidden")
27
  with col2:
28
- target_lang_display = st.selectbox("Target Language", options=[v[0] for v in LANGUAGES.values()], index=list(LANGUAGES.values()).index(LANGUAGES["hi"]), key="target_lang", label_visibility="hidden")
29
  target_lang = next((k for k, v in LANGUAGES.items() if v[0] == target_lang_display), "hi")
30
 
31
  # Input Section
32
- if "user_text" not in st.session_state:
33
- st.session_state.user_text = ""
34
- col_input = st.container()
35
- with col_input:
36
- input_type = st.radio("Input Method", ["Text", "File Upload"], horizontal=True, key="input_type", label_visibility="hidden")
37
  if input_type == "Text":
38
- user_text = st.text_area("Enter or paste text", height=200, key="user_text", on_change=trigger_translation, args=(translation, lang_detect, audio_processor,), label_visibility="hidden")
39
  else:
40
- user_text = st.file_uploader("Upload File", type=["txt", "docx", "pdf"], key="doc_input", on_change=trigger_translation, args=(translation, lang_detect, audio_processor,), label_visibility="hidden")
41
- if user_text:
42
- st.session_state.user_text = user_text.read().decode("utf-8").strip()
43
- st.markdown(f"<small style='color: grey;'>Characters: {len(st.session_state.user_text)}/1000</small>", unsafe_allow_html=True)
44
  st.button("Translate", key="translate_btn", on_click=trigger_translation, args=(translation, lang_detect, audio_processor,))
45
 
46
  # Output Section
47
- col_output = st.container()
48
- with col_output:
49
  if "translated_text" in st.session_state and st.session_state.translated_text:
50
- st.text_area("Translation", value=st.session_state.translated_text, height=200, key="output_area", disabled=True, label_visibility="hidden")
51
- col_a = st.columns([1])[0] # Single column for speaker icon
52
- if st.button("🔊", key="audio_btn", on_click=play_audio, args=(audio_processor,), help="Listen to translation", label_visibility="hidden"):
53
- pass # Handled by play_audio function
54
 
55
  def trigger_translation(translation, lang_detect, audio_processor):
56
- user_text = st.session_state.user_text.strip()
57
- if user_text:
58
- spinner = st.empty()
59
- spinner.info("Translating...")
60
- start_time = time.time()
61
- try:
62
- source_lang = next((k for k, v in LANGUAGES.items() if v[0] == st.session_state.source_lang), "en")
63
- target_lang = next((k for k, v in LANGUAGES.items() if v[0] == st.session_state.target_lang), "hi")
64
- if source_lang != "en" and target_lang != "en":
65
- temp_translation = translation.translate(user_text, source_lang, "en")
66
- if not temp_translation or len(temp_translation.split()) < 2:
67
- raise ValueError("Intermediate translation invalid")
68
- translated_text = translation.translate(temp_translation, "en", target_lang)
69
- else:
70
- translated_text = translation.translate(user_text, source_lang, target_lang)
71
- if not translated_text or len(translated_text.split()) < 2:
72
- raise ValueError("Final translation invalid")
73
- st.session_state.translated_text = translated_text
74
- except Exception as e:
75
- st.session_state.translated_text = user_text
76
- st.warning(f"Translation issue: {str(e)}. Using input as fallback.")
77
- finally:
78
- spinner.empty()
79
 
80
  def play_audio(audio_processor):
81
  if "translated_text" in st.session_state and st.session_state.translated_text:
82
  target_lang = next((k for k, v in LANGUAGES.items() if v[0] == st.session_state.target_lang), "hi")
83
  audio = audio_processor.text_to_speech(st.session_state.translated_text, target_lang)
84
  if audio and audio.getbuffer().nbytes > 0:
85
- st.audio(audio, format="audio/mp3", start_time=0)
86
- st.success("Audio playing.")
87
  else:
88
  audio_fallback = audio_processor.text_to_speech(st.session_state.translated_text, "en")
89
  if audio_fallback and audio_fallback.getbuffer().nbytes > 0:
90
- st.audio(audio_fallback, format="audio/mp3", start_time=0)
91
- st.success("Fallback audio in English playing.")
92
  else:
93
- st.error("Audio generation failed. Try again later.")
94
 
95
  if __name__ == "__main__":
96
  main()
 
18
  st.markdown("<p style='text-align: center; color: #666;'>Translate text like Google Translate</p>", unsafe_allow_html=True)
19
 
20
  # Language Controls
21
+ col1, col2 = st.columns(2)
22
  with col1:
23
+ detected_options = lang_detect.detect_language(st.session_state.get("input_text", "")) if st.session_state.get("input_text", "").strip() and len(st.session_state.get("input_text", "").strip()) >= 10 else [("English", 1.0, "English")]
24
  source_lang = detected_options[0][0] if detected_options else "English"
25
  source_lang_code = next((k for k, v in LANGUAGES.items() if v[1] == source_lang), "en")
26
+ source_lang_display = st.selectbox("Source", options=[LANGUAGES[source_lang_code][0]] + [v[0] for v in LANGUAGES.values()], index=0, key="source_lang")
27
  with col2:
28
+ target_lang_display = st.selectbox("Target", options=[v[0] for v in LANGUAGES.values()], index=list(LANGUAGES.values()).index(LANGUAGES["hi"]), key="target_lang")
29
  target_lang = next((k for k, v in LANGUAGES.items() if v[0] == target_lang_display), "hi")
30
 
31
  # Input Section
32
+ if "input_text" not in st.session_state:
33
+ st.session_state.input_text = ""
34
+ with st.container():
35
+ input_type = st.radio("Input", ["Text", "File"], horizontal=True)
 
36
  if input_type == "Text":
37
+ input_text = st.text_area("Text to Translate", height=150, key="input_text", on_change=trigger_translation, args=(translation, lang_detect, audio_processor,))
38
  else:
39
+ input_text = st.file_uploader("Upload File", type=["txt", "docx", "pdf"], key="file_input", on_change=trigger_translation, args=(translation, lang_detect, audio_processor,))
40
+ if input_text:
41
+ st.session_state.input_text = input_text.read().decode("utf-8").strip()
42
+ st.markdown(f"<small style='color: grey;'>Chars: {len(st.session_state.input_text)}/1000</small>", unsafe_allow_html=True)
43
  st.button("Translate", key="translate_btn", on_click=trigger_translation, args=(translation, lang_detect, audio_processor,))
44
 
45
  # Output Section
46
+ with st.container():
 
47
  if "translated_text" in st.session_state and st.session_state.translated_text:
48
+ st.text_area("Translation", value=st.session_state.translated_text, height=150, key="output_text", disabled=True)
49
+ if st.button("🔊", key="audio_btn", on_click=play_audio, args=(audio_processor,)):
50
+ pass # Handled by play_audio
 
51
 
52
  def trigger_translation(translation, lang_detect, audio_processor):
53
+ text = st.session_state.input_text.strip()
54
+ if text:
55
+ with st.spinner("Translating..."):
56
+ try:
57
+ source_lang = next((k for k, v in LANGUAGES.items() if v[0] == st.session_state.source_lang), "en")
58
+ target_lang = next((k for k, v in LANGUAGES.items() if v[0] == st.session_state.target_lang), "hi")
59
+ if source_lang != "en" and target_lang != "en":
60
+ temp = translation.translate(text, source_lang, "en")
61
+ if not temp or len(temp.split()) < 2:
62
+ raise ValueError("Intermediate translation failed")
63
+ translated = translation.translate(temp, "en", target_lang)
64
+ else:
65
+ translated = translation.translate(text, source_lang, target_lang)
66
+ if not translated or len(translated.split()) < 2:
67
+ raise ValueError("Translation failed")
68
+ st.session_state.translated_text = translated
69
+ except Exception as e:
70
+ st.session_state.translated_text = text
71
+ st.warning(f"Error: {str(e)}. Using input as fallback.")
 
 
 
 
72
 
73
  def play_audio(audio_processor):
74
  if "translated_text" in st.session_state and st.session_state.translated_text:
75
  target_lang = next((k for k, v in LANGUAGES.items() if v[0] == st.session_state.target_lang), "hi")
76
  audio = audio_processor.text_to_speech(st.session_state.translated_text, target_lang)
77
  if audio and audio.getbuffer().nbytes > 0:
78
+ st.audio(audio, format="audio/mp3")
79
+ st.success("Playing audio.")
80
  else:
81
  audio_fallback = audio_processor.text_to_speech(st.session_state.translated_text, "en")
82
  if audio_fallback and audio_fallback.getbuffer().nbytes > 0:
83
+ st.audio(audio_fallback, format="audio/mp3")
84
+ st.success("Playing fallback audio in English.")
85
  else:
86
+ st.error("Audio failed. Try again.")
87
 
88
  if __name__ == "__main__":
89
  main()