From 802c9254501c20cb816dd10293a489eab04224ee Mon Sep 17 00:00:00 2001 From: "Alexander \"Arav\" Andreev" Date: Sun, 15 Sep 2024 00:31:00 +0400 Subject: [PATCH] Set lang if a lang= query set, else look for a cookie, otherwise choose a lang from Accept-Language header. --- cmd/dwelling-home/main.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/cmd/dwelling-home/main.go b/cmd/dwelling-home/main.go index c41ce6f..cd93f6f 100644 --- a/cmd/dwelling-home/main.go +++ b/cmd/dwelling-home/main.go @@ -126,7 +126,19 @@ func main() { func I18nMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - ctx, err := ctxi18n.WithLocale(r.Context(), r.Header.Get("Accept-Language")) + lang := "en" + + if lq := r.URL.Query().Get("lang"); lq != "" { + lc := http.Cookie{Name: "lang", Value: lq, HttpOnly: true, MaxAge: 0} + http.SetCookie(w, &lc) + lang = lq + } else if l, err := r.Cookie("lang"); err == nil { + lang = l.Value + } else if al := r.Header.Get("Accept-Language"); al != "" { + lang = r.Header.Get("Accept-Language") + } + + ctx, err := ctxi18n.WithLocale(r.Context(), lang) if err != nil { log.Println("i18nmw:", err) }