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