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] } switch { case strings.HasPrefix(normalized, "zh"): return model.DefaultLanguageID case strings.HasPrefix(normalized, "en"): return model.EnglishLanguageID default: return model.EnglishLanguageID } }