package language
|
|
import (
|
"voicesnap/internal/config"
|
"voicesnap/internal/model"
|
)
|
|
type LanguageOption struct {
|
ID string `json:"id"`
|
DisplayName string `json:"displayName"`
|
NativeName string `json:"nativeName"`
|
UILocale string `json:"uiLocale"`
|
}
|
|
type LanguageSettings struct {
|
LanguageMode string `json:"languageMode"`
|
LanguageID string `json:"languageID"`
|
EffectiveLanguageID string `json:"effectiveLanguageID"`
|
UILocale string `json:"uiLocale"`
|
DefaultModelID string `json:"defaultModelID"`
|
Options []LanguageOption `json:"options"`
|
}
|
|
func Resolve(languageMode, languageID string, detector SystemLocaleDetector) LanguageSettings {
|
mode := config.NormalizeLanguageMode(languageMode)
|
configuredID := model.NormalizeLanguageID(languageID)
|
effectiveID := configuredID
|
if mode == config.LanguageModeAuto {
|
detected := ""
|
if detector != nil {
|
detected = detector.Detect()
|
}
|
effectiveID = NormalizeLocale(detected)
|
}
|
profile, err := model.GetLanguageProfile(effectiveID)
|
if err != nil {
|
profile, _ = model.GetLanguageProfile(model.DefaultLanguageID)
|
effectiveID = model.DefaultLanguageID
|
}
|
return LanguageSettings{
|
LanguageMode: mode,
|
LanguageID: configuredID,
|
EffectiveLanguageID: effectiveID,
|
UILocale: profile.UILocale,
|
DefaultModelID: profile.DefaultModelID,
|
Options: languageOptions(),
|
}
|
}
|
|
func languageOptions() []LanguageOption {
|
profiles := model.ListLanguageProfiles()
|
options := make([]LanguageOption, 0, len(profiles))
|
for _, profile := range profiles {
|
options = append(options, LanguageOption{
|
ID: profile.ID,
|
DisplayName: profile.DisplayName,
|
NativeName: profile.NativeName,
|
UILocale: profile.UILocale,
|
})
|
}
|
return options
|
}
|