Krishna086 commited on
Commit
460acea
Β·
verified Β·
1 Parent(s): 14a91a0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -42
app.py CHANGED
@@ -1,7 +1,6 @@
1
  import streamlit as st
2
  import importlib
3
  from io import BytesIO
4
- import time
5
 
6
  st.set_page_config(page_title="Multilingual Translator", page_icon="🌐", layout="centered")
7
 
@@ -15,60 +14,43 @@ def main():
15
 
16
  # Header
17
  st.markdown("<h1 style='text-align: center; color: #4285F4;'>Multilingual Translator</h1>", unsafe_allow_html=True)
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:
@@ -76,14 +58,10 @@ def play_audio(audio_processor):
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()
 
1
  import streamlit as st
2
  import importlib
3
  from io import BytesIO
 
4
 
5
  st.set_page_config(page_title="Multilingual Translator", page_icon="🌐", layout="centered")
6
 
 
14
 
15
  # Header
16
  st.markdown("<h1 style='text-align: center; color: #4285F4;'>Multilingual Translator</h1>", unsafe_allow_html=True)
 
17
 
18
+ # Language and Input/Output Layout
19
  col1, col2 = st.columns(2)
20
  with col1:
21
  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")]
22
  source_lang = detected_options[0][0] if detected_options else "English"
23
  source_lang_code = next((k for k, v in LANGUAGES.items() if v[1] == source_lang), "en")
24
  source_lang_display = st.selectbox("Source", options=[LANGUAGES[source_lang_code][0]] + [v[0] for v in LANGUAGES.values()], index=0, key="source_lang")
25
+ input_type = st.radio("Input", ["Text", "File"], horizontal=True, key="input_type")
 
 
 
 
 
 
 
 
26
  if input_type == "Text":
27
+ input_text = st.text_area("", height=200, key="input_text", on_change=trigger_translation, args=(translation, lang_detect, audio_processor,))
28
  else:
29
+ input_text = st.file_uploader("", type=["txt", "docx", "pdf"], key="file_input", on_change=trigger_translation, args=(translation, lang_detect, audio_processor,))
30
  if input_text:
31
  st.session_state.input_text = input_text.read().decode("utf-8").strip()
 
32
  st.button("Translate", key="translate_btn", on_click=trigger_translation, args=(translation, lang_detect, audio_processor,))
33
+ with col2:
34
+ target_lang_display = st.selectbox("Target", options=[v[0] for v in LANGUAGES.values()], index=list(LANGUAGES.values()).index(LANGUAGES["hi"]), key="target_lang")
35
+ target_lang = next((k for k, v in LANGUAGES.items() if v[0] == target_lang_display), "hi")
36
+ if "translated_text" in st.session_state:
37
+ st.text_area("", value=st.session_state.translated_text, height=200, key="output_text", disabled=True)
38
+ if st.button("", key="audio_btn", on_click=play_audio, args=(audio_processor,), help="Play audio"):
39
+ pass # Handled by play_audio
40
 
41
  def trigger_translation(translation, lang_detect, audio_processor):
42
  text = st.session_state.input_text.strip()
43
  if text:
44
+ source_lang = next((k for k, v in LANGUAGES.items() if v[0] == st.session_state.source_lang), "en")
45
+ target_lang = next((k for k, v in LANGUAGES.items() if v[0] == st.session_state.target_lang), "hi")
46
+ if source_lang != "en" and target_lang != "en":
47
+ temp = translation.translate(text, source_lang, "en")
48
+ if temp and len(temp.split()) >= 2:
49
+ st.session_state.translated_text = translation.translate(temp, "en", target_lang)
50
+ else:
 
 
 
 
 
 
 
 
51
  st.session_state.translated_text = text
52
+ else:
53
+ st.session_state.translated_text = translation.translate(text, source_lang, target_lang) or text
54
 
55
  def play_audio(audio_processor):
56
  if "translated_text" in st.session_state and st.session_state.translated_text:
 
58
  audio = audio_processor.text_to_speech(st.session_state.translated_text, target_lang)
59
  if audio and audio.getbuffer().nbytes > 0:
60
  st.audio(audio, format="audio/mp3")
 
61
  else:
62
  audio_fallback = audio_processor.text_to_speech(st.session_state.translated_text, "en")
63
  if audio_fallback and audio_fallback.getbuffer().nbytes > 0:
64
  st.audio(audio_fallback, format="audio/mp3")
 
 
 
65
 
66
  if __name__ == "__main__":
67
  main()