Spaces:
Sleeping
Sleeping
File size: 4,496 Bytes
15cd303 |
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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
import gradio as gr
import requests
import json
# Language mapping from the provided data
LANGUAGE_KEY_TEXT = {
"as": "Assamese - অসমীয়া",
"bn": "Bangla - বাংলা",
"brx": "Boro - बड़ो",
"gu": "Gujarati - ગુજરાતી",
"hi": "Hindi - हिंदी",
"kn": "Kannada - ಕನ್ನಡ",
"ml": "Malayalam - മലയാളം",
"mni": "Manipuri - মিতৈলোন",
"mr": "Marathi - मराठी",
"or": "Odia - ଓଡ଼ିଆ",
"raj": "Rajasthani - राजस्थानी",
"ta": "Tamil - தமிழ்",
"te": "Telugu - తెలుగు",
"pa": "Panjabi - ਪੰਜਾਬੀ",
"sa": "Sanskrit - संस्कृतम्",
"ur": "Urdu - اُردُو",
"en": "English - English",
"ne": "Nepali - नेपाली",
"si": "Sinhala - සිංහල",
}
def translate_text(text, source_lang, target_lang):
if not text:
return ""
url = "https://demo-api.models.ai4bharat.org/inference/translation/v2"
headers = {
'Content-Type': 'application/json',
'Accept': '*/*',
}
payload = {
"controlConfig": {
"dataTracking": True
},
"input": [{"source": text}],
"config": {
"serviceId": "",
"language": {
"sourceLanguage": source_lang,
"targetLanguage": target_lang,
"targetScriptCode": None,
"sourceScriptCode": None
}
}
}
try:
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
result = response.json()
return result['output'][0]['target']
except Exception as e:
return f"Error: {str(e)}"
def copy_to_clipboard(text):
return text
def create_interface():
with gr.Blocks(css="footer {display: none !important}") as interface:
gr.Markdown(
"""
# AI4Bharat Translation
Translate text between multiple Indian languages and English
"""
)
with gr.Row():
with gr.Column():
source_lang = gr.Dropdown(
choices=list(LANGUAGE_KEY_TEXT.keys()),
value="en",
label="Source Language"
)
source_text = gr.TextArea(
label="Source Text",
placeholder="Enter text to translate...",
lines=5
)
with gr.Column():
target_lang = gr.Dropdown(
choices=list(LANGUAGE_KEY_TEXT.keys()),
value="hi",
label="Target Language"
)
translated_text = gr.TextArea(
label="Translated Text",
lines=5,
interactive=False
)
with gr.Row():
translate_btn = gr.Button("Translate")
copy_btn = gr.Button("📋 Copy Translation")
clear_btn = gr.Button("🗑️ Clear")
# Swap language button
swap_btn = gr.Button("🔄 Swap Languages")
def swap_languages(src_lang, tgt_lang, src_text, tgt_text):
return tgt_lang, src_lang, tgt_text, src_text
def clear_fields():
return "", ""
# Event handlers
translate_btn.click(
fn=translate_text,
inputs=[source_text, source_lang, target_lang],
outputs=translated_text
)
swap_btn.click(
fn=swap_languages,
inputs=[source_lang, target_lang, source_text, translated_text],
outputs=[source_lang, target_lang, source_text, translated_text]
)
clear_btn.click(
fn=clear_fields,
inputs=[],
outputs=[source_text, translated_text]
)
# Add copy button functionality
copy_btn.click(
fn=copy_to_clipboard,
inputs=[translated_text],
outputs=[translated_text],
js="async (text) => { await navigator.clipboard.writeText(text); return text; }"
)
return interface
# Launch the interface
if __name__ == "__main__":
demo = create_interface()
demo.launch()
|