File size: 1,682 Bytes
7d13edc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from transformers import pipeline
from langdetect import detect

# Load translation pipeline (you can change to another model)
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-mul-en")  # English as target

# Supported languages and their model codes
language_models = {
    "en": "Helsinki-NLP/opus-mt-en-ROMANCE",
    "fr": "Helsinki-NLP/opus-mt-ROMANCE-en",
    "de": "Helsinki-NLP/opus-mt-de-en",
    "es": "Helsinki-NLP/opus-mt-es-en",
    "hi": "Helsinki-NLP/opus-mt-hi-en",
    "ta": "Helsinki-NLP/opus-mt-ta-en"
}

def translate_file(file_obj, target_lang):
    text = file_obj.read().decode("utf-8")
    source_lang = detect(text)
    
    # Load appropriate model based on target language
    if target_lang == source_lang:
        return "Source and target languages are the same. No translation needed."
    
    model_name = None
    for k, v in language_models.items():
        if target_lang == k:
            model_name = v
            break
    
    if not model_name:
        return f"Unsupported target language: {target_lang}"

    model = pipeline("translation", model=model_name)
    translated = model(text, max_length=1000)[0]['translation_text']
    return f"Detected source: {source_lang.upper()} → Translated to: {target_lang.upper()}\n\n{translated}"

gr.Interface(
    fn=translate_file,
    inputs=[
        gr.File(label="Upload Text File (.txt)"),
        gr.Dropdown(choices=list(language_models.keys()), label="Target Language (Code)"),
    ],
    outputs="text",
    title="Multilingual File Translator",
    description="Upload a .txt file in any language. Choose a target language to translate."
).launch()