From 351c15d28e0444fd8a78c510a0c4d62ed433c758 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Wed, 7 Aug 2024 00:21:12 +0200 Subject: Genesis commit --- middleware/i18n.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 middleware/i18n.go (limited to 'middleware') diff --git a/middleware/i18n.go b/middleware/i18n.go new file mode 100644 index 0000000..5e33636 --- /dev/null +++ b/middleware/i18n.go @@ -0,0 +1,41 @@ +package middleware + +import ( + "cmp" + "context" + "errors" + "log" + "net/http" + "strings" + + "git.thomasvoss.com/euro-cash.eu/i18n" + "git.thomasvoss.com/euro-cash.eu/templates" +) + +const PrinterKey = "printer" + +func I18n(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var p, pZero i18n.Printer + + if c, err := r.Cookie("lang"); errors.Is(err, http.ErrNoCookie) { + log.Println("Language cookie not set") + } else { + var ok bool + p, ok = i18n.Printers[strings.ToLower(c.Value)] + if !ok { + log.Printf("Language ā€˜%sā€™ is unsupported\n", c.Value) + } + } + + used := cmp.Or(p, i18n.DefaultPrinter) + ctx := context.WithValue(r.Context(), PrinterKey, used) + + if p == pZero { + templates.Root(nil, templates.SetLanguage()).Render(ctx, w) + /* TODO: Redirect the user back to where they came from */ + } else { + next.ServeHTTP(w, r.WithContext(ctx)) + } + }) +} -- cgit v1.2.3