Cossale's picture
Rename translate.py to app.py
70e8eaa verified
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()