Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/text/language: Match() choses the wrong Tag #37662

Open
Flamefork opened this issue Mar 4, 2020 · 2 comments
Open

x/text/language: Match() choses the wrong Tag #37662

Flamefork opened this issue Mar 4, 2020 · 2 comments
Labels
NeedsInvestigation
Milestone

Comments

@Flamefork
Copy link

@Flamefork Flamefork commented Mar 4, 2020

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

$ go version
go version go1.14 linux/amd64

Does this issue reproduce with the latest release?

Yes.

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

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build210008815=/tmp/go-build -gno-record-gcc-switches"

What did you do?

https://play.golang.org/p/_qlIzcAWD5F

package main

import (
	"fmt"
	"golang.org/x/text/language"
)

func main() {
	matcher := language.NewMatcher([]language.Tag{
		language.MustParse("en-GB"),
		language.MustParse("fr-FR"),
		language.MustParse("es-ES"),
	})
	tag, _, confidence := matcher.Match(
		language.MustParse("en"),
		language.MustParse("fr"),
		language.MustParse("en-US"),
	)
	fmt.Printf("best match: %s, confidence: %s\n", tag, confidence)
}

What did you expect to see?

best match: en-GB, confidence: High

What did you see instead?

best match: fr-FR, confidence: Exact
@gopherbot gopherbot added this to the Unreleased milestone Mar 4, 2020
@ianlancetaylor
Copy link
Contributor

@ianlancetaylor ianlancetaylor commented Mar 4, 2020

CC @mpvl

@toothrot toothrot added the NeedsInvestigation label Mar 9, 2020
@ameowlia
Copy link
Contributor

@ameowlia ameowlia commented Nov 9, 2021

👋 Hi @Flamefork,

I recently investigated a nearly identical bug here. Please go there to read lots of details.

My short summary is:

  • This is working as expected (even if it is very surprising)
  • If a person lists the languages+local they know and the languages are not continuous (like you have in the example with english then french then english), then it is assumed they speak all of those languages equally well and it will not give extra preference to the first exact language match it finds.
  • "en" defaults to "en-US", which is not an exact match.
  • "fr" defaults to "fr-FR", which is an exact match. This is the first exact match so this is the one chosen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
NeedsInvestigation
Projects
None yet
Development

No branches or pull requests

5 participants