13hbeltran commited on
Commit
696ad11
·
verified ·
1 Parent(s): 5491147

Upload 2 files

Browse files
Files changed (2) hide show
  1. requirements.txt +4 -0
  2. translate_app.py +131 -0
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ gradio
2
+ transformers
3
+ torch
4
+ sentencepiece
translate_app.py ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tkinter as tk
2
+ from tkinter import ttk
3
+ from transformers import pipeline
4
+
5
+ class TranslateApp:
6
+ def __init__(self, root):
7
+ self.root = root
8
+ self.root.title("Short Translation")
9
+ self.root.geometry("700x300")
10
+ self.root.configure(bg="#f0f0f0")
11
+
12
+ # Define Colors
13
+ self.maroon = "#800000"
14
+ self.white = "#ffffff"
15
+
16
+ # Initialize Translation Models (pipeline parameters)
17
+ self.models = {
18
+ "Spanish": ["translation_en_to_es",
19
+ "Helsinki-NLP/opus-mt-en-es"],
20
+ "German": ["translation_en_to_de",
21
+ "Helsinki-NLP/opus-mt-en-de"],
22
+ "Japanese": ["translation_en_to_ja",
23
+ "staka/fugumt-en-ja"],
24
+ "Ukrainian": ["translation_en_to_uk",
25
+ "Helsinki-NLP/opus-mt-en-uk"],
26
+ "Russian": ["translation_en_to_ru",
27
+ "Helsinki-NLP/opus-mt-en-ru"],
28
+ }
29
+
30
+ # Cache for loaded pipeline objects
31
+ # This is done to speed up translations after the first.
32
+ self.cached_pipelines = {}
33
+
34
+ # --- Top Section ---
35
+ top_frame = tk.Frame(self.root, bg="#f0f0f0")
36
+ top_frame.pack(side=tk.TOP, fill=tk.X, padx=10, pady=10)
37
+
38
+ # Left Column: Input and Buttons
39
+ left_column = tk.Frame(top_frame, bg="#f0f0f0", borderwidth=2, relief="groove")
40
+ left_column.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=(0, 5))
41
+
42
+ tk.Label(left_column, text="English Sentence", fg=self.maroon,
43
+ bg="#f0f0f0", font=("Arial", 12, "bold")).pack(anchor="w", padx=5)
44
+
45
+ self.input_entry = tk.Entry(left_column, font=("Arial", 12))
46
+ self.input_entry.pack(fill=tk.X, padx=10, pady=5)
47
+
48
+ button_frame = tk.Frame(left_column, bg="#f0f0f0")
49
+ button_frame.pack(pady=5)
50
+
51
+ self.translate_btn = tk.Button(button_frame, text="Translate",
52
+ fg=self.maroon, bg=self.white,
53
+ command=self.translate_text, width=15)
54
+ self.translate_btn.pack(side=tk.LEFT, padx=5)
55
+
56
+ self.clear_btn = tk.Button(button_frame, text="Clear", fg=self.maroon,
57
+ bg=self.white,
58
+ command=self.clear_fields, width=15)
59
+ self.clear_btn.pack(side=tk.LEFT, padx=5)
60
+
61
+ # Right Column: Language Selection
62
+ right_column = tk.Frame(top_frame, bg="#f0f0f0", borderwidth=2,
63
+ relief="groove")
64
+ right_column.pack(side=tk.RIGHT, fill=tk.Y, padx=(5, 0))
65
+
66
+ tk.Label(right_column, text="Translation Language", fg=self.maroon,
67
+ bg="#f0f0f0", font=("Arial", 12, "bold")).pack(anchor="w", padx=5)
68
+
69
+ self.lang_var = tk.StringVar(value="Spanish")
70
+ languages = [("Spanish", "es"), ("German", "de"), ("Japanese", "ja"),
71
+ ("Ukrainian", "uk"), ("Russian", "ru")]
72
+
73
+ for lang_text, lang_code in languages:
74
+ tk.Radiobutton(right_column, text=lang_text,
75
+ font=("Arial", 12, "bold"),
76
+ variable=self.lang_var, value=lang_text,
77
+ fg=self.maroon, bg="#f0f0f0", highlightthickness=0,
78
+ activeforeground=self.maroon).pack(anchor="w", padx=30)
79
+
80
+ # --- Bottom Section: Output Area ---
81
+ self.output_frame = tk.Frame(self.root, bg=self.maroon, height=120)
82
+ self.output_frame.pack(side=tk.TOP, fill=tk.X, padx=10, pady=(0, 10))
83
+ self.output_frame.pack_propagate(False) # Maintain fixed height
84
+
85
+ self.output_label = tk.Label(self.output_frame, text="", fg=self.white,
86
+ bg=self.maroon,
87
+ font=("Times New Roman", 16, "bold"),
88
+ wraplength=650, justify="center")
89
+ self.output_label.pack(expand=True, fill=tk.BOTH)
90
+
91
+ def translate_text(self):
92
+ input_text = self.input_entry.get().strip()
93
+ target_lang = self.lang_var.get()
94
+
95
+ if not input_text:
96
+ self.output_label.config(text="Please enter text to translate.")
97
+ return
98
+
99
+ # Check if we need to load the model
100
+ if target_lang not in self.cached_pipelines:
101
+ self.output_label.config(text=f"Loading model for {target_lang}...")
102
+ self.root.update_idletasks()
103
+
104
+ try:
105
+ task, model_name = self.models[target_lang]
106
+ self.cached_pipelines[target_lang] = pipeline(task, model=model_name)
107
+ except Exception as e:
108
+ self.output_label.config(text=f"Error loading model: {str(e)}")
109
+ return
110
+
111
+ self.output_label.config(text=f"Translating to {target_lang}...")
112
+ self.root.update_idletasks()
113
+
114
+ try:
115
+ translator = self.cached_pipelines[target_lang]
116
+ result = translator(input_text)
117
+ translated_text = result[0]['translation_text']
118
+
119
+ print(f"DEBUG: {target_lang} output -> {translated_text}")
120
+ self.output_label.config(text=translated_text)
121
+ except Exception as e:
122
+ self.output_label.config(text=f"Error: {str(e)}")
123
+
124
+ def clear_fields(self):
125
+ self.input_entry.delete(0, tk.END)
126
+ self.output_label.config(text="")
127
+
128
+ if __name__ == "__main__":
129
+ root = tk.Tk()
130
+ app = TranslateApp(root)
131
+ root.mainloop()