import streamlit as st from transformers import MarianMTModel, MarianTokenizer # App Title and Description st.title("🌐 Universal Language Translator App") st.write(""" Translate text from any language to any other language using an open-source multilingual model. This app supports many languages and ensures a user-friendly experience. """) # Instructions st.sidebar.header("📝 Instructions") st.sidebar.write(""" 1. Enter the text you want to translate in the input box. 2. Select the source language of the input text. 3. Choose the target language for translation. 4. Click the "Translate" button to see the translated text. """) # Supported Languages languages = { "English": "en", "Spanish": "es", "French": "fr", "German": "de", "Chinese": "zh", "Hindi": "hi", "Arabic": "ar", "Russian": "ru", "Italian": "it", "Portuguese": "pt", "Japanese": "ja", "Korean": "ko", "Dutch": "nl", "Bengali": "bn", "Turkish": "tr", "Urdu": "ur", "Greek": "el", "Polish": "pl", "Thai": "th", "Vietnamese": "vi", "Hebrew": "he", "Swahili": "sw", "Amharic": "am", "Tamil": "ta", "Telugu": "te", "Punjabi": "pa", "Malayalam": "ml", } # UI for Input and Language Selection source_text = st.text_area("Enter text to translate:", height=150, placeholder="Type here...") source_language = st.selectbox("Source Language:", options=list(languages.keys()), index=0) target_language = st.selectbox("Target Language:", options=list(languages.keys()), index=1) if st.button("Translate"): if source_text.strip() == "": st.error("Please enter some text to translate.") else: try: # Define model name dynamically model_name = f"Helsinki-NLP/opus-mt-{languages[source_language]}-{languages[target_language]}" # Load tokenizer and model tokenizer = MarianTokenizer.from_pretrained(model_name) model = MarianMTModel.from_pretrained(model_name) # Translate inputs = tokenizer(source_text, return_tensors="pt", padding=True, truncation=True) translated_tokens = model.generate(**inputs) translated_text = tokenizer.decode(translated_tokens[0], skip_special_tokens=True) # Display Translated Text st.subheader("🔄 Translated Text:") st.text_area("Translation Output:", value=translated_text, height=150) except Exception as e: st.error("Translation failed. Please ensure the selected languages are supported.") st.error(str(e)) # Footer st.write("---") st.markdown("💡 **Developed by Abdullah**")