mirror of
https://github.com/miniflux/v2.git
synced 2025-07-22 17:18:37 +00:00
Store language in session to show the login page translated
This commit is contained in:
parent
6302c3b219
commit
bdcc4134fa
7 changed files with 30 additions and 9 deletions
|
@ -80,8 +80,12 @@ func (c *Context) LoggedUser() *model.User {
|
||||||
|
|
||||||
// UserLanguage get the locale used by the current logged user.
|
// UserLanguage get the locale used by the current logged user.
|
||||||
func (c *Context) UserLanguage() string {
|
func (c *Context) UserLanguage() string {
|
||||||
user := c.LoggedUser()
|
if c.IsAuthenticated() {
|
||||||
return user.Language
|
user := c.LoggedUser()
|
||||||
|
return user.Language
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.getContextStringValue(middleware.UserLanguageContextKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Translate translates a message in the current language.
|
// Translate translates a message in the current language.
|
||||||
|
@ -145,7 +149,6 @@ func (c *Context) getContextStringValue(key *middleware.ContextKey) string {
|
||||||
return v.(string)
|
return v.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Error("[Core:Context] Missing key: %s", key)
|
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,9 +46,10 @@ func (h *Handler) Use(f ControllerFunc) http.Handler {
|
||||||
ctx := NewContext(r, h.store, h.router, h.translator)
|
ctx := NewContext(r, h.store, h.router, h.translator)
|
||||||
request := NewRequest(r)
|
request := NewRequest(r)
|
||||||
response := NewResponse(w, r, h.template)
|
response := NewResponse(w, r, h.template)
|
||||||
|
language := ctx.UserLanguage()
|
||||||
|
|
||||||
if ctx.IsAuthenticated() {
|
if language != "" {
|
||||||
h.template.SetLanguage(ctx.UserLanguage())
|
h.template.SetLanguage(language)
|
||||||
} else {
|
} else {
|
||||||
h.template.SetLanguage("en_US")
|
h.template.SetLanguage("en_US")
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,9 @@ var (
|
||||||
// UserSessionTokenContextKey is the context key used to store the user session ID.
|
// UserSessionTokenContextKey is the context key used to store the user session ID.
|
||||||
UserSessionTokenContextKey = &ContextKey{"UserSessionToken"}
|
UserSessionTokenContextKey = &ContextKey{"UserSessionToken"}
|
||||||
|
|
||||||
|
// UserLanguageContextKey is the context key to store user language.
|
||||||
|
UserLanguageContextKey = &ContextKey{"UserLanguageContextKey"}
|
||||||
|
|
||||||
// SessionIDContextKey is the context key used to store the session ID.
|
// SessionIDContextKey is the context key used to store the session ID.
|
||||||
SessionIDContextKey = &ContextKey{"SessionID"}
|
SessionIDContextKey = &ContextKey{"SessionID"}
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ func (s *SessionMiddleware) Handler(next http.Handler) http.Handler {
|
||||||
ctx = context.WithValue(ctx, OAuth2StateContextKey, session.Data.OAuth2State)
|
ctx = context.WithValue(ctx, OAuth2StateContextKey, session.Data.OAuth2State)
|
||||||
ctx = context.WithValue(ctx, FlashMessageContextKey, session.Data.FlashMessage)
|
ctx = context.WithValue(ctx, FlashMessageContextKey, session.Data.FlashMessage)
|
||||||
ctx = context.WithValue(ctx, FlashErrorMessageContextKey, session.Data.FlashErrorMessage)
|
ctx = context.WithValue(ctx, FlashErrorMessageContextKey, session.Data.FlashErrorMessage)
|
||||||
|
ctx = context.WithValue(ctx, UserLanguageContextKey, session.Data.Language)
|
||||||
next.ServeHTTP(w, r.WithContext(ctx))
|
next.ServeHTTP(w, r.WithContext(ctx))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,15 @@ func (s *UserSessionMiddleware) Handler(next http.Handler) http.Handler {
|
||||||
func (s *UserSessionMiddleware) isPublicRoute(r *http.Request) bool {
|
func (s *UserSessionMiddleware) isPublicRoute(r *http.Request) bool {
|
||||||
route := mux.CurrentRoute(r)
|
route := mux.CurrentRoute(r)
|
||||||
switch route.GetName() {
|
switch route.GetName() {
|
||||||
case "login", "checkLogin", "stylesheet", "javascript", "oauth2Redirect", "oauth2Callback", "appIcon", "favicon", "webManifest":
|
case "login",
|
||||||
|
"checkLogin",
|
||||||
|
"stylesheet",
|
||||||
|
"javascript",
|
||||||
|
"oauth2Redirect",
|
||||||
|
"oauth2Callback",
|
||||||
|
"appIcon",
|
||||||
|
"favicon",
|
||||||
|
"webManifest":
|
||||||
return true
|
return true
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -17,11 +17,12 @@ type SessionData struct {
|
||||||
OAuth2State string `json:"oauth2_state"`
|
OAuth2State string `json:"oauth2_state"`
|
||||||
FlashMessage string `json:"flash_message"`
|
FlashMessage string `json:"flash_message"`
|
||||||
FlashErrorMessage string `json:"flash_error_message"`
|
FlashErrorMessage string `json:"flash_error_message"`
|
||||||
|
Language string `json:"language"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SessionData) String() string {
|
func (s SessionData) String() string {
|
||||||
return fmt.Sprintf(`CSRF="%s", "OAuth2State="%s", FlashMessage="%s", "FlashErrorMessage="%s"`,
|
return fmt.Sprintf(`CSRF="%s", "OAuth2State="%s", FlashMessage="%s", FlashErrorMessage="%s", Lang="%s"`,
|
||||||
s.CSRF, s.OAuth2State, s.FlashMessage, s.FlashErrorMessage)
|
s.CSRF, s.OAuth2State, s.FlashMessage, s.FlashErrorMessage, s.Language)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Value converts the session data to JSON.
|
// Value converts the session data to JSON.
|
||||||
|
@ -52,5 +53,5 @@ type Session struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Session) String() string {
|
func (s *Session) String() string {
|
||||||
return fmt.Sprintf(`ID="%s", Data="%v"`, s.ID, s.Data)
|
return fmt.Sprintf(`ID="%s", Data={%v}`, s.ID, s.Data)
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,10 @@ func (c *Controller) CheckLogin(ctx *handler.Context, request *handler.Request,
|
||||||
func (c *Controller) Logout(ctx *handler.Context, request *handler.Request, response *handler.Response) {
|
func (c *Controller) Logout(ctx *handler.Context, request *handler.Request, response *handler.Response) {
|
||||||
user := ctx.LoggedUser()
|
user := ctx.LoggedUser()
|
||||||
|
|
||||||
|
if err := c.store.UpdateSessionField(ctx.SessionID(), "language", user.Language); err != nil {
|
||||||
|
logger.Error("[Controller:Logout] %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := c.store.RemoveUserSessionByToken(user.ID, ctx.UserSessionToken()); err != nil {
|
if err := c.store.RemoveUserSessionByToken(user.ID, ctx.UserSessionToken()); err != nil {
|
||||||
logger.Error("[Controller:Logout] %v", err)
|
logger.Error("[Controller:Logout] %v", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue