From 019be8332b3225146e4b973f10e326b95c4b2960 Mon Sep 17 00:00:00 2001 From: ElegantMonkey Date: Sun, 7 May 2017 18:05:41 -0300 Subject: [PATCH 1/2] Read the user language preferences from the HTTP request --- router/userHandler.go | 10 +++++----- util/languages/translation.go | 35 ++++++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/router/userHandler.go b/router/userHandler.go index 5661e9ca..8d791a41 100644 --- a/router/userHandler.go +++ b/router/userHandler.go @@ -21,7 +21,7 @@ func UserRegisterFormHandler(w http.ResponseWriter, r *http.Request) { b := form.RegistrationForm{} modelHelper.BindValueForm(&b, r) b.CaptchaID = captcha.GetID() - languages.SetTranslation("en-us", viewRegisterTemplate) + languages.SetTranslationFromRequest(viewRegisterTemplate, r, "en-us") htv := UserRegisterTemplateVariables{b, form.NewErrors(), NewSearchForm(), Navigation{}, r.URL, mux.CurrentRoute(r)} err := viewRegisterTemplate.ExecuteTemplate(w, "index.html", htv) if err != nil { @@ -36,7 +36,7 @@ func UserRegisterFormHandler(w http.ResponseWriter, r *http.Request) { func UserLoginFormHandler(w http.ResponseWriter, r *http.Request) { b := form.LoginForm{} modelHelper.BindValueForm(&b, r) - languages.SetTranslation("en-us", viewLoginTemplate) + languages.SetTranslationFromRequest(viewLoginTemplate, r, "en-us") htv := UserLoginFormVariables{b, NewSearchForm(), Navigation{}, r.URL, mux.CurrentRoute(r)} err := viewLoginTemplate.ExecuteTemplate(w, "index.html", htv) if err != nil { @@ -75,7 +75,7 @@ func UserRegisterPostHandler(w http.ResponseWriter, r *http.Request) { } if (len(err) == 0) { b := form.RegistrationForm{} - languages.SetTranslation("en-us", viewRegisterSuccessTemplate) + languages.SetTranslationFromRequest(viewRegisterSuccessTemplate, r, "en-us") htv := UserRegisterTemplateVariables{b, err, NewSearchForm(), Navigation{}, r.URL, mux.CurrentRoute(r)} errorTmpl := viewRegisterSuccessTemplate.ExecuteTemplate(w, "index.html", htv) if errorTmpl != nil { @@ -87,7 +87,7 @@ func UserRegisterPostHandler(w http.ResponseWriter, r *http.Request) { } if (len(err) > 0) { b.CaptchaID = captcha.GetID() - languages.SetTranslation("en-us", viewRegisterTemplate) + languages.SetTranslationFromRequest(viewRegisterTemplate, r, "en-us") htv := UserRegisterTemplateVariables{b, err, NewSearchForm(), Navigation{}, r.URL, mux.CurrentRoute(r)} errorTmpl := viewRegisterTemplate.ExecuteTemplate(w, "index.html", htv) if errorTmpl != nil { @@ -104,7 +104,7 @@ func UserVerifyEmailHandler(w http.ResponseWriter, r *http.Request) { if (errEmail != nil) { err["errors"] = append(err["errors"], errEmail.Error()) } - languages.SetTranslation("en-us", viewVerifySuccessTemplate) + languages.SetTranslationFromRequest(viewVerifySuccessTemplate, r, "en-us") htv := UserVerifyTemplateVariables{err, NewSearchForm(), Navigation{}, r.URL, mux.CurrentRoute(r)} errorTmpl := viewVerifySuccessTemplate.ExecuteTemplate(w, "index.html", htv) if errorTmpl != nil { diff --git a/util/languages/translation.go b/util/languages/translation.go index 1658b7af..114c0596 100644 --- a/util/languages/translation.go +++ b/util/languages/translation.go @@ -1,15 +1,28 @@ package languages import ( - "github.com/nicksnyder/go-i18n/i18n" - "html/template" - ) + "fmt" + "github.com/nicksnyder/go-i18n/i18n" + "html/template" + "net/http" +) - func SetTranslation(language string, tmpl *template.Template) { - T, _ := i18n.Tfunc(language) - tmpl.Funcs(map[string]interface{}{ - "T": func (str string) template.HTML { - return template.HTML(T(str)) - }, - }) - } \ No newline at end of file +func SetTranslation(tmpl *template.Template, language string, languages ...string) { + T, _ := i18n.Tfunc(language, languages...) + tmpl.Funcs(map[string]interface{}{ + "T": func(str string) template.HTML { + return template.HTML(T(str)) + }, + }) +} + +func SetTranslationFromRequest(tmpl *template.Template, r *http.Request, defaultLanguage string) { + cookie, err := r.Cookie("lang") + cookieLanguage := "" + if err == nil { + cookieLanguage = cookie.Value + } + // go-i18n supports the format of the Accept-Language header, thankfully. + headerLanguage := r.Header.Get("Accept-Language") + SetTranslation(tmpl, cookieLanguage, headerLanguage, defaultLanguage) +} From a994f8c125884c652f475293004de85674000254 Mon Sep 17 00:00:00 2001 From: ElegantMonkey Date: Sun, 7 May 2017 18:08:38 -0300 Subject: [PATCH 2/2] Remove unneeded import --- util/languages/translation.go | 1 - 1 file changed, 1 deletion(-) diff --git a/util/languages/translation.go b/util/languages/translation.go index 114c0596..446c0a3d 100644 --- a/util/languages/translation.go +++ b/util/languages/translation.go @@ -1,7 +1,6 @@ package languages import ( - "fmt" "github.com/nicksnyder/go-i18n/i18n" "html/template" "net/http"