diff --git a/sys/env.go b/sys/env.go index a5ddabb..e30c860 100644 --- a/sys/env.go +++ b/sys/env.go @@ -6,6 +6,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "strconv" "strings" @@ -184,6 +185,9 @@ func CheckOsExtInfo(OssE OSSoftExtObj, Log *zerolog.Logger) OSSoftExtObj { if OssE.Resolution == "" { OssE.Resolution = "unknown" } + if OssE.Lang == "" { + OssE.Lang, _ = GetLocale() + } if OssE.Lang == "" { userLanguage, err := jibber_jabber.DetectLanguage() if err != nil { @@ -196,3 +200,45 @@ func CheckOsExtInfo(OssE OSSoftExtObj, Log *zerolog.Logger) OSSoftExtObj { } return OssE } + +// GetLocale get lang and locale from sys +func GetLocale() (string, string) { + osHost := runtime.GOOS + defaultLang := "en" + defaultLoc := "US" + switch osHost { + case "windows": + // Exec powershell Get-Culture on Windows. + cmd := exec.Command("powershell", "Get-Culture | select -exp Name") + output, err := cmd.Output() + if err == nil { + langLocRaw := strings.TrimSpace(string(output)) + langLoc := strings.Split(langLocRaw, "-") + lang := langLoc[0] + loc := langLoc[1] + return lang, loc + } + case "darwin": + // Exec powershell Get-Culture on Windows. + cmd := exec.Command("sh", "osascript -e 'user locale of (get system info)'") + output, err := cmd.Output() + if err == nil { + langLocRaw := strings.TrimSpace(string(output)) + langLoc := strings.Split(langLocRaw, "_") + lang := langLoc[0] + loc := langLoc[1] + return lang, loc + } + case "linux": + envlang, ok := os.LookupEnv("LANG") + if ok { + langLocRaw := strings.TrimSpace(envlang) + langLocRaw = strings.Split(envlang, ".")[0] + langLoc := strings.Split(langLocRaw, "_") + lang := langLoc[0] + loc := langLoc[1] + return lang, loc + } + } + return defaultLang, defaultLoc +}