File size: 2,625 Bytes
de06668
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import gradio as gr
from transformers import pipeline

# Language codes and names (only ISO 639-1 supported by Helsinki models)
languages = {
    "en": "English",
    "fr": "French",
    "de": "German",
    "es": "Spanish",
    "it": "Italian",
    "ru": "Russian",
    "zh": "Chinese",
    "ja": "Japanese",
    "ko": "Korean",
    "ar": "Arabic",
    "hi": "Hindi",
    "te": "Telugu",
    "ta": "Tamil",
    "bn": "Bengali",
    "ur": "Urdu",
    "ml": "Malayalam",
    "gu": "Gujarati",
    "mr": "Marathi",
    "pa": "Punjabi",
    "sw": "Swahili",
    "tr": "Turkish",
    "fa": "Persian",
    "pt": "Portuguese",
    "pl": "Polish",
    "uk": "Ukrainian",
    "nl": "Dutch",
    "sv": "Swedish",
    "no": "Norwegian",
    "fi": "Finnish",
    "cs": "Czech",
    "el": "Greek",
    "ro": "Romanian",
    "hu": "Hungarian",
    "vi": "Vietnamese",
    "th": "Thai",
    "id": "Indonesian",
    "ms": "Malay",
    "he": "Hebrew",
    "bg": "Bulgarian",
    "sr": "Serbian",
    "hr": "Croatian",
    "sk": "Slovak",
    "da": "Danish",
    "et": "Estonian",
    "lt": "Lithuanian",
    "lv": "Latvian",
    "sl": "Slovenian",
    "mt": "Maltese"
}

# Reverse mapping from full name to code
name_to_code = {v: k for k, v in languages.items()}

# Define the function to translate

def translate_text(text, source_lang_name, target_lang_name):
    if source_lang_name == target_lang_name:
        return text

    source_lang = name_to_code[source_lang_name]
    target_lang = name_to_code[target_lang_name]

    if source_lang == "en" and target_lang == "te":
        model_name = "Helsinki-NLP/opus-mt-en-dra"
    else:
        model_name = f"Helsinki-NLP/opus-mt-{source_lang}-{target_lang}"

    try:
        trans_pipeline = pipeline("translation", model=model_name)
        translation = trans_pipeline(text, max_length=400)[0]['translation_text']
        return translation
    except Exception as e:
        return f"Error loading model for {source_lang} to {target_lang}: {str(e)}"

# Gradio Interface
with gr.Blocks() as demo:
    gr.Markdown("# 🌐 Multi-language Translation App")
    input_text = gr.Textbox(label="Enter Text", lines=4)
    source_lang = gr.Dropdown(label="Source Language", choices=list(languages.values()), value="English")
    target_lang = gr.Dropdown(label="Target Language", choices=list(languages.values()), value="Telugu")
    output_text = gr.Textbox(label="Translated Text")

    translate_button = gr.Button("Translate")
    translate_button.click(fn=translate_text, inputs=[input_text, source_lang, target_lang], outputs=output_text)

if __name__ == "__main__":
    demo.launch()