ReplyFlow / app /services /language.py
nvikou's picture
Initial commit
582520a verified
Raw History Blame Contribute Delete
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"