diff options
| author | Christine Dodrill <me@christine.website> | 2018-10-31 23:10:04 +0000 |
|---|---|---|
| committer | Christine Dodrill <me@christine.website> | 2018-10-31 23:10:04 +0000 |
| commit | 24d63f4c9832538a8b4d119f54df2507ffe46578 (patch) | |
| tree | 95975a665382f7ebe3d7666e5fd0292092dd966d /cmd/site/html.go | |
| parent | b7493881049aaa908de04837d004ec5cf2d91b90 (diff) | |
| download | xesite-i18n.tar.xz xesite-i18n.zip | |
add translationsi18n
Diffstat (limited to 'cmd/site/html.go')
| -rw-r--r-- | cmd/site/html.go | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/cmd/site/html.go b/cmd/site/html.go index f42b947..1037baf 100644 --- a/cmd/site/html.go +++ b/cmd/site/html.go @@ -19,29 +19,39 @@ func logTemplateTime(name string, from time.Time) { func (s *Site) renderTemplatePage(templateFname string, data interface{}) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer logTemplateTime(templateFname, time.Now()) - s.tlock.RLock() - defer s.tlock.RUnlock() - var t *template.Template - var err error - - if s.templates[templateFname] == nil { - t, err = template.ParseFiles("templates/base.html", "templates/"+templateFname) + getTranslation := func(group, key string, vals ...interface{}) string { + var lc locale + var ok bool + locale, err := GetPreferredLocale(r) if err != nil { - w.WriteHeader(http.StatusInternalServerError) - ln.Error(context.Background(), err, ln.F{"action": "renderTemplatePage", "page": templateFname}) - fmt.Fprintf(w, "error: %v", err) + ln.Error(r.Context(), err) + lc = s.t.locales["en"] + goto overwith } - ln.Log(context.Background(), ln.F{"action": "loaded_new_template", "fname": templateFname}) + lc, ok = s.t.Get(locale.Lang) + if !ok { + ln.Log(r.Context(), ln.F{"msg": "unknown language requested", "lang": locale.Lang, "header": r.Header.Get("Accept-Language")}) + lc = s.t.locales["en"] + goto overwith + } - s.tlock.RUnlock() - s.tlock.Lock() - s.templates[templateFname] = t - s.tlock.Unlock() - s.tlock.RLock() - } else { - t = s.templates[templateFname] + overwith: + return lc.Value(group, key, vals...) + } + funcMap := template.FuncMap{ + "trans": getTranslation, + } + + var t *template.Template = template.New(templateFname).Funcs(funcMap) + var err error + + t, err = t.ParseFiles("templates/base.html", "templates/"+templateFname) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + ln.Error(context.Background(), err, ln.F{"action": "renderTemplatePage", "page": templateFname}) + fmt.Fprintf(w, "error: %v", err) } err = t.Execute(w, data) |
