Return default language when there are no headers
This change also affects test setup: we need to load locale service without any languages/translations to avoid test flakines
This commit is contained in:
+15
-11
@@ -17,11 +17,11 @@ func DetectLanguage(ll *service) func(next http.Handler) http.Handler {
|
||||
|
||||
// resolve accept-language header
|
||||
// Accept-Language specifies the language of the response payload.
|
||||
ctx = SetAcceptLanguageToContext(ctx, resolveAcceptLanguageHeaders(ll, r))
|
||||
ctx = SetAcceptLanguageToContext(ctx, resolveAcceptLanguageHeaders(r, ll))
|
||||
|
||||
// resolve content-language header
|
||||
// Content-Language specifies the language of the request payload.
|
||||
ctx = SetContentLanguageToContext(ctx, resolveContentLanguageHeaders(r.Header, ll.Default().Tag))
|
||||
ctx = SetContentLanguageToContext(ctx, resolveContentLanguageHeaders(r.Header, ll))
|
||||
|
||||
next.ServeHTTP(w, r.WithContext(ctx))
|
||||
})
|
||||
@@ -36,11 +36,15 @@ func DetectLanguage(ll *service) func(next http.Handler) http.Handler {
|
||||
// - invalid language: (same as skip)
|
||||
// - valid language: returns valid language; services will treat translatable content from the payload as translations
|
||||
// - no header: returns default language; (same as valid language)
|
||||
func resolveContentLanguageHeaders(h http.Header, def language.Tag) language.Tag {
|
||||
func resolveContentLanguageHeaders(h http.Header, ll *service) language.Tag {
|
||||
if ll == nil || ll.Default() == nil {
|
||||
return language.Und
|
||||
}
|
||||
|
||||
var cLang = h.Get(ContentLanguageHeader)
|
||||
|
||||
if cLang == "" {
|
||||
return def
|
||||
return ll.Default().Tag
|
||||
}
|
||||
|
||||
if cLang == "skip" {
|
||||
@@ -55,7 +59,12 @@ func resolveContentLanguageHeaders(h http.Header, def language.Tag) language.Tag
|
||||
}
|
||||
}
|
||||
|
||||
func resolveAcceptLanguageHeaders(ll *service, r *http.Request) (tag language.Tag) {
|
||||
func resolveAcceptLanguageHeaders(r *http.Request, ll *service) (tag language.Tag) {
|
||||
if ll == nil || ll.Default() == nil {
|
||||
// locale service does not have anything loaded...
|
||||
return language.Und
|
||||
}
|
||||
|
||||
if ll.opt.DevelopmentMode {
|
||||
if err := ll.ReloadStatic(); err != nil {
|
||||
// when in development mode, refresh languages for every request
|
||||
@@ -64,11 +73,6 @@ func resolveAcceptLanguageHeaders(ll *service, r *http.Request) (tag language.Ta
|
||||
}
|
||||
}
|
||||
|
||||
if ll.Default() == nil {
|
||||
// locale service does not have anything loaded...
|
||||
return
|
||||
}
|
||||
|
||||
var (
|
||||
raw string
|
||||
)
|
||||
@@ -85,7 +89,7 @@ func resolveAcceptLanguageHeaders(ll *service, r *http.Request) (tag language.Ta
|
||||
|
||||
if len(raw) == 0 {
|
||||
// no need for lang detection
|
||||
return
|
||||
return ll.Default().Tag
|
||||
}
|
||||
|
||||
// parse & ignore errors
|
||||
|
||||
+12
-3
@@ -74,8 +74,18 @@ func SetGlobal(ll *service) {
|
||||
global = ll
|
||||
}
|
||||
|
||||
func Static(ll ...*Language) *service {
|
||||
return &service{}
|
||||
func Static(ll ...*Language) (svc *service) {
|
||||
svc = &service{
|
||||
log: zap.NewNop(),
|
||||
set: make(map[language.Tag]*Language),
|
||||
}
|
||||
|
||||
for _, l := range ll {
|
||||
svc.set[l.Tag] = l
|
||||
svc.tags = append(svc.tags, l.Tag)
|
||||
}
|
||||
|
||||
return svc
|
||||
}
|
||||
|
||||
func Service(log *zap.Logger, opt options.LocaleOpt) (*service, error) {
|
||||
@@ -84,7 +94,6 @@ func Service(log *zap.Logger, opt options.LocaleOpt) (*service, error) {
|
||||
src: strings.Split(opt.Path, ":"),
|
||||
log: log.Named("locale"),
|
||||
}
|
||||
|
||||
for _, lang := range strings.Split(opt.Languages, ",") {
|
||||
lang = strings.TrimSpace(lang)
|
||||
tag := language.Make(lang)
|
||||
|
||||
@@ -16,6 +16,7 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/label"
|
||||
ltype "github.com/cortezaproject/corteza-server/pkg/label/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/locale"
|
||||
"github.com/cortezaproject/corteza-server/pkg/logger"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rand"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
@@ -26,6 +27,7 @@ import (
|
||||
_ "github.com/joho/godotenv/autoload"
|
||||
"github.com/steinfletcher/apitest"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -70,6 +72,9 @@ func InitTestApp() {
|
||||
return err
|
||||
}
|
||||
|
||||
// Tests should be executed w/o any locales
|
||||
locale.SetGlobal(locale.Static(&locale.Language{Tag: language.Und}))
|
||||
|
||||
eventbus.Set(eventBus)
|
||||
return nil
|
||||
})
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/pkg/envoy/yaml"
|
||||
"github.com/cortezaproject/corteza-server/pkg/eventbus"
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/locale"
|
||||
"github.com/cortezaproject/corteza-server/pkg/logger"
|
||||
"github.com/cortezaproject/corteza-server/pkg/objstore/plain"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rand"
|
||||
@@ -33,6 +34,7 @@ import (
|
||||
"github.com/spf13/afero"
|
||||
"github.com/steinfletcher/apitest"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -80,6 +82,9 @@ func InitTestApp() {
|
||||
return err
|
||||
}
|
||||
|
||||
// Tests should be executed w/o any locales
|
||||
locale.SetGlobal(locale.Static(&locale.Language{Tag: language.Und}))
|
||||
|
||||
eventbus.Set(eventBus)
|
||||
return nil
|
||||
})
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/pkg/id"
|
||||
"github.com/cortezaproject/corteza-server/pkg/label"
|
||||
ltype "github.com/cortezaproject/corteza-server/pkg/label/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/locale"
|
||||
"github.com/cortezaproject/corteza-server/pkg/logger"
|
||||
"github.com/cortezaproject/corteza-server/pkg/objstore/plain"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rand"
|
||||
@@ -34,6 +35,7 @@ import (
|
||||
"github.com/steinfletcher/apitest"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.uber.org/zap"
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
//go:embed static
|
||||
@@ -90,10 +92,14 @@ func InitTestApp() {
|
||||
return err
|
||||
}
|
||||
|
||||
// Tests should be executed w/o any locales
|
||||
locale.SetGlobal(locale.Static(&locale.Language{Tag: language.Und}))
|
||||
|
||||
sm = request.NewSessionManager(service.DefaultStore, app.Opt.Auth, service.DefaultLogger)
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
sp, _ := loadSAMLService()
|
||||
|
||||
Reference in New Issue
Block a user