package language import ( "os" "strings" "voicesnap/internal/model" ) type SystemLocaleDetector interface { Detect() string } type SystemDetector struct{} func NewSystemDetector() SystemDetector { return SystemDetector{} } func (SystemDetector) Detect() string { if locale := platformLocale(); strings.TrimSpace(locale) != "" { return locale } for _, key := range []string{"LC_ALL", "LC_MESSAGES", "LANG"} { if locale := os.Getenv(key); strings.TrimSpace(locale) != "" { return locale } } return "" } func NormalizeLocale(locale string) string { normalized := strings.ToLower(strings.TrimSpace(locale)) normalized = strings.ReplaceAll(normalized, "_", "-") if idx := strings.Index(normalized, "."); idx >= 0 { normalized = normalized[:idx] } for _, profile := range model.ListLanguageProfiles() { for _, matcher := range profile.SystemMatchers { m := strings.ToLower(strings.ReplaceAll(strings.TrimSpace(matcher), "_", "-")) if normalized == m || strings.HasPrefix(normalized, m+"-") { return profile.ID } } } return model.EnglishLanguageID }