File size: 2,242 Bytes
5d069a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import streamlit as st

# Set page config FIRST
st.set_page_config(page_title="Translation App", page_icon="🌎")

from transformers import MarianMTModel, MarianTokenizer

# Language-specific model names
MODEL_MAPPING = {
    "French": "Helsinki-NLP/opus-mt-en-fr",
    "German": "Helsinki-NLP/opus-mt-en-de",
    "Spanish": "Helsinki-NLP/opus-mt-en-es",
    "Italian": "Helsinki-NLP/opus-mt-en-it",
    "Chinese": "Helsinki-NLP/opus-mt-en-zh",
    "Arabic": "Helsinki-NLP/opus-mt-en-ar",
    "Hindi": "Helsinki-NLP/opus-mt-en-hi",
    "Urdu": "Helsinki-NLP/opus-mt-en-ur",
    "Russian": "Helsinki-NLP/opus-mt-en-ru",
    "Japanese": "Helsinki-NLP/opus-mt-en-ja",
}

@st.cache_resource
def load_model(model_name):
    tokenizer = MarianTokenizer.from_pretrained(model_name)
    model = MarianMTModel.from_pretrained(model_name)
    return tokenizer, model

# Streamlit app UI
st.title("🌎 Multilingual Translation Application")

st.write("Enter your question or information below and select target languages:")

# Input text
input_text = st.text_area("Your Question or Information", height=150)

# Language selection
selected_languages = st.multiselect("Select languages to translate into", list(MODEL_MAPPING.keys()))

# Translate button
if st.button("Translate"):
    if not input_text:
        st.warning("Please enter some text to translate.")
    elif not selected_languages:
        st.warning("Please select at least one language.")
    else:
        for lang in selected_languages:
            model_name = MODEL_MAPPING.get(lang)
            if model_name:
                try:
                    # Load model for selected language
                    tokenizer, model = load_model(model_name)
                    # Perform translation
                    translated = model.generate(**tokenizer(input_text, return_tensors="pt", padding=True))
                    output_text = tokenizer.decode(translated[0], skip_special_tokens=True)

                    st.subheader(f"Translation in {lang}:")
                    st.success(output_text)
                except Exception as e:
                    st.error(f"Error translating to {lang}: {str(e)}")
            else:
                st.error(f"No model available for {lang}")