| | import streamlit as st |
| | from transformers import MarianMTModel, MarianTokenizer |
| |
|
| | |
| | LANGUAGES = { |
| | "English": "en", |
| | "French": "fr", |
| | "German": "de", |
| | "Spanish": "es", |
| | "Italian": "it", |
| | "Portuguese": "pt", |
| | "Russian": "ru", |
| | "Chinese": "zh", |
| | "Arabic": "ar", |
| | "Hindi": "hi", |
| | "Urdu": "ur" |
| | } |
| |
|
| | def get_model_name(src_lang, tgt_lang): |
| | return f"Helsinki-NLP/opus-mt-{src_lang}-{tgt_lang}" |
| |
|
| | @st.cache_resource(show_spinner=False) |
| | def load_model_and_tokenizer(src_lang, tgt_lang): |
| | model_name = get_model_name(src_lang, tgt_lang) |
| | tokenizer = MarianTokenizer.from_pretrained(model_name) |
| | model = MarianMTModel.from_pretrained(model_name) |
| | return tokenizer, model |
| |
|
| | def translate(text, tokenizer, model): |
| | inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) |
| | translated = model.generate(**inputs) |
| | return tokenizer.decode(translated[0], skip_special_tokens=True) |
| |
|
| | |
| | st.set_page_config(page_title="π Multi-Language Translator", layout="centered") |
| |
|
| | st.title("π Multi-Language Translator") |
| | st.markdown("Translate text instantly between multiple languages using open-source AI (Hugging Face Helsinki-NLP models).") |
| |
|
| | with st.form("translator_form"): |
| | col1, col2 = st.columns(2) |
| | with col1: |
| | src_lang_name = st.selectbox("Select Input Language", list(LANGUAGES.keys()), index=0) |
| | with col2: |
| | tgt_lang_name = st.selectbox("Select Output Language", list(LANGUAGES.keys()), index=1) |
| |
|
| | text_input = st.text_area("Enter text to translate:", height=150) |
| |
|
| | submit_btn = st.form_submit_button("Translate") |
| |
|
| | if submit_btn: |
| | if src_lang_name == tgt_lang_name: |
| | st.warning("Source and target languages are the same. Please choose different languages.") |
| | elif not text_input.strip(): |
| | st.warning("Please enter text to translate.") |
| | else: |
| | src_lang_code = LANGUAGES[src_lang_name] |
| | tgt_lang_code = LANGUAGES[tgt_lang_name] |
| | try: |
| | tokenizer, model = load_model_and_tokenizer(src_lang_code, tgt_lang_code) |
| | output = translate(text_input, tokenizer, model) |
| | st.success("β
Translation Completed:") |
| | st.text_area("Translated Text:", value=output, height=150) |
| | except Exception as e: |
| | st.error(f"Error: Could not load model for {src_lang_code} to {tgt_lang_code}.") |
| | st.exception(e) |
| |
|