D-Jaden02 commited on
Commit
9bc7af0
Β·
verified Β·
1 Parent(s): 694a67d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -67
app.py CHANGED
@@ -1,75 +1,102 @@
1
- import gradio as gr
 
2
  from deep_translator import GoogleTranslator
3
 
 
 
 
4
  LANGUAGES = {
5
- "Hindi": "hi",
6
- "Tamil": "ta",
7
- "Malayalam": "ml",
8
- "Telugu": "te",
9
- "Bengali": "bn",
10
- "Kannada": "kn",
11
  }
12
 
13
- def translate_text(text: str, target_language: str) -> str:
14
- if not text.strip():
15
- return "⚠️ Please enter some text to translate."
16
- lang_code = LANGUAGES.get(target_language)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  if not lang_code:
18
- return "⚠️ Unsupported language selected."
 
 
 
 
19
  try:
20
- translated = GoogleTranslator(source="en", target=lang_code).translate(text)
21
- return translated
 
 
 
 
 
22
  except Exception as e:
23
- return f"❌ Translation error: {str(e)}"
24
-
25
-
26
- with gr.Blocks(
27
- title="English β†’ Indian Languages Translator",
28
- theme=gr.themes.Soft(primary_hue="indigo"),
29
- css="""
30
- .container { max-width: 860px; margin: auto; }
31
- .lang-btn { font-size: 1rem !important; min-width: 110px !important; }
32
- #title { text-align: center; margin-bottom: 8px; }
33
- #subtitle { text-align: center; color: #6b7280; margin-bottom: 24px; }
34
- """,
35
- ) as demo:
36
- gr.Markdown("# 🌐 English β†’ Indian Languages Translator", elem_id="title")
37
- gr.Markdown("Translate English text into Tamil, Malayalam, Telugu, Bengali, or Kannada instantly.", elem_id="subtitle")
38
-
39
- with gr.Row():
40
- with gr.Column(scale=1):
41
- input_text = gr.Textbox(
42
- label="English Text",
43
- placeholder="Type or paste English text here...",
44
- lines=8,
45
- max_lines=20,
46
- )
47
- with gr.Column(scale=1):
48
- output_text = gr.Textbox(
49
- label="Translated Text",
50
- lines=8,
51
- interactive=False,
52
- show_copy_button=True,
53
- )
54
-
55
- gr.Markdown("### Select Target Language")
56
-
57
- with gr.Row(elem_classes="container"):
58
- for lang in LANGUAGES:
59
- btn = gr.Button(lang, elem_classes="lang-btn", variant="secondary")
60
- btn.click(
61
- fn=translate_text,
62
- inputs=[input_text, gr.State(lang)],
63
- outputs=output_text,
64
- )
65
-
66
- with gr.Row():
67
- clear_btn = gr.Button("πŸ—‘οΈ Clear", variant="stop")
68
- clear_btn.click(fn=lambda: ("", ""), outputs=[input_text, output_text])
69
-
70
- gr.Markdown(
71
- "<center><sub>Powered by deep-translator Β· Google Translate API</sub></center>"
72
- )
73
-
74
- if __name__ == "__main__":
75
- demo.launch()
 
1
+ from flask import Flask, request, jsonify
2
+ from flask_cors import CORS
3
  from deep_translator import GoogleTranslator
4
 
5
+ app = Flask(__name__)
6
+ CORS(app)
7
+
8
  LANGUAGES = {
9
+ "hindi": "hi",
10
+ "tamil": "ta",
11
+ "malayalam": "ml",
12
+ "telugu": "te",
13
+ "bengali": "bn",
14
+ "kannada": "kn",
15
  }
16
 
17
+
18
+ def get_lang_code(target_language: str):
19
+ """Return the language code or None if unsupported."""
20
+ return LANGUAGES.get(target_language.lower().strip())
21
+
22
+
23
+ # ── Single translation ────────────────────────────────────────────────────────
24
+
25
+ @app.route('/translate', methods=['POST'])
26
+ def translate():
27
+ data = request.get_json()
28
+ text = data.get('text', '').strip()
29
+ target_language = data.get('target_language', '').strip()
30
+
31
+ if not text:
32
+ return jsonify({'error': 'No text provided'}), 400
33
+
34
+ lang_code = get_lang_code(target_language)
35
  if not lang_code:
36
+ return jsonify({
37
+ 'error': f'Unsupported language "{target_language}". '
38
+ f'Choose from: {", ".join(LANGUAGES.keys())}'
39
+ }), 400
40
+
41
  try:
42
+ translated = GoogleTranslator(source='en', target=lang_code).translate(text)
43
+ return jsonify({
44
+ 'original_text': text,
45
+ 'translated_text': translated,
46
+ 'target_language': target_language.lower(),
47
+ 'lang_code': lang_code,
48
+ })
49
  except Exception as e:
50
+ return jsonify({'error': str(e)}), 500
51
+
52
+
53
+ # ── Batch translation ─────────────────────────────────────────────────────────
54
+
55
+ @app.route('/batch_translate', methods=['POST'])
56
+ def batch_translate():
57
+ data = request.get_json()
58
+ texts = data.get('texts', [])
59
+ target_language = data.get('target_language', '').strip()
60
+
61
+ if not texts:
62
+ return jsonify({'error': 'No texts provided'}), 400
63
+
64
+ lang_code = get_lang_code(target_language)
65
+ if not lang_code:
66
+ return jsonify({
67
+ 'error': f'Unsupported language "{target_language}". '
68
+ f'Choose from: {", ".join(LANGUAGES.keys())}'
69
+ }), 400
70
+
71
+ translator = GoogleTranslator(source='en', target=lang_code)
72
+ results = []
73
+
74
+ for text in texts:
75
+ try:
76
+ translated = translator.translate(text.strip())
77
+ results.append({'original_text': text, 'translated_text': translated})
78
+ except Exception as e:
79
+ results.append({'original_text': text, 'error': str(e)})
80
+
81
+ return jsonify({
82
+ 'target_language': target_language.lower(),
83
+ 'lang_code': lang_code,
84
+ 'results': results,
85
+ })
86
+
87
+
88
+ # ── Supported languages list ──────────────────────────────────────────────────
89
+
90
+ @app.route('/languages', methods=['GET'])
91
+ def languages():
92
+ """Returns all supported languages β€” useful for populating buttons in the frontend."""
93
+ return jsonify({
94
+ 'languages': [
95
+ {'name': name, 'code': code}
96
+ for name, code in LANGUAGES.items()
97
+ ]
98
+ })
99
+
100
+
101
+ if __name__ == '__main__':
102
+ app.run(host='0.0.0.0', port=7860)