Spaces:
Sleeping
Sleeping
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()
|