From 3a757c4015bbdef77981ed98a4b1e8feaad3bbb7 Mon Sep 17 00:00:00 2001 From: Nandini Goyal Date: Fri, 1 Aug 2025 20:36:19 +0530 Subject: [PATCH 1/4] Added multilingual support and debugged chat disappearing issue --- TalkHeal.py | 40 +++++++++++++++++++++++++++++++++--- components/chat_interface.py | 33 ++++++++++++++++++++++++++++- components/sidebar.py | 9 ++++++++ 3 files changed, 78 insertions(+), 4 deletions(-) diff --git a/TalkHeal.py b/TalkHeal.py index 02ba9ea..d0644f0 100644 --- a/TalkHeal.py +++ b/TalkHeal.py @@ -19,6 +19,30 @@ from components.emergency_page import render_emergency_page from components.profile import apply_global_font_size +# ------------- ADDED FOR CHATBOT LANGUAGE --------------- +from googletrans import Translator + +lang_map = { + "English": "en", + "Hindi": "hi", + "Bengali": "bn", + "Gujarati": "gu", + "Tamil": "ta", + "Telugu": "te", + "Marathi": "mr", + "Punjabi": "pa" +} +translator = Translator() + +def translate_chatbot_reply(text): + lang = st.session_state.get("language", "English") + if lang != "English": + try: + return translator.translate(text, dest=lang_map[lang]).text + except Exception: + return text + return text +# ------------------------------------------------------- # --- 1. INITIALIZE SESSION STATE --- if "chat_history" not in st.session_state: @@ -40,16 +64,17 @@ ] if "selected_tone" not in st.session_state: st.session_state.selected_tone = "Compassionate Listener" +if "language" not in st.session_state: + st.session_state.language = "English" # --- 2. SET PAGE CONFIG --- apply_global_font_size() - # --- 3. APPLY STYLES & CONFIGURATIONS --- apply_custom_css() model = configure_gemini() -# --- 4. TONE SELECTION DROPDOWN IN SIDEBAR --- +# --- 4. TONE & LANGUAGE SELECTION DROPDOWN IN SIDEBAR --- TONE_OPTIONS = { "Compassionate Listener": "You are a compassionate listener — soft, empathetic, patient — like a therapist who listens without judgment.", "Motivating Coach": "You are a motivating coach — energetic, encouraging, and action-focused — helping the user push through rough days.", @@ -67,6 +92,15 @@ ) st.session_state.selected_tone = selected_tone + # ------------- LANGUAGE DROPDOWN ADDED HERE ------------- + st.header("🌐 Chatbot Reply Language") + st.session_state.language = st.selectbox( + "Choose reply language for chatbot:", + ["English", "Hindi", "Bengali", "Gujarati", "Tamil", "Telugu", "Marathi", "Punjabi"], + index=0 + ) + # -------------------------------------------------------- + # --- 5. DEFINE FUNCTION TO GET TONE PROMPT --- def get_tone_prompt(): return TONE_OPTIONS.get(st.session_state.get("selected_tone", "Compassionate Listener"), TONE_OPTIONS["Compassionate Listener"]) @@ -114,4 +148,4 @@ def get_tone_prompt(): } setTimeout(scrollToBottom, 100); -""", unsafe_allow_html=True) \ No newline at end of file +""", unsafe_allow_html=True) diff --git a/components/chat_interface.py b/components/chat_interface.py index 874a329..85de0ef 100644 --- a/components/chat_interface.py +++ b/components/chat_interface.py @@ -4,6 +4,33 @@ from core.utils import get_current_time, get_ai_response, save_conversations import requests +# ---- Translation Code Directly Here ---- +from googletrans import Translator + +lang_map = { + "English": "en", + "Hindi": "hi", + "Bengali": "bn", + "Gujarati": "gu", + "Tamil": "ta", + "Telugu": "te", + "Marathi": "mr", + "Punjabi": "pa" +} +translator = Translator() + +def translate_chatbot_reply(text): + lang = st.session_state.get("language", "English") + if lang != "English": + try: + translated = translator.translate(text, dest=lang_map[lang]).text + return translated + except Exception as e: + print(f"Translation error: {e}") + return text + return text +# ----------------------------------------- + # Inject JS to get user's local time zone def set_user_time_in_session(): if "user_time_offset" not in st.session_state: @@ -112,9 +139,13 @@ def format_memory(convo_history, max_turns=10): prompt = f"{system_prompt}\n\n{memory}\nUser: {user_input.strip()}\nBot:" ai_response = get_ai_response(prompt, model) + # --------------- TRANSLATE THE BOT REPLY --------------- + ai_response_translated = translate_chatbot_reply(ai_response) + # ------------------------------------------------------- + active_convo["messages"].append({ "sender": "bot", - "message": ai_response, + "message": ai_response_translated, "time": get_current_time() }) diff --git a/components/sidebar.py b/components/sidebar.py index 5c0bafe..66cf87d 100644 --- a/components/sidebar.py +++ b/components/sidebar.py @@ -76,6 +76,15 @@ def render_sidebar(): """Renders the left and right sidebars.""" + + with st.sidebar: + st.header("🌐 Chatbot Reply Language") + st.session_state.language = st.selectbox( + "Choose reply language for chatbot:", + ["English", "Hindi", "Bengali", "Gujarati", "Tamil", "Telugu", "Marathi", "Punjabi"], + index=0 + ) + with st.sidebar: render_profile_section() From e71a9f2cc1bc1f757e8ed34f19075ac0044a717f Mon Sep 17 00:00:00 2001 From: Nandini Goyal Date: Fri, 1 Aug 2025 20:48:05 +0530 Subject: [PATCH 2/4] Add googletrans to requirements.txt for Streamlit Cloud --- requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7a85788..f709f70 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,5 @@ google-generativeai geopy requests Pillow -streamlit-lottie \ No newline at end of file +streamlit-lottie +googletrans==4.0.0-rc1 From 6ab963a286f56757dae6911d2c9daf71924e771e Mon Sep 17 00:00:00 2001 From: Nandini Goyal Date: Fri, 1 Aug 2025 20:55:28 +0530 Subject: [PATCH 3/4] Switch to deep-translator for translation (fixes cgi error) --- components/chat_interface.py | 9 ++++----- requirements.txt | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/components/chat_interface.py b/components/chat_interface.py index 85de0ef..c55972f 100644 --- a/components/chat_interface.py +++ b/components/chat_interface.py @@ -5,7 +5,7 @@ import requests # ---- Translation Code Directly Here ---- -from googletrans import Translator +from deep_translator import GoogleTranslator lang_map = { "English": "en", @@ -17,18 +17,17 @@ "Marathi": "mr", "Punjabi": "pa" } -translator = Translator() def translate_chatbot_reply(text): lang = st.session_state.get("language", "English") if lang != "English": try: - translated = translator.translate(text, dest=lang_map[lang]).text - return translated + return GoogleTranslator(source="auto", target=lang_map[lang]).translate(text) except Exception as e: - print(f"Translation error: {e}") + print("Translation error:", e) return text return text + # ----------------------------------------- # Inject JS to get user's local time zone diff --git a/requirements.txt b/requirements.txt index f709f70..2987619 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,5 @@ geopy requests Pillow streamlit-lottie -googletrans==4.0.0-rc1 +deep-translator + From d4d707cb5add91416d58b7cc7c6a939f0844dfe7 Mon Sep 17 00:00:00 2001 From: Nandini Goyal Date: Fri, 1 Aug 2025 20:56:33 +0530 Subject: [PATCH 4/4] Remove googletrans completely and switch to deep-translator --- TalkHeal.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/TalkHeal.py b/TalkHeal.py index d0644f0..a9f839c 100644 --- a/TalkHeal.py +++ b/TalkHeal.py @@ -20,7 +20,8 @@ from components.profile import apply_global_font_size # ------------- ADDED FOR CHATBOT LANGUAGE --------------- -from googletrans import Translator +from deep_translator import GoogleTranslator + lang_map = { "English": "en", @@ -32,13 +33,13 @@ "Marathi": "mr", "Punjabi": "pa" } -translator = Translator() + def translate_chatbot_reply(text): lang = st.session_state.get("language", "English") if lang != "English": try: - return translator.translate(text, dest=lang_map[lang]).text + return GoogleTranslator.translate(text, dest=lang_map[lang]).text except Exception: return text return text