NitinBot001 commited on
Commit
2c63f8e
·
verified ·
1 Parent(s): 592ac37

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +85 -13
app.py CHANGED
@@ -42,25 +42,79 @@ Response Rules:
42
  app = Flask(__name__, template_folder="templates", static_folder="static")
43
  CORS(app)
44
 
45
- # Translation function with auto language detection
46
- def translate_text(text, target_lang, source_lang='auto'):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  """
48
  Translate text to desired language using Microsoft Translator
49
 
50
  Args:
51
  text (str): Text to translate
52
  target_lang (str): Target language code (e.g., 'es', 'fr', 'de', 'hi', 'zh')
53
- source_lang (str): Source language code (default: 'auto' for auto-detection)
54
 
55
  Returns:
56
  str: Translated text or original text if translation fails
57
  """
58
  try:
59
- # Skip translation if target language is English and text appears to be in English
60
  if target_lang.lower() == 'en':
61
  return text
 
 
 
 
 
 
 
 
62
 
63
- # Create translator instance
64
  translator = Translator(to_lang=target_lang, from_lang=source_lang)
65
  translated = translator.translate(text)
66
 
@@ -72,7 +126,15 @@ def translate_text(text, target_lang, source_lang='auto'):
72
 
73
  except Exception as e:
74
  print(f"Translation error: {str(e)}")
75
- return text # Return original text if translation fails
 
 
 
 
 
 
 
 
76
 
77
  # Language code mapping for common languages
