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
|
}
|