3
0

Fix language dynamism to align with user's and context preference

This commit is contained in:
Mumbi Francis 2024-09-03 14:56:52 +03:00 committed by Mumbi Francis
parent f2cdc1a586
commit 08be1a1355
2 changed files with 24 additions and 1 deletions

View File

@ -11,6 +11,9 @@ import (
"strconv"
"strings"
"github.com/cortezaproject/corteza/server/pkg/locale"
"golang.org/x/text/language"
"github.com/go-chi/jwtauth"
oauth2errors "github.com/go-oauth2/oauth2/v4/errors"
"github.com/lestrrat-go/jwx/jwa"
@ -457,6 +460,12 @@ func (h AuthHandlers) handleTokenRequest(req *request.AuthReq, client *types.Aut
response["avatarID"] = strconv.FormatUint(user.Meta.AvatarID, 10)
}
if h.Locale.HasLanguage(language.Make(user.Meta.PreferredLanguage)) {
response["preferred_language"] = user.Meta.PreferredLanguage
} else {
response["preferred_language"] = locale.GetAcceptLanguageFromContext(req.Context()).String()
}
if user.Labels != nil {
response["labels"] = user.Labels
} else {

View File

@ -12,6 +12,8 @@ import (
"strings"
"time"
"golang.org/x/text/language"
"github.com/cortezaproject/corteza/server/system/service"
"github.com/cortezaproject/corteza/server/auth/external"
@ -111,6 +113,7 @@ type (
localeService interface {
NS(ctx context.Context, ns string) func(key string, rr ...string) string
T(ctx context.Context, ns, key string, rr ...string) string
HasLanguage(lang language.Tag) bool
LocalizedList(ctx context.Context) []*locale.Language
}
@ -223,12 +226,23 @@ func (h *AuthHandlers) handle(fn handlerFn) http.HandlerFunc {
// make sure user (identity) is part of the context
// so we can properly identify ourselves when interacting
// with services
// with services, and set user's preferred language
if req.AuthUser != nil && !req.AuthUser.PendingMFA() {
req.Request = req.Request.Clone(auth.SetIdentityToContext(
req.Context(),
auth.Authenticated(req.AuthUser.User.ID, req.AuthUser.User.Roles()...),
))
userPreferredLanguage := language.Make(req.AuthUser.User.Meta.PreferredLanguage)
// set user's preferred language
if h.Locale.HasLanguage(userPreferredLanguage) {
ctx := req.Request.Context()
ctx = locale.SetAcceptLanguageToContext(ctx, userPreferredLanguage)
ctx = locale.SetContentLanguageToContext(ctx, userPreferredLanguage)
req.Request = req.Request.WithContext(ctx)
}
}
// Alerts show for 1 session only!