78
  LANGUAGE_CODES = {
@@ -129,11 +191,17 @@ def chat():
129
  processed_message = user_message
130
  if target_lang != "en":
131
  try:
132
- # Try to translate user message to English for better AI understanding
133
- english_translator = Translator(to_lang='en', from_lang='auto')
134
- processed_message = english_translator.translate(user_message)
135
- if not processed_message or not processed_message.strip():
136
- processed_message = user_message # Fallback to original
 
 
 
 
 
 
137
  except Exception as e:
138
  print(f"User message translation error: {str(e)}")
139
  processed_message = user_message # Use original message
@@ -180,7 +248,7 @@ def translate_endpoint():
180
  data = request.get_json()
181
  text = data.get("text")
182
  target_lang = data.get("target_lang", "en")
183
- source_lang = data.get("source_lang", "auto")
184
 
185
  if not text:
186
  return jsonify({"error": "Text is required"}), 400
@@ -189,13 +257,17 @@ def translate_endpoint():
189
  target_lang = target_lang.lower()
190
  if target_lang in LANGUAGE_CODES:
191
  target_lang = LANGUAGE_CODES[target_lang]
 
 
 
 
192
 
193
  translated = translate_text(text, target_lang, source_lang)
194
 
195
  return jsonify({
196
  "original_text": text,
197
  "translated_text": translated,
198
- "source_lang": source_lang,
199
  "target_lang": target_lang
200
  })
201
 
 
42
  app = Flask(__name__, template_folder="templates", static_folder="static")
43
  CORS(app)
44
 
45
+ # Language detection function
46
+ def detect_language(text):
47
+ """
48
+ Detect language of text using multiple methods
49
+ """
50
+ try:
51
+ # Method 1: Try langdetect if available
52
+ try:
53
+ from langdetect import detect
54
+ detected = detect(text)
55
+ return detected
56
+ except ImportError:
57
+ pass
58
+ except:
59
+ pass
60
+
61
+ # Method 2: Simple heuristic detection
62
+ common_words = {
63
+ 'en': ['the', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for', 'of', 'with', 'by', 'is', 'are', 'was', 'were'],
64
+ 'es': ['el', 'la', 'de', 'que', 'y', 'en', 'un', 'es', 'se', 'no', 'te', 'lo', 'por', 'con', 'del', 'las'],
65
+ 'fr': ['le', 'de', 'et', 'à', 'un', 'il', 'être', 'en', 'avoir', 'que', 'pour', 'du', 'ce', 'son', 'une'],
66
+ 'de': ['der', 'die', 'und', 'in', 'den', 'von', 'zu', 'das', 'mit', 'sich', 'des', 'auf', 'für', 'ist'],
67
+ 'it': ['il', 'di', 'che', 'e', 'la', 'per', 'in', 'un', 'è', 'con', 'non', 'da', 'del', 'sono'],
68
+ 'pt': ['de', 'a', 'o', 'que', 'e', 'do', 'da', 'em', 'um', 'para', 'é', 'com', 'os', 'uma', 'ser'],
69
+ 'ru': ['в', 'и', 'не', 'на', 'я', 'быть', 'с', 'а', 'как', 'его', 'к', 'он', 'что', 'то'],
70
+ 'hi': ['है', 'का', 'के', 'में', 'और', 'को', 'से', 'पर', 'यह', 'वह', 'एक', 'जो'],
71
+ 'ar': ['في', 'من', 'إلى', 'على', 'هذا', 'هذه', 'التي', 'الذي', 'أن', 'كان', 'مع'],
72
+ 'zh': ['的', '是', '在', '了', '和', '有', '人', '我', '你', '他', '她', '它'],
73
+ }
74
+
75
+ text_lower = text.lower()
76
+ scores = {}
77
+
78
+ for lang, words in common_words.items():
79
+ score = sum(1 for word in words if word in text_lower)
80
+ if score > 0:
81
+ scores[lang] = score / len(words) # Normalize by word count
82
+
83
+ if scores:
84
+ return max(scores, key=scores.get)
85
+
86
+ return 'en' # Default to English if detection fails
87
+
88
+ except Exception:
89
+ return 'en' # Default to English
90
+
91
+ # Translation function with proper language detection
92
+ def translate_text(text, target_lang, source_lang=None):
93
  """
94
  Translate text to desired language using Microsoft Translator
95
 
96
  Args:
97
  text (str): Text to translate
98
  target_lang (str): Target language code (e.g., 'es', 'fr', 'de', 'hi', 'zh')
99
+ source_lang (str): Source language code (if None, will auto-detect)
100
 
101
  Returns:
102
  str: Translated text or original text if translation fails
103
  """
104
  try:
105
+ # Skip translation if target language is English and source appears to be English
106
  if target_lang.lower() == 'en':
107
  return text
108
+
109
+ # Detect source language if not provided
110
+ if source_lang is None or source_lang == 'auto':
111
+ source_lang = detect_language(text)
112
+
113
+ # Skip translation if source and target are the same
114
+ if source_lang.lower() == target_lang.lower():
115
+ return text
116
 
117
+ # Create translator instance with detected/specified source language
118
  translator = Translator(to_lang=target_lang, from_lang=source_lang)
119
  translated = translator.translate(text)
120
 
 
126
 
127
  except Exception as e:
128
  print(f"Translation error: {str(e)}")
129
+ # Try fallback translation with English as source
130
+ try:
131
+ fallback_translator = Translator(to_lang=target_lang, from_lang='en')
132
+ fallback_result = fallback_translator.translate(text)
133
+ if fallback_result and fallback_result.strip():
134
+ return fallback_result
135
+ except:
136
+ pass
137
+ return text # Return original text if all translation attempts fail
138
 
139
  # Language code mapping for common languages
140
  LANGUAGE_CODES = {
 
191
  processed_message = user_message
192
  if target_lang != "en":
193
  try:
194
+ # Detect source language of user message
195
+ detected_source = detect_language(user_message)
196
+ print(f"Detected user language: {detected_source}")
197
+
198
+ # Translate to English only if source is not English
199
+ if detected_source != 'en':
200
+ english_translator = Translator(to_lang='en', from_lang=detected_source)
201
+ processed_message = english_translator.translate(user_message)
202
+ if not processed_message or not processed_message.strip():
203
+ processed_message = user_message # Fallback to original
204
+ print(f"Translated user message to English: {processed_message}")
205
  except Exception as e:
206
  print(f"User message translation error: {str(e)}")
207
  processed_message = user_message # Use original message
 
248
  data = request.get_json()
249
  text = data.get("text")
250
  target_lang = data.get("target_lang", "en")
251
+ source_lang = data.get("source_lang") # Remove default 'auto'
252
 
253
  if not text:
254
  return jsonify({"error": "Text is required"}), 400
 
257
  target_lang = target_lang.lower()
258
  if target_lang in LANGUAGE_CODES:
259
  target_lang = LANGUAGE_CODES[target_lang]
260
+
261
+ # Auto-detect source language if not provided
262
+ if not source_lang or source_lang.lower() == 'auto':
263
+ source_lang = detect_language(text)
264
 
265
  translated = translate_text(text, target_lang, source_lang)
266
 
267
  return jsonify({
268
  "original_text": text,
269
  "translated_text": translated,
270
+ "detected_source_lang": source_lang,
271
  "target_lang": target_lang
272
  })
273