File size: 3,812 Bytes
3025fb2
 
 
 
d285d14
3025fb2
d285d14
3025fb2
 
d285d14
3025fb2
 
 
 
 
 
 
 
 
 
d285d14
3025fb2
 
 
 
 
 
 
 
 
 
 
d285d14
3025fb2
 
 
 
 
 
 
d285d14
3025fb2
 
 
 
 
 
d285d14
 
 
 
3025fb2
 
d285d14
3025fb2
 
 
 
d285d14
3025fb2
 
 
 
d285d14
3025fb2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d285d14
3025fb2
 
d285d14
3025fb2
 
d285d14
3025fb2
 
 
 
d285d14
3025fb2
 
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
94
95
96
97
98
99
100
101
102
103
104
105
import torch
import gradio as gr
import json
import datetime
from transformers import pipeline

# Load model
text_translator = pipeline("translation", model="facebook/nllb-200-distilled-600M", torch_dtype=torch.bfloat16)

# Load language list
try:
    with open("Files/languages.json", "r", encoding="utf-8") as file:
        data = json.load(file)
except FileNotFoundError:
    print("File 'languages.json' not found.")
    data = []
except json.JSONDecodeError:
    print("Failed to decode JSON file.")
    data = []

# Get FLORES codes
def FLORES_code(source_language, target_language):
    src_code = tgt_code = None
    for entry in data:
        if entry["Language"].lower() == (source_language or "").lower():
            src_code = entry["FLORES-200 code"]
        if entry["Language"].lower() == (target_language or "").lower():
            tgt_code = entry["FLORES-200 code"]
    if src_code and tgt_code:
        return src_code, tgt_code
    return "Language not found in the dataset.", None

# Translate function
def translate_text(text, source_language, target_language):
    src_code, target_code = FLORES_code(source_language, target_language)
    if src_code == "Language not found in the dataset." or not src_code or not target_code:
        return "Language not found in the dataset."
    translation = text_translator(text, src_lang=src_code, tgt_lang=target_code)
    return translation[0]["translation_text"]

# Save translation to file
def save_translation(text):
    filename = f"translation_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
    with open(filename, "w", encoding="utf-8") as f:
        f.write(text)
    return filename

# Clear all fields
def clear_fields():
    return "", None, None, ""

gr.close_all()

# Interface
with gr.Blocks() as demo:
    gr.Markdown("# ๐ŸŒ Multilingual Translator")
    gr.Markdown("## Translate text between multiple languages.")

    # Line height sliders
    with gr.Row():
        input_len_slider = gr.Slider(minimum=1, maximum=50, value=5, label="Input Textbox Height (Lines)")
        output_len_slider = gr.Slider(minimum=1, maximum=50, value=5, label="Output Textbox Height (Lines)")

    # Main translation row
    with gr.Row():
        with gr.Column(scale=1):
            src_dropdown = gr.Dropdown(
                label="Select Source Language",
                choices=[entry["Language"] for entry in data],
                value=None
            )
            tgt_dropdown = gr.Dropdown(
                label="Select Destination Language",
                choices=[entry["Language"] for entry in data],
                value=None
            )
            translate_btn = gr.Button("๐ŸŒ Translate", scale=0)

        with gr.Column(scale=3):
            text_input = gr.Textbox(
                label="Input Text",
                lines=5,
                placeholder="Enter text to translate..."
            )
            output_box = gr.Textbox(
                label="Translated Text",
                lines=5,
                placeholder="Translation will appear here..."
            )

    # Action buttons
    with gr.Row():
        save_btn = gr.Button("๐Ÿ’พ Save Translation")
        clear_btn = gr.Button("๐Ÿงน Clear All")
        file_output = gr.File(label="Download File")

    # Function bindings
    translate_btn.click(translate_text, inputs=[text_input, src_dropdown, tgt_dropdown], outputs=output_box)
    input_len_slider.change(lambda n: gr.update(lines=n), inputs=input_len_slider, outputs=text_input)
    output_len_slider.change(lambda n: gr.update(lines=n), inputs=output_len_slider, outputs=output_box)
    save_btn.click(save_translation, inputs=output_box, outputs=file_output)
    clear_btn.click(clear_fields, outputs=[text_input, src_dropdown, tgt_dropdown, output_box])

demo.launch()