"""Language detection helpers.""" from __future__ import annotations from langdetect import DetectorFactory, detect from langdetect.lang_detect_exception import ( LangDetectException, ) DetectorFactory.seed = 0 SUPPORTED = {"en", "fr", "ru"} _FALLBACK_HINTS = { "fr": ( "bonjour", "merci", "prix", "rendez-vous", "horaire", "livraison", "devis", ), "ru": ( "привет", "спасибо", "цена", "доставка", "запись", "стоимость", "здравствуйте", ), } def detect_language(text: str, default: str = "en") -> str: """Detect message language among en/fr/ru.""" cleaned = (text or "").strip() if not cleaned: return default lowered = cleaned.lower() for lang, hints in _FALLBACK_HINTS.items(): if any(h in lowered for h in hints): return lang try: code = detect(cleaned) except LangDetectException: return default if code.startswith("ru"): return "ru" if code.startswith("fr"): return "fr" if code.startswith("en"): return "en" return default def normalize_ui_language(code: str) -> str: """Clamp UI language to supported codes.""" value = (code or "en").lower()[:2] return value if value in SUPPORTED else "en"