golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
123k stars 17.53k forks source link

x/text/language: matcher doesn't match en-SG exactly to en #29884

Open humjosh opened 5 years ago

humjosh commented 5 years ago

What version of Go are you using (go version)?

go version go1.11 darwin/amd64

What operating system and processor architecture are you using (go env)?

amd64, macOS Sierra 10.12.6

What did you do?

package main

import (
    "fmt"

    "golang.org/x/text/language"
)

func main() {
    preferredTags := []language.Tag{language.English, language.Malay}
    matcher := language.NewMatcher(preferredTags)

    locale := "en-SG;q=1.0, zh-Hant-HK;q=0.9, ms-SG;q=0.8, ja-SG;q=0.7, zh-Hans-SG;q=0.6, en-GB;q=0.5"
    tags, _, _ := language.ParseAcceptLanguage(locale)

    match, _, confidence := matcher.Match(tags...)
    fmt.Printf("Matched %v with confidence %v", match, confidence)
}

What did you expect to see?

Matched en with confidence Exact

What did you see instead?

Matched ms-u-rg-sgzzzz with confidence High

If you replace en-SG with en-US in the locale string, then it does indeed exactly match to en (en-u-rg-uszzzz)

FiloSottile commented 5 years ago

/cc @mpvl