File size: 4,536 Bytes
eeb0f9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
"""
Multilingual Handler
Handles language detection and response translation
"""

from typing import Optional, Dict, Any
from .language_detector import Language, LanguageDetector
from .translations import Translations, t


class MultilingualHandler:
    """Handle multilingual conversations"""
    
    def __init__(self):
        self.detector = LanguageDetector()
        self.user_languages = {}  # user_id -> preferred language
    
    def detect_and_set_language(self, user_id: str, message: str) -> Language:
        """
        Detect language from message and set user preference
        
        Args:
            user_id: User identifier
            message: User's message
            
        Returns:
            Detected language
        """
        language = self.detector.detect(message)
        self.user_languages[user_id] = language
        return language
    
    def get_user_language(self, user_id: str) -> Language:
        """
        Get user's preferred language
        
        Args:
            user_id: User identifier
            
        Returns:
            User's language (default: Vietnamese)
        """
        return self.user_languages.get(user_id, Language.VIETNAMESE)
    
    def set_user_language(self, user_id: str, language: Language) -> None:
        """
        Manually set user's language
        
        Args:
            user_id: User identifier
            language: Preferred language
        """
        self.user_languages[user_id] = language
    
    def get_agent_system_prompt(self, agent_type: str, language: Language) -> str:
        """
        Get agent system prompt in user's language
        
        Args:
            agent_type: Type of agent
            language: Target language
            
        Returns:
            System prompt
        """
        return Translations.get_agent_prompt(agent_type, language)
    
    def translate_message(self, key: str, language: Language, **kwargs) -> str:
        """
        Translate a message key
        
        Args:
            key: Translation key
            language: Target language
            **kwargs: Format arguments
            
        Returns:
            Translated message
        """
        return t(key, language, **kwargs)
    
    def format_response_with_language(
        self,
        response: str,
        language: Language,
        add_language_note: bool = False
    ) -> str:
        """
        Format response with language-specific additions
        
        Args:
            response: Original response
            language: Target language
            add_language_note: Add note about language detection
            
        Returns:
            Formatted response
        """
        if add_language_note:
            if language == Language.ENGLISH:
                note = "\n\n_Note: I detected you're using English. You can switch to Vietnamese anytime._"
            else:
                note = "\n\n_Lưu ý: Tôi phát hiện bạn đang dùng tiếng Việt. Bạn có thể chuyển sang tiếng Anh bất cứ lúc nào._"
            
            return response + note
        
        return response
    
    def get_language_stats(self) -> Dict[str, Any]:
        """
        Get statistics about language usage
        
        Returns:
            Language statistics
        """
        total_users = len(self.user_languages)
        
        if total_users == 0:
            return {
                'total_users': 0,
                'vietnamese_users': 0,
                'english_users': 0,
                'vietnamese_percentage': 0.0,
                'english_percentage': 0.0
            }
        
        vietnamese_count = sum(1 for lang in self.user_languages.values() if lang == Language.VIETNAMESE)
        english_count = sum(1 for lang in self.user_languages.values() if lang == Language.ENGLISH)
        
        return {
            'total_users': total_users,
            'vietnamese_users': vietnamese_count,
            'english_users': english_count,
            'vietnamese_percentage': round(vietnamese_count / total_users * 100, 1),
            'english_percentage': round(english_count / total_users * 100, 1)
        }


# Global instance
_multilingual_handler = None

def get_multilingual_handler() -> MultilingualHandler:
    """Get global multilingual handler instance"""
    global _multilingual_handler
    if _multilingual_handler is None:
        _multilingual_handler = MultilingualHandler()
    return _multilingual_handler