Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from transformers import MarianMTModel, MarianTokenizer | |
| # Set page configuration | |
| st.set_page_config(page_title="AI Translator", page_icon="π", layout="centered") | |
| # Custom styling | |
| st.markdown( | |
| """ | |
| <style> | |
| body { | |
| background-color: #f4f4f4; | |
| } | |
| .stTextArea textarea { | |
| font-size: 18px; | |
| height: 150px !important; | |
| } | |
| .stSelectbox, .stButton button { | |
| font-size: 18px; | |
| } | |
| .footer { | |
| text-align: center; | |
| margin-top: 20px; | |
| font-size: 14px; | |
| color: gray; | |
| } | |
| </style> | |
| """, | |
| unsafe_allow_html=True, | |
| ) | |
| # Language pairs (including Urdu & Arabic) | |
| language_pairs = { | |
| "English β Arabic": ("en", "ar"), | |
| "Arabic β English": ("ar", "en"), | |
| "English β Urdu": ("en", "ur"), | |
| "Urdu β English": ("ur", "en"), | |
| "Urdu β Arabic": ("ur", "ar"), | |
| "Arabic β Urdu": ("ar", "ur"), | |
| "English β French": ("en", "fr"), | |
| "French β English": ("fr", "en"), | |
| "English β Spanish": ("en", "es"), | |
| "Spanish β English": ("es", "en"), | |
| "English β German": ("en", "de"), | |
| "German β English": ("de", "en"), | |
| "English β Italian": ("en", "it"), | |
| "Italian β English": ("it", "en"), | |
| "English β Dutch": ("en", "nl"), | |
| "Dutch β English": ("nl", "en"), | |
| "English β Russian": ("en", "ru"), | |
| "Russian β English": ("ru", "en"), | |
| "English β Chinese": ("en", "zh"), | |
| "Chinese β English": ("zh", "en"), | |
| "English β Hindi": ("en", "hi"), | |
| "Hindi β English": ("hi", "en"), | |
| } | |
| # Load model (cached for performance) | |
| def load_model(src_lang, tgt_lang): | |
| model_name = f"Helsinki-NLP/opus-mt-{src_lang}-{tgt_lang}" | |
| try: | |
| tokenizer = MarianTokenizer.from_pretrained(model_name) | |
| model = MarianMTModel.from_pretrained(model_name) | |
| return tokenizer, model | |
| except Exception as e: | |
| st.error(f"β Model {model_name} not found. Try another language pair.") | |
| return None, None | |
| # Translation function | |
| def translate_text(text, tokenizer, model): | |
| if not text: | |
| return "" | |
| inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) | |
| translated = model.generate(**inputs) | |
| return tokenizer.decode(translated[0], skip_special_tokens=True) | |
| # UI Design | |
| st.title("π AI-Powered Translator") | |
| st.subheader("Translate text instantly with open-source AI models.") | |
| # Language selection | |
| selected_pair = st.selectbox("π Select Language Pair:", list(language_pairs.keys())) | |
| src_lang, tgt_lang = language_pairs[selected_pair] | |
| # Load the translation model | |
| tokenizer, model = load_model(src_lang, tgt_lang) | |
| # Input text | |
| text_input = st.text_area("βοΈ Enter text to translate:", "") | |
| # Translate button | |
| if st.button("π Translate Now"): | |
| if text_input and tokenizer and model: | |
| translated_text = translate_text(text_input, tokenizer, model) | |
| st.subheader("β Translated Text:") | |
| st.success(translated_text) | |
| else: | |
| st.warning("β οΈ Please enter text to translate.") | |
| # Footer | |
| st.markdown('<p class="footer">π Made with β€οΈ using Helsinki-NLP models</p>', unsafe_allow_html=True) | |