gpt4 book ai didi

go - 为什么 language.Matcher 会返回如此奇怪的结果?

转载 作者:IT王子 更新时间:2023-10-29 00:46:59 25 4
gpt4 key购买 nike

我正在实现一个基于 Accept-Language header 的多语言 Web 服务。我使用下一个代码来解析 header 并获取请求的语言:

var matcher = language.NewMatcher([]language.Tag{
language.English,
language.Russian,
})
header:="ru, RUS, ru-RU, ru-ru"
tags, q, err := language.ParseAcceptLanguage(header)
for key, tag := range tags {
matched, _, c := matcher.Match(tag)
fmt.Printf("%s=>%f Matched as: %s (confidence: %s)\n", tag, q[key], matched, c)
}

我得到的结果是

ru=>1.000000 Matched as: ru (confidence: Exact)
ru=>1.000000 Matched as: ru (confidence: Exact)
ru-RU=>1.000000 Matched as: ru-u-rg-ruzzzz (confidence: Exact)
ru-RU=>1.000000 Matched as: ru-u-rg-ruzzzz (confidence: Exact)

为什么 'ru-RU' 匹配为奇怪的标签 'ru-u-rg-ruzzzz'?如何将“ru-Ru”匹配为“ru”?

最佳答案

您需要在创建匹配器时添加“ru-RU”。

var matcher = language.NewMatcher([]language.Tag{
language.English,
language.MustParse("ru-RU"),
language.Russian,
})

当你传入一个区域但它不在你的匹配器中时,它默认为 ZZ然后你点击这个 code在语言包中。

    } else if r := w.RegionID.String(); len(r) == 2 {
// TODO: also filter macro and deprecated.
tt, _ = tt.SetTypeForKey("rg", strings.ToLower(r)+"zzzz")
}

如果您只想获取您可以获取的语言,请使用返回的匹配标记中的 Base 方法

matched, _, _ := matcher.Match(tag)
base, _ := matched.Base();
fmt.Println(base.String()) // will only print the language

使用 base.String() 将为您提供的所有语言 header 打印 ru

关于go - 为什么 language.Matcher 会返回如此奇怪的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52254979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com