aboutsummaryrefslogtreecommitdiff
path: root/cmd/site/html.go
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2018-10-31 23:10:04 +0000
committerChristine Dodrill <me@christine.website>2018-10-31 23:10:04 +0000
commit24d63f4c9832538a8b4d119f54df2507ffe46578 (patch)
tree95975a665382f7ebe3d7666e5fd0292092dd966d /cmd/site/html.go
parentb7493881049aaa908de04837d004ec5cf2d91b90 (diff)
downloadxesite-i18n.tar.xz
xesite-i18n.zip
add translationsi18n
Diffstat (limited to 'cmd/site/html.go')
-rw-r--r--cmd/site/html.go46
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)