From 403264258a4160fada9f3c9ac07d05da251a7485 Mon Sep 17 00:00:00 2001 From: Steven Powell Date: Fri, 1 Apr 2022 10:22:45 -0700 Subject: [PATCH] improve language detection --- go.mod | 7 ++-- go.sum | 12 ++++-- pkg/minikube/out/out_test.go | 3 +- pkg/minikube/translate/translate.go | 48 +++++------------------- pkg/minikube/translate/translate_test.go | 26 ------------- 5 files changed, 23 insertions(+), 73 deletions(-) diff --git a/go.mod b/go.mod index f3cbee562c..c943c70691 100644 --- a/go.mod +++ b/go.mod @@ -17,8 +17,6 @@ require ( github.com/cenkalti/backoff/v4 v4.1.2 github.com/cheggaaa/pb/v3 v3.0.8 github.com/cloudevents/sdk-go/v2 v2.9.0 - github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 - github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect github.com/docker/docker v20.10.14+incompatible github.com/docker/go-units v0.4.0 github.com/docker/machine v0.16.2 @@ -98,7 +96,10 @@ require ( sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0 ) -require github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 +require ( + github.com/Xuanwo/go-locale v1.1.0 + github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 +) require ( cloud.google.com/go v0.100.2 // indirect diff --git a/go.sum b/go.sum index 484bf38205..077dffa84c 100644 --- a/go.sum +++ b/go.sum @@ -141,6 +141,8 @@ github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdc github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= github.com/VividCortex/godaemon v1.0.0 h1:aHYrScWvgaSOdAoYCdObWXLm+e1rldP9Pwb1ZvuZkQw= github.com/VividCortex/godaemon v1.0.0/go.mod h1:hBWe/72KbGt/lb95E+Sh9ersdYbB57Dt6CG66S1YPno= +github.com/Xuanwo/go-locale v1.1.0 h1:51gUxhxl66oXAjI9uPGb2O0qwPECpriKQb2hl35mQkg= +github.com/Xuanwo/go-locale v1.1.0/go.mod h1:UKrHoZB3FPIk9wIG2/tVSobnHgNnceGSH3Y8DY5cASs= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= @@ -220,10 +222,6 @@ github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudevents/sdk-go/v2 v2.9.0 h1:StQ9q2JuGvclGFoT7kpTdQm+qjW0LQzg51CgUF4ncpY= github.com/cloudevents/sdk-go/v2 v2.9.0/go.mod h1:GpCBmUj7DIRiDhVvsK5d6WCbgTWs8DxAWTRtAwQmIXs= -github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:Yg2hDs4b13Evkpj42FU2idX2cVXVFqQSheXYKM86Qsk= -github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:MgJyK38wkzZbiZSKeIeFankxxSA8gayko/nr5x5bgBA= -github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:tuijfIjZyjZaHq9xDUh0tNitwXshJpbLkqMOJv4H3do= -github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -608,6 +606,7 @@ github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c2 github.com/googleinterns/cloud-operations-api-mock v0.0.0-20200709193332-a1e58c29bdd3/go.mod h1:h/KNeRx7oYU4SpA4SoY7W2/NxDKEEVuwA6j9A27L4OI= github.com/gookit/color v1.4.2 h1:tXy44JFSFkKnELV6WaMo/lLfu/meqITX3iAV52do7lk= github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -701,6 +700,7 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c h1:3UvYABOQRhJAApj9MdCN+Ydv841ETSoy6xLzdmmr/9A= github.com/juju/clock v0.0.0-20190205081909-9c5c9712527c/go.mod h1:nD0vlnrUjcjJhqN5WuCWZyzfd5AHZAC9/ajvbSx69xA= @@ -1017,9 +1017,12 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.6.7 h1:I6tZjLXD2Q1kjvNbIzB1wvQBsXmKXiVrhpRE8ZjP5jY= +github.com/smartystreets/goconvey v1.6.7/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= @@ -1455,6 +1458,7 @@ golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211023085530-d6a326fbbf70/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/pkg/minikube/out/out_test.go b/pkg/minikube/out/out_test.go index acaf13ac40..c3d4ee195a 100644 --- a/pkg/minikube/out/out_test.go +++ b/pkg/minikube/out/out_test.go @@ -26,6 +26,7 @@ import ( "github.com/Delta456/box-cli-maker/v2" "github.com/spf13/pflag" + "golang.org/x/text/language" "k8s.io/minikube/pkg/minikube/style" "k8s.io/minikube/pkg/minikube/tests" @@ -34,7 +35,7 @@ import ( func TestOutT(t *testing.T) { // Set the system locale to Arabic and define a dummy translation file. - translate.SetPreferredLanguage("ar") + translate.SetPreferredLanguage(language.Arabic) translate.Translations = map[string]interface{}{ "Installing Kubernetes version {{.version}} ...": "... {{.version}} تثبيت Kubernetes الإصدار", diff --git a/pkg/minikube/translate/translate.go b/pkg/minikube/translate/translate.go index 48e2ab9de3..52c3139351 100644 --- a/pkg/minikube/translate/translate.go +++ b/pkg/minikube/translate/translate.go @@ -19,11 +19,9 @@ package translate import ( "encoding/json" "fmt" - "os" - "runtime" "strings" - "github.com/cloudfoundry-attic/jibber_jabber" + "github.com/Xuanwo/go-locale" "golang.org/x/text/language" "k8s.io/klog/v2" @@ -62,20 +60,11 @@ func T(s string) string { // DetermineLocale finds the system locale and sets the preferred language for output appropriately. func DetermineLocale() { - var locale string - // Allow windows users to overload the same env vars as unix users - if runtime.GOOS == "windows" { - locale = os.Getenv("LC_ALL") + tag, err := locale.Detect() + if err != nil { + klog.V(1).Infof("Getting system locale failed: %v", err) } - if locale == "" { - var err error - locale, err = jibber_jabber.DetectIETF() - if err != nil { - klog.V(1).Infof("Getting system locale failed: %v", err) - locale = "" - } - } - SetPreferredLanguage(locale) + SetPreferredLanguage(tag) // Load translations for preferred language into memory. p := preferredLanguage.String() @@ -102,30 +91,11 @@ func DetermineLocale() { } -// setPreferredLanguageTag configures which language future messages should use. -func setPreferredLanguageTag(l language.Tag) { +// SetPreferredLanguage configures which language future messages should use. +func SetPreferredLanguage(tag language.Tag) { // output message only if verbosity level is set and we still haven't got all the flags parsed in main() - klog.V(1).Infof("Setting Language to %s ...", l) - preferredLanguage = l -} - -// SetPreferredLanguage configures which language future messages should use, based on a LANG string. -func SetPreferredLanguage(s string) { - // "C" is commonly used to denote a neutral POSIX locale. See http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html#tag_07_02 - if s == "" || s == "C" { - setPreferredLanguageTag(defaultLanguage) - return - } - // Handles "de_DE" or "de_DE.utf8" - // We don't process encodings, since Rob Pike invented utf8 and we're mostly stuck with it. - // Fallback to the default language if not detected - parts := strings.Split(s, ".") - l, err := language.Parse(parts[0]) - if err != nil { - setPreferredLanguageTag(defaultLanguage) - return - } - setPreferredLanguageTag(l) + klog.V(1).Infof("Setting Language to %s ...", tag) + preferredLanguage = tag } // GetPreferredLanguage returns the preferred language tag. diff --git a/pkg/minikube/translate/translate_test.go b/pkg/minikube/translate/translate_test.go index dd5893ad87..f24eb215d4 100644 --- a/pkg/minikube/translate/translate_test.go +++ b/pkg/minikube/translate/translate_test.go @@ -27,32 +27,6 @@ import ( "golang.org/x/text/language" ) -func TestSetPreferredLanguage(t *testing.T) { - var tests = []struct { - input string - want language.Tag - }{ - {"", language.AmericanEnglish}, - {"C", language.AmericanEnglish}, - {"zh", language.Chinese}, - {"fr_FR.utf8", language.French}, - {"zzyy.utf8", language.AmericanEnglish}, - } - for _, tc := range tests { - t.Run(tc.input, func(t *testing.T) { - // Set something so that we can assert change. - SetPreferredLanguage(tc.input) - - want, _ := tc.want.Base() - got, _ := GetPreferredLanguage().Base() - if got != want { - t.Errorf("SetPreferredLanguage(%s) = %q, want %q", tc.input, got, want) - } - }) - } - -} - func TestT(t *testing.T) { var tests = []struct { description, input, expected string