my-gradio-app / i18n /translations.py
Nguyen Trong Lap
Recreate history without binary blobs
eeb0f9c
"""
Translation System
Provides translations for common messages and UI elements
"""
from typing import Dict, Any
from .language_detector import Language
class Translations:
"""Translation database for Vietnamese and English"""
# Common messages
MESSAGES = {
# Greetings
'greeting': {
Language.VIETNAMESE: 'Xin chào! Tôi là trợ lý sức khỏe của bạn. Tôi có thể giúp gì cho bạn?',
Language.ENGLISH: 'Hello! I am your health assistant. How can I help you?'
},
'how_can_help': {
Language.VIETNAMESE: 'Tôi có thể giúp gì cho bạn?',
Language.ENGLISH: 'How can I help you?'
},
# Profile questions
'ask_age': {
Language.VIETNAMESE: 'Bạn bao nhiêu tuổi?',
Language.ENGLISH: 'How old are you?'
},
'ask_gender': {
Language.VIETNAMESE: 'Bạn là nam hay nữ?',
Language.ENGLISH: 'What is your gender?'
},
'ask_weight': {
Language.VIETNAMESE: 'Cân nặng của bạn là bao nhiêu? (kg)',
Language.ENGLISH: 'What is your weight? (kg)'
},
'ask_height': {
Language.VIETNAMESE: 'Chiều cao của bạn là bao nhiêu? (cm)',
Language.ENGLISH: 'What is your height? (cm)'
},
# BMI categories
'bmi_underweight': {
Language.VIETNAMESE: 'Thiếu cân',
Language.ENGLISH: 'Underweight'
},
'bmi_normal': {
Language.VIETNAMESE: 'Bình thường',
Language.ENGLISH: 'Normal'
},
'bmi_overweight': {
Language.VIETNAMESE: 'Thừa cân',
Language.ENGLISH: 'Overweight'
},
'bmi_obese': {
Language.VIETNAMESE: 'Béo phì',
Language.ENGLISH: 'Obese'
},
# Feedback
'rate_response': {
Language.VIETNAMESE: 'Đánh giá câu trả lời này',
Language.ENGLISH: 'Rate this response'
},
'thank_you_feedback': {
Language.VIETNAMESE: 'Cảm ơn phản hồi của bạn!',
Language.ENGLISH: 'Thank you for your feedback!'
},
# Errors
'error_occurred': {
Language.VIETNAMESE: 'Xin lỗi, đã có lỗi xảy ra. Vui lòng thử lại.',
Language.ENGLISH: 'Sorry, an error occurred. Please try again.'
},
'invalid_input': {
Language.VIETNAMESE: 'Dữ liệu không hợp lệ. Vui lòng kiểm tra lại.',
Language.ENGLISH: 'Invalid input. Please check again.'
},
# Nutrition
'nutrition_advice': {
Language.VIETNAMESE: 'Tư vấn dinh dưỡng',
Language.ENGLISH: 'Nutrition advice'
},
'meal_plan': {
Language.VIETNAMESE: 'Thực đơn',
Language.ENGLISH: 'Meal plan'
},
'calories': {
Language.VIETNAMESE: 'Calo',
Language.ENGLISH: 'Calories'
},
'protein': {
Language.VIETNAMESE: 'Protein',
Language.ENGLISH: 'Protein'
},
# Exercise
'exercise_plan': {
Language.VIETNAMESE: 'Kế hoạch tập luyện',
Language.ENGLISH: 'Exercise plan'
},
'workout': {
Language.VIETNAMESE: 'Bài tập',
Language.ENGLISH: 'Workout'
},
'duration': {
Language.VIETNAMESE: 'Thời gian',
Language.ENGLISH: 'Duration'
},
# Symptoms
'symptoms': {
Language.VIETNAMESE: 'Triệu chứng',
Language.ENGLISH: 'Symptoms'
},
'severity': {
Language.VIETNAMESE: 'Mức độ',
Language.ENGLISH: 'Severity'
},
'seek_medical_attention': {
Language.VIETNAMESE: 'Bạn nên đến bệnh viện ngay',
Language.ENGLISH: 'You should seek medical attention immediately'
},
# Mental health
'mental_health': {
Language.VIETNAMESE: 'Sức khỏe tinh thần',
Language.ENGLISH: 'Mental health'
},
'stress_level': {
Language.VIETNAMESE: 'Mức độ căng thẳng',
Language.ENGLISH: 'Stress level'
},
'mood': {
Language.VIETNAMESE: 'Tâm trạng',
Language.ENGLISH: 'Mood'
},
# General
'yes': {
Language.VIETNAMESE: 'Có',
Language.ENGLISH: 'Yes'
},
'no': {
Language.VIETNAMESE: 'Không',
Language.ENGLISH: 'No'
},
'save': {
Language.VIETNAMESE: 'Lưu',
Language.ENGLISH: 'Save'
},
'cancel': {
Language.VIETNAMESE: 'Hủy',
Language.ENGLISH: 'Cancel'
},
'continue': {
Language.VIETNAMESE: 'Tiếp tục',
Language.ENGLISH: 'Continue'
},
'back': {
Language.VIETNAMESE: 'Quay lại',
Language.ENGLISH: 'Back'
}
}
# Agent prompts
AGENT_PROMPTS = {
'nutrition_system': {
Language.VIETNAMESE: """Bạn là chuyên gia dinh dưỡng chuyên nghiệp, thân thiện và am hiểu về ẩm thực Việt Nam.
Nhiệm vụ: Tư vấn dinh dưỡng, lập thực đơn, tính toán calo phù hợp với người Việt.
Phong cách: Thân thiện, dễ hiểu, khoa học, thực tế.""",
Language.ENGLISH: """You are a professional, friendly nutritionist with expertise in nutrition science.
Task: Provide nutrition advice, meal planning, and calorie calculations.
Style: Friendly, clear, scientific, practical."""
},
'exercise_system': {
Language.VIETNAMESE: """Bạn là huấn luyện viên thể hình chuyên nghiệp, nhiệt tình và có kinh nghiệm.
Nhiệm vụ: Tư vấn tập luyện, lập kế hoạch tập phù hợp với mọi trình độ.
Phong cách: Động viên, rõ ràng, an toàn, hiệu quả.""",
Language.ENGLISH: """You are a professional, enthusiastic fitness trainer with extensive experience.
Task: Provide exercise advice and create workout plans for all fitness levels.
Style: Motivating, clear, safe, effective."""
},
'symptom_system': {
Language.VIETNAMESE: """Bạn là trợ lý y tế thông minh, cẩn thận và có trách nhiệm.
Nhiệm vụ: Đánh giá triệu chứng, đưa ra khuyến nghị sơ bộ, hướng dẫn khi nào cần gặp bác sĩ.
Phong cách: Cẩn thận, rõ ràng, không chẩn đoán, luôn khuyến khích gặp bác sĩ khi cần.""",
Language.ENGLISH: """You are an intelligent, careful, and responsible medical assistant.
Task: Assess symptoms, provide preliminary recommendations, guide when to see a doctor.
Style: Careful, clear, non-diagnostic, always encourage seeing a doctor when needed."""
},
'mental_health_system': {
Language.VIETNAMESE: """Bạn là chuyên gia tâm lý thấu hiểu, ấm áp và hỗ trợ tích cực.
Nhiệm vụ: Lắng nghe, hỗ trợ tinh thần, đưa ra lời khuyên về sức khỏe tâm lý.
Phong cách: Thấu hiểu, ấm áp, không phán xét, khuyến khích tích cực.""",
Language.ENGLISH: """You are an understanding, warm, and supportive mental health expert.
Task: Listen, provide emotional support, offer mental health advice.
Style: Understanding, warm, non-judgmental, encouraging."""
}
}
@staticmethod
def get(key: str, language: Language, **kwargs) -> str:
"""
Get translation for a key
Args:
key: Translation key
language: Target language
**kwargs: Format arguments
Returns:
Translated text
"""
if key not in Translations.MESSAGES:
return key
text = Translations.MESSAGES[key].get(language, Translations.MESSAGES[key][Language.VIETNAMESE])
# Format if kwargs provided
if kwargs:
try:
text = text.format(**kwargs)
except KeyError:
pass
return text
@staticmethod
def get_agent_prompt(agent_type: str, language: Language) -> str:
"""
Get agent system prompt in specified language
Args:
agent_type: Type of agent (nutrition, exercise, etc.)
language: Target language
Returns:
System prompt
"""
key = f"{agent_type}_system"
if key not in Translations.AGENT_PROMPTS:
return ""
return Translations.AGENT_PROMPTS[key].get(language, Translations.AGENT_PROMPTS[key][Language.VIETNAMESE])
def t(key: str, language: Language = Language.VIETNAMESE, **kwargs) -> str:
"""
Convenience function for translation
Args:
key: Translation key
language: Target language
**kwargs: Format arguments
Returns:
Translated text
"""
return Translations.get(key, language, **kwargs)