Spaces:
Runtime error
Runtime error
| """ | |
| Multilingual Support Example | |
| Demonstrates automatic language detection and bilingual responses | |
| """ | |
| from i18n import Language, detect_language, t, get_multilingual_handler, Translations | |
| def test_language_detection(): | |
| """Test automatic language detection""" | |
| print("=" * 60) | |
| print("LANGUAGE DETECTION TEST") | |
| print("=" * 60) | |
| test_cases = [ | |
| ("Tôi muốn giảm cân", Language.VIETNAMESE), | |
| ("I want to lose weight", Language.ENGLISH), | |
| ("Bạn có thể giúp tôi không?", Language.VIETNAMESE), | |
| ("Can you help me?", Language.ENGLISH), | |
| ("Tôi bị đau đầu", Language.VIETNAMESE), | |
| ("I have a headache", Language.ENGLISH), | |
| ("Làm sao để tăng cơ?", Language.VIETNAMESE), | |
| ("How to build muscle?", Language.ENGLISH), | |
| ] | |
| for text, expected in test_cases: | |
| detected = detect_language(text) | |
| status = "✅" if detected == expected else "❌" | |
| print(f"{status} '{text}' → {detected.value} (expected: {expected.value})") | |
| def test_translations(): | |
| """Test translation system""" | |
| print("\n" + "=" * 60) | |
| print("TRANSLATION TEST") | |
| print("=" * 60) | |
| keys = [ | |
| 'greeting', | |
| 'ask_age', | |
| 'ask_weight', | |
| 'bmi_normal', | |
| 'thank_you_feedback', | |
| 'error_occurred' | |
| ] | |
| print("\n🇻🇳 Vietnamese:") | |
| for key in keys: | |
| text = t(key, Language.VIETNAMESE) | |
| print(f" {key}: {text}") | |
| print("\n🇬🇧 English:") | |
| for key in keys: | |
| text = t(key, Language.ENGLISH) | |
| print(f" {key}: {text}") | |
| def test_agent_prompts(): | |
| """Test agent system prompts in both languages""" | |
| print("\n" + "=" * 60) | |
| print("AGENT PROMPTS TEST") | |
| print("=" * 60) | |
| agents = ['nutrition', 'exercise', 'symptom', 'mental_health'] | |
| for agent in agents: | |
| print(f"\n📋 {agent.upper()} Agent:") | |
| print("\n🇻🇳 Vietnamese:") | |
| prompt_vi = Translations.get_agent_prompt(agent, Language.VIETNAMESE) | |
| print(f" {prompt_vi[:100]}...") | |
| print("\n🇬🇧 English:") | |
| prompt_en = Translations.get_agent_prompt(agent, Language.ENGLISH) | |
| print(f" {prompt_en[:100]}...") | |
| def test_multilingual_handler(): | |
| """Test multilingual handler""" | |
| print("\n" + "=" * 60) | |
| print("MULTILINGUAL HANDLER TEST") | |
| print("=" * 60) | |
| handler = get_multilingual_handler() | |
| # Simulate users with different languages | |
| print("\n👤 User 1 (Vietnamese):") | |
| lang1 = handler.detect_and_set_language("user1", "Tôi muốn giảm cân") | |
| print(f" Detected: {lang1.value}") | |
| print(f" Greeting: {handler.translate_message('greeting', lang1)}") | |
| print("\n👤 User 2 (English):") | |
| lang2 = handler.detect_and_set_language("user2", "I want to lose weight") | |
| print(f" Detected: {lang2.value}") | |
| print(f" Greeting: {handler.translate_message('greeting', lang2)}") | |
| print("\n👤 User 3 (Vietnamese):") | |
| lang3 = handler.detect_and_set_language("user3", "Tôi bị đau đầu") | |
| print(f" Detected: {lang3.value}") | |
| print(f" Greeting: {handler.translate_message('greeting', lang3)}") | |
| # Get statistics | |
| print("\n📊 Language Statistics:") | |
| stats = handler.get_language_stats() | |
| print(f" Total users: {stats['total_users']}") | |
| print(f" Vietnamese: {stats['vietnamese_users']} ({stats['vietnamese_percentage']}%)") | |
| print(f" English: {stats['english_users']} ({stats['english_percentage']}%)") | |
| def test_conversation_flow(): | |
| """Test full conversation flow with language detection""" | |
| print("\n" + "=" * 60) | |
| print("CONVERSATION FLOW TEST") | |
| print("=" * 60) | |
| handler = get_multilingual_handler() | |
| # Vietnamese conversation | |
| print("\n🇻🇳 Vietnamese Conversation:") | |
| print("-" * 40) | |
| user_msg_vi = "Tôi muốn giảm cân" | |
| lang_vi = handler.detect_and_set_language("user_vi", user_msg_vi) | |
| print(f"User: {user_msg_vi}") | |
| print(f"Detected language: {lang_vi.value}") | |
| print(f"Bot: {handler.translate_message('greeting', lang_vi)}") | |
| print(f"Bot: {handler.translate_message('ask_age', lang_vi)}") | |
| # English conversation | |
| print("\n🇬🇧 English Conversation:") | |
| print("-" * 40) | |
| user_msg_en = "I want to lose weight" | |
| lang_en = handler.detect_and_set_language("user_en", user_msg_en) | |
| print(f"User: {user_msg_en}") | |
| print(f"Detected language: {lang_en.value}") | |
| print(f"Bot: {handler.translate_message('greeting', lang_en)}") | |
| print(f"Bot: {handler.translate_message('ask_age', lang_en)}") | |
| def test_mixed_language(): | |
| """Test handling of mixed language input""" | |
| print("\n" + "=" * 60) | |
| print("MIXED LANGUAGE TEST") | |
| print("=" * 60) | |
| handler = get_multilingual_handler() | |
| # User starts in Vietnamese | |
| print("\n👤 User starts in Vietnamese:") | |
| lang1 = handler.detect_and_set_language("user_mixed", "Tôi muốn giảm cân") | |
| print(f" Message: 'Tôi muốn giảm cân'") | |
| print(f" Detected: {lang1.value}") | |
| print(f" Response: {handler.translate_message('greeting', lang1)}") | |
| # User switches to English | |
| print("\n👤 User switches to English:") | |
| lang2 = handler.detect_and_set_language("user_mixed", "How many calories should I eat?") | |
| print(f" Message: 'How many calories should I eat?'") | |
| print(f" Detected: {lang2.value}") | |
| print(f" Response: {handler.translate_message('nutrition_advice', lang2)}") | |
| # User switches back to Vietnamese | |
| print("\n👤 User switches back to Vietnamese:") | |
| lang3 = handler.detect_and_set_language("user_mixed", "Cảm ơn bạn!") | |
| print(f" Message: 'Cảm ơn bạn!'") | |
| print(f" Detected: {lang3.value}") | |
| print(f" Response: {handler.translate_message('thank_you_feedback', lang3)}") | |
| def demo_real_world_usage(): | |
| """Demo real-world usage scenario""" | |
| print("\n" + "=" * 60) | |
| print("REAL-WORLD USAGE DEMO") | |
| print("=" * 60) | |
| handler = get_multilingual_handler() | |
| scenarios = [ | |
| { | |
| 'user_id': 'nguyen_van_a', | |
| 'messages': [ | |
| "Tôi 25 tuổi, 70kg, 175cm", | |
| "Tôi muốn giảm 5kg trong 2 tháng", | |
| "Tôi nên ăn bao nhiêu calo?" | |
| ] | |
| }, | |
| { | |
| 'user_id': 'john_smith', | |
| 'messages': [ | |
| "I'm 30 years old, 80kg, 180cm", | |
| "I want to build muscle", | |
| "What exercises should I do?" | |
| ] | |
| } | |
| ] | |
| for scenario in scenarios: | |
| user_id = scenario['user_id'] | |
| print(f"\n👤 User: {user_id}") | |
| print("-" * 40) | |
| for msg in scenario['messages']: | |
| lang = handler.detect_and_set_language(user_id, msg) | |
| print(f"\nUser ({lang.value}): {msg}") | |
| # Simulate bot response | |
| if "calo" in msg.lower() or "calories" in msg.lower(): | |
| response_key = 'nutrition_advice' | |
| elif "tập" in msg.lower() or "exercise" in msg.lower(): | |
| response_key = 'exercise_plan' | |
| else: | |
| response_key = 'greeting' | |
| response = handler.translate_message(response_key, lang) | |
| print(f"Bot ({lang.value}): {response}") | |
| if __name__ == '__main__': | |
| test_language_detection() | |
| test_translations() | |
| test_agent_prompts() | |
| test_multilingual_handler() | |
| test_conversation_flow() | |
| test_mixed_language() | |
| demo_real_world_usage() | |
| print("\n" + "=" * 60) | |
| print("✅ MULTILINGUAL SUPPORT DEMO COMPLETE!") | |
| print("=" * 60) | |
| print("\nKey Features:") | |
| print("✅ Automatic language detection (Vietnamese/English)") | |
| print("✅ Bilingual translations for all messages") | |
| print("✅ Language-specific agent prompts") | |
| print("✅ Seamless language switching") | |
| print("✅ User language preferences") | |
| print("✅ Language usage statistics") | |