import streamlit as st from transformers import MarianMTModel, MarianTokenizer # Language options LANGUAGES = { "English": "en", "French": "fr", "Spanish": "es", "German": "de", "Italian": "it", "Chinese": "zh", "Japanese": "ja", "Arabic": "ar", "Russian": "ru", "Hindi": "hi", "Urdu": "ur", } # Load model with caching @st.cache_resource def load_model(src_lang, tgt_lang): model_name = f"Helsinki-NLP/opus-mt-{src_lang}-{tgt_lang}" tokenizer = MarianTokenizer.from_pretrained(model_name) model = MarianMTModel.from_pretrained(model_name) return tokenizer, model # Translate text function def translate_text(tokenizer, model, text): inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) translated = model.generate(**inputs) return tokenizer.decode(translated[0], skip_special_tokens=True) # App title and description st.markdown( """
Easily translate text between multiple languages with this interactive app powered by Hugging Face Transformers.
""", unsafe_allow_html=True, ) st.sidebar.title("Translator Settings") source_lang = st.sidebar.selectbox("Source Language", list(LANGUAGES.keys())) target_lang = st.sidebar.selectbox("Target Language", list(LANGUAGES.keys())) st.markdown("---") if source_lang != target_lang: text_to_translate = st.text_area(f"Enter text in {source_lang}:", height=150, placeholder="Type your text here...") if st.button("Translate", type="primary"): if text_to_translate.strip(): with st.spinner("Translating... Please wait."): src_lang_code = LANGUAGES[source_lang] tgt_lang_code = LANGUAGES[target_lang] tokenizer, model = load_model(src_lang_code, tgt_lang_code) translated_text = translate_text(tokenizer, model, text_to_translate) st.success("Translation Complete!") st.markdown("### Translated Text:") st.text_area(f"In {target_lang}:", value=translated_text, height=150, disabled=True) else: st.error("Please enter text to translate.") else: st.warning("Source and target languages must be different.") st.markdown("---") st.markdown( """ """, unsafe_allow_html=True, )