有一个获取用户系统语言的功能,但我在Go网站上的任何地方都找不到。
为澄清我的问题,我想要当前用户的系统语言,这意味着,例如,当系统上的所有内容都为荷兰语时,我想获取“ dutch”或“ nl”
注意:该程序可以在linux,mac和Windows上运行
答案 0 :(得分:2)
在类似Unix的系统(Mac OS,Linux)上,您可以使用os软件包通过LookupEnv获取环境变量。因此,例如,您可以使用以下方式获取系统语言/编码:
s, ok := os.LookupEnv("LANG")
println(s, err)
=> en_US.UTF-8 true
golang.org博客上也可能有您感兴趣的博客文章(有关更多信息,请在了解系统语言设置后选择语言):
https://blog.golang.org/matchlang
在Windows上,如果上述方法不起作用,您也许可以使用此软件包从注册表中获取语言(我先尝试os.LookupEnv)。
答案 1 :(得分:2)
有一个很好的跨平台库,名为
jibber_jabber
它会在Unix系统中查找extension UIImage {
// Crops an input image (self) to a specified rect
func cropToRect(rect: CGRect!) -> UIImage? {
// Correct rect size based on the device screen scale
let scaledRect = CGRectMake(rect.origin.x * self.scale, rect.origin.y * self.scale, rect.size.width * self.scale, rect.size.height * self.scale);
// New CGImage reference based on the input image (self) and the specified rect
let imageRef = CGImageCreateWithImageInRect(self.CGImage, scaledRect);
// Gets an UIImage from the CGImage
let result = UIImage(CGImage: imageRef, scale: self.scale, orientation: self.imageOrientation)
// Returns the final image, or NULL on error
return result;
}
}
// Crops an image to 100x100 pixels, 150px from left and 200px from top
let exampleImage = UIImage(named: "yourImageFile")
let croppedImage = exampleImage?.cropToRect(CGRectMake(150.0, 200.0, 100.0, 100.0))
if croppedImage != nil {
// Your image was cropped
} else {
// Something went wrong
}
或$LC_ALL
env变量,对于Windows,会加载 Kernel32 并调用诸如$LANG
或GetUserDefaultLocaleName
之类的过程内。
对于Windows,所有操作均在
getWindowsLocale()
功能。
请注意,Windows OS内核内置了Kernel32库。
顺便说一句,如果您需要转换语言环境格式的语言字符串,例如GetSystemDefaultLocaleName
和en_US
,则可以利用
x/text/language和x/text/language/display
软件包以获得该语言的完全限定名称。
fr_FR
答案 2 :(得分:1)
一种方法是依次尝试以下策略:
LANG
环境变量并使用该值(在UNIX系统上很常见)。Get-Culture
"Name" property。例如:
func main() {
locale, err := GetLocale()
fmt.Printf("OK: locale=%q, err=%v\n", locale, err)
// OK: locale="en-US", err=nil
}
func GetLocale() (string, error) {
// Check the LANG environment variable, common on UNIX.
// XXX: we can easily override as a nice feature/bug.
envlang, ok := os.LookupEnv("LANG")
if ok {
return strings.Split(envlang, ".")[0], nil
}
// Exec powershell Get-Culture on Windows.
cmd := exec.Command("powershell", "Get-Culture | select -exp Name")
output, err := cmd.Output()
if err == nil {
return strings.Trim(string(output), "\r\n"), nil
}
return "", fmt.Errorf("cannot determine locale")
}
按此顺序执行这些操作很方便,因为它使您可以轻松更改语言环境(例如,进行测试),并且可以在UNIX和Windows操作系统上使用。
答案 3 :(得分:0)
我也改进了@maerics答案以支持MacOS:
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
}
func main() {
lang, loc := getLocale()
fmt.Printf("OK: language=%s, locale=%s", lang, loc)
}