Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import pipeline | |
from langdetect import detect | |
# Title of the app | |
st.title("Language Translator App") | |
# Available translation models | |
MODELS = { | |
"English to German": "Helsinki-NLP/opus-mt-en-de", | |
"German to English": "Helsinki-NLP/opus-mt-de-en", | |
"English to French": "Helsinki-NLP/opus-mt-en-fr", | |
"French to English": "Helsinki-NLP/opus-mt-fr-en", | |
"English to Spanish": "Helsinki-NLP/opus-mt-en-es", | |
"Spanish to English": "Helsinki-NLP/opus-mt-es-en", | |
"English to Chinese": "Helsinki-NLP/opus-mt-en-zh", | |
"Chinese to English": "Helsinki-NLP/opus-mt-zh-en", | |
"English to Russian": "Helsinki-NLP/opus-mt-en-ru", | |
"Russian to English": "Helsinki-NLP/opus-mt-ru-en", | |
"English to Arabic": "Helsinki-NLP/opus-mt-en-ar", | |
"Arabic to English": "Helsinki-NLP/opus-mt-ar-en", | |
"English to Hindi": "Helsinki-NLP/opus-mt-en-hi", | |
"Hindi to English": "Helsinki-NLP/opus-mt-hi-en", | |
} | |
# Sidebar for model selection | |
st.sidebar.header("Settings") | |
translation_direction = st.sidebar.selectbox( | |
"Choose translation direction", | |
list(MODELS.keys()) | |
) | |
# Load the translation pipeline | |
def load_translator(model_name): | |
return pipeline("translation", model=model_name) | |
translator = load_translator(MODELS[translation_direction]) | |
# Input text area | |
st.header("Enter Text to Translate") | |
input_text = st.text_area("Input Text", "Hello, how are you?") | |
# Detect language | |
if input_text.strip() != "": | |
try: | |
detected_lang = detect(input_text) | |
st.subheader("Detected Language") | |
st.write(f"The detected language is: **{detected_lang}**") | |
except Exception as e: | |
st.error(f"Language detection failed: {e}") | |
# Translate button | |
if st.button("Translate"): | |
if input_text.strip() == "": | |
st.warning("Please enter some text to translate.") | |
else: | |
with st.spinner("Translating..."): | |
try: | |
translation = translator(input_text) | |
translated_text = translation[0]['translation_text'] | |
st.success("Translation Complete!") | |
st.subheader("Translated Text") | |
st.write(translated_text) | |
except Exception as e: | |
st.error(f"Translation failed: {e}") |