package linguistics import ( lingua "github.com/pemistahl/lingua-go" "strings" ) // LinguaLanguageDetector implements LanguageDetector using lingua-go type LinguaLanguageDetector struct { detector lingua.LanguageDetector } // NewLinguaLanguageDetector builds a detector for all supported languages func NewLinguaLanguageDetector() LanguageDetector { det := lingua.NewLanguageDetectorBuilder().FromAllLanguages().Build() return &LinguaLanguageDetector{detector: det} } // DetectLanguage returns a lowercase ISO 639-1 code if possible func (l *LinguaLanguageDetector) DetectLanguage(text string) (string, error) { lang, ok := l.detector.DetectLanguageOf(text) if !ok { return "", nil // Or an error if you prefer } // Prefer ISO 639-1 when available else fallback to ISO 639-3 if s := lang.IsoCode639_1().String(); s != "" { return s, nil } if s := lang.IsoCode639_3().String(); s != "" { return s, nil } // fallback to language name return strings.ToLower(lang.String()), nil }