Download app/services/language.py from nvikou/ReplyFlow: direct link, hf CLI and curl.
- Browser
- Download file 1.42 kB
-
https://huggingface.co/spaces/nvikou/ReplyFlow/resolve/main/app/services/language.py
- Command line
-
hf download hf://spaces/nvikou/ReplyFlow/app/services/language.py
-
curl -L -o language.py https://huggingface.co/spaces/nvikou/ReplyFlow/resolve/main/app/services/language.py
1.42 kB
| """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" | |