Cossale commited on
Commit
15cd303
·
verified ·
1 Parent(s): 437bb38

Upload translate.py

Browse files
Files changed (1) hide show
  1. translate.py +147 -0
translate.py ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import requests
3
+ import json
4
+
5
+ # Language mapping from the provided data
6
+ LANGUAGE_KEY_TEXT = {
7
+ "as": "Assamese - অসমীয়া",
8
+ "bn": "Bangla - বাংলা",
9
+ "brx": "Boro - बड़ो",
10
+ "gu": "Gujarati - ગુજરાતી",
11
+ "hi": "Hindi - हिंदी",
12
+ "kn": "Kannada - ಕನ್ನಡ",
13
+ "ml": "Malayalam - മലയാളം",
14
+ "mni": "Manipuri - মিতৈলোন",
15
+ "mr": "Marathi - मराठी",
16
+ "or": "Odia - ଓଡ଼ିଆ",
17
+ "raj": "Rajasthani - राजस्थानी",
18
+ "ta": "Tamil - தமிழ்",
19
+ "te": "Telugu - తెలుగు",
20
+ "pa": "Panjabi - ਪੰਜਾਬੀ",
21
+ "sa": "Sanskrit - संस्कृतम्",
22
+ "ur": "Urdu - اُردُو",
23
+ "en": "English - English",
24
+ "ne": "Nepali - नेपाली",
25
+ "si": "Sinhala - සිංහල",
26
+ }
27
+
28
+ def translate_text(text, source_lang, target_lang):
29
+ if not text:
30
+ return ""
31
+
32
+ url = "https://demo-api.models.ai4bharat.org/inference/translation/v2"
33
+
34
+ headers = {
35
+ 'Content-Type': 'application/json',
36
+ 'Accept': '*/*',
37
+ }
38
+
39
+ payload = {
40
+ "controlConfig": {
41
+ "dataTracking": True
42
+ },
43
+ "input": [{"source": text}],
44
+ "config": {
45
+ "serviceId": "",
46
+ "language": {
47
+ "sourceLanguage": source_lang,
48
+ "targetLanguage": target_lang,
49
+ "targetScriptCode": None,
50
+ "sourceScriptCode": None
51
+ }
52
+ }
53
+ }
54
+
55
+ try:
56
+ response = requests.post(url, headers=headers, json=payload)
57
+ response.raise_for_status()
58
+ result = response.json()
59
+ return result['output'][0]['target']
60
+ except Exception as e:
61
+ return f"Error: {str(e)}"
62
+
63
+ def copy_to_clipboard(text):
64
+ return text
65
+
66
+ def create_interface():
67
+ with gr.Blocks(css="footer {display: none !important}") as interface:
68
+ gr.Markdown(
69
+ """
70
+ # AI4Bharat Translation
71
+ Translate text between multiple Indian languages and English
72
+ """
73
+ )
74
+
75
+ with gr.Row():
76
+ with gr.Column():
77
+ source_lang = gr.Dropdown(
78
+ choices=list(LANGUAGE_KEY_TEXT.keys()),
79
+ value="en",
80
+ label="Source Language"
81
+ )
82
+ source_text = gr.TextArea(
83
+ label="Source Text",
84
+ placeholder="Enter text to translate...",
85
+ lines=5
86
+ )
87
+
88
+ with gr.Column():
89
+ target_lang = gr.Dropdown(
90
+ choices=list(LANGUAGE_KEY_TEXT.keys()),
91
+ value="hi",
92
+ label="Target Language"
93
+ )
94
+ translated_text = gr.TextArea(
95
+ label="Translated Text",
96
+ lines=5,
97
+ interactive=False
98
+ )
99
+
100
+ with gr.Row():
101
+ translate_btn = gr.Button("Translate")
102
+ copy_btn = gr.Button("📋 Copy Translation")
103
+ clear_btn = gr.Button("🗑️ Clear")
104
+
105
+ # Swap language button
106
+ swap_btn = gr.Button("🔄 Swap Languages")
107
+
108
+ def swap_languages(src_lang, tgt_lang, src_text, tgt_text):
109
+ return tgt_lang, src_lang, tgt_text, src_text
110
+
111
+ def clear_fields():
112
+ return "", ""
113
+
114
+ # Event handlers
115
+ translate_btn.click(
116
+ fn=translate_text,
117
+ inputs=[source_text, source_lang, target_lang],
118
+ outputs=translated_text
119
+ )
120
+
121
+ swap_btn.click(
122
+ fn=swap_languages,
123
+ inputs=[source_lang, target_lang, source_text, translated_text],
124
+ outputs=[source_lang, target_lang, source_text, translated_text]
125
+ )
126
+
127
+ clear_btn.click(
128
+ fn=clear_fields,
129
+ inputs=[],
130
+ outputs=[source_text, translated_text]
131
+ )
132
+
133
+ # Add copy button functionality
134
+ copy_btn.click(
135
+ fn=copy_to_clipboard,
136
+ inputs=[translated_text],
137
+ outputs=[translated_text],
138
+ js="async (text) => { await navigator.clipboard.writeText(text); return text; }"
139
+ )
140
+
141
+ return interface
142
+
143
+ # Launch the interface
144
+ if __name__ == "__main__":
145
+ demo = create_interface()
146
+ demo.launch()
147
+