import streamlit as st import importlib from io import BytesIO st.set_page_config(page_title="Multilingual Translator", page_icon="🌐", layout="wide") def main(): translation = importlib.import_module("translation") lang_detect = importlib.import_module("lang_detect") audio_processor = importlib.import_module("audio_processor") st.markdown("

Multilingual Translator

", unsafe_allow_html=True) st.markdown("

Translate text like Google Translate

", unsafe_allow_html=True) # Single-page layout col1, col2 = st.columns([1, 1]) with col1: input_type = st.radio("Input Method", ["Text", "File Upload"], horizontal=True) if input_type == "Text": user_text = st.text_area("Enter Text", height=200, key="text_input").strip() else: doc_file = st.file_uploader("Upload TXT File", type=["txt"], key="doc_input") user_text = doc_file.read().decode("utf-8").strip() if doc_file else "" st.write(f"Raw Input: {user_text}") # Debug with col2: if user_text: detected_options = lang_detect.detect_language(user_text) if len(user_text) >= 10 else [("English", 1.0, "English")] source_lang = detected_options[0][0] if detected_options else "English" native_lang_map = { "English": "English", "French": "Français", "Spanish": "Español", "German": "Deutsch", "Hindi": "हिन्दी", "Chinese": "中文", "Arabic": "العربية", "Russian": "Русский", "Japanese": "日本語" } display_options = ["Auto"] + [f"{native_lang_map.get(lang, lang)} ({conf:.2f})" for lang, conf, _ in detected_options] + list(translation.LANGUAGES.keys()) source_lang = st.selectbox("Source Language", display_options, index=0, key="source_lang").replace("Auto", source_lang) target_lang = st.selectbox("Target Language", [native_lang_map[lang] for lang in translation.LANGUAGES], index=list(translation.LANGUAGES.keys()).index("Hindi") if "Hindi" in translation.LANGUAGES else 0, key="target_lang", format_func=lambda x: x) target_lang = next(key for key, value in native_lang_map.items() if value == target_lang) if st.button("Translate", key="translate_btn"): try: translated_text = translation.translate(user_text, source_lang, target_lang) st.session_state.translated_text = translated_text st.write(f"Translated Text (Debug): {translated_text}") except Exception as e: st.error(f"Translation failed: {str(e)}. Using fallback text.") st.session_state.translated_text = f"Translation not supported for {source_lang} to {target_lang}. Input: {user_text}" output_option = st.radio("Output", ["Text", "Audio"], horizontal=True, key="output_option") if output_option == "Text": st.success("Result:") st.write(st.session_state.translated_text) else: audio_path = audio_processor.text_to_speech(st.session_state.translated_text, target_lang) if audio_path: st.audio(audio_path, format="audio/mp3") else: st.error("Audio generation failed. Try a supported language like English or French.") st.markdown("""

Developed By: Krishna Prakash LinkedIn

""", unsafe_allow_html=True) if __name__ == "__main__": main()