File size: 902 Bytes
2d0ef3b
50231a8
 
 
2d0ef3b
 
50231a8
 
2d0ef3b
50231a8
 
2d0ef3b
 
 
 
 
 
 
 
50231a8
 
2d0ef3b
50231a8
 
 
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
from langdetect import DetectorFactory, LangDetectException, detect

from app.core.exceptions import LanguageDetectionError

# Ensure deterministic language detection outcomes across runs.
DetectorFactory.seed = 0


class LanguageService:
    def detect_language(self, text: str) -> str:
        try:
            language = detect(text)
        except LangDetectException as exc:
            raise LanguageDetectionError("Language detection failed") from exc
        except Exception as exc:
            raise LanguageDetectionError("Language detector raised an unexpected error") from exc

        normalized_language = language.split("-", 1)[0].strip().lower() if isinstance(language, str) else ""
        if not normalized_language:
            raise LanguageDetectionError("Language detector did not return a valid label")

        return normalized_language


language_service = LanguageService()