Golang中如何检查语言标签
Golang中如何检查语言标签 请告诉我如何检查当前的语言标签? 我尝试了类似这样的方法:
func main() {
t, err := language.Parse("en")
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(t)
k, err := language.ParseBase("en")
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(k)
r, err := language.ParseRegion("en")
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(r)
}
但结果是:
en
en
language: subtag "EN" is well-formed but unknown
ZZ
这让我有点困惑。 哪个包可以正确检查标签? 谢谢!
更多关于Golang中如何检查语言标签的实战教程也可以访问 https://www.itying.com/category-94-b0.html
抱歉,包 - “golang.org/x/text/language” 英文 - 我指的是像英语这样的语言
更多关于Golang中如何检查语言标签的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
language 是从哪里来的?我在标准库中找不到这样的包。
除此之外,我不知道有任何语言会有 “en” 这样的子语言,也许你应该尝试使用 “us” 或 “uk” 这样的代码?
哦,我明白了,只有ISO标签才能正常工作吗? 但我需要检查带有alpha3值的标签( https://www.loc.gov/standards/iso639-2/php/English_list.php
我在有效值列表中找不到 en 或 eng,根据 https://en.wikipedia.org/wiki/ISO_3166-1
文档中这样说明:
ParseRegion 解析一个2位或3位的ISO 3166-1或UN M.49代码。如果s是格式正确但未知的区域标识符,则返回ValueError;如果发生其他错误,则返回其他错误。
因此,如果你需要处理ISO 639-2标准,就需要寻找能够处理该标准的库。你当前使用的库已明确声明不支持此功能。
在Go语言中,检查语言标签最合适的包是 golang.org/x/text/language。你已经在使用这个包了,但需要理解不同解析方法的作用。
你的代码实际上已经正确解析了语言标签,但需要理解:
language.Parse()解析完整语言标签language.ParseBase()只解析基础语言部分language.ParseRegion()只解析地区部分
这里是一个更完整的示例:
package main
import (
"fmt"
"golang.org/x/text/language"
)
func main() {
// 解析完整语言标签
tag, err := language.Parse("en-US")
if err != nil {
fmt.Printf("解析错误: %v\n", err)
return
}
fmt.Printf("完整标签: %s\n", tag)
fmt.Printf("基础语言: %s\n", tag.Base())
fmt.Printf("地区: %s\n", tag.Region())
fmt.Printf("脚本: %s\n", tag.Script())
// 检查标签是否有效
if tag.IsRoot() {
fmt.Println("这是根标签")
}
// 匹配语言偏好
matcher := language.NewMatcher([]language.Tag{
language.English,
language.SimplifiedChinese,
language.TraditionalChinese,
})
matched, index, confidence := matcher.Match(tag)
fmt.Printf("匹配结果: %s, 索引: %d, 置信度: %v\n", matched, index, confidence)
}
对于你的具体问题,“en” 作为地区代码是无效的,所以 ParseRegion("en") 会失败。正确的用法是:
// 解析基础语言
base, err := language.ParseBase("en")
if err != nil {
fmt.Printf("基础语言解析错误: %v\n", err)
} else {
fmt.Printf("基础语言: %s\n", base)
}
// 解析地区(需要使用有效的地区代码)
region, err := language.ParseRegion("US")
if err != nil {
fmt.Printf("地区解析错误: %v\n", err)
} else {
fmt.Printf("地区: %s\n", region)
}
输出会是:
基础语言: en
地区: US
要检查当前系统的语言标签,可以使用:
// 获取系统偏好语言
preferred, _ := language.ParseAcceptLanguage("en-US,en;q=0.9,zh-CN;q=0.8")
fmt.Printf("系统偏好语言: %v\n", preferred)
golang.org/x/text/language 包是处理语言标签的标准方法,你的使用方向是正确的,只需要根据具体需求选择合适的解析函数。

