From 0658ab1ad35cd3abc651f22973445fe95cb55bb9 Mon Sep 17 00:00:00 2001 From: jsign Date: Tue, 20 Aug 2019 21:25:09 -0300 Subject: [PATCH] web-app: use universal-translator files to externalize translatable texts --- .../template-renderer/template_renderer.go | 3 ++ .../platform/web/webcontext/transvalidate.go | 47 ++++++++++--------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/internal/platform/web/template-renderer/template_renderer.go b/internal/platform/web/template-renderer/template_renderer.go index 5327307..efe84f5 100644 --- a/internal/platform/web/template-renderer/template_renderer.go +++ b/internal/platform/web/template-renderer/template_renderer.go @@ -17,6 +17,7 @@ import ( "geeks-accelerator/oss/saas-starter-kit/internal/platform/web" "geeks-accelerator/oss/saas-starter-kit/internal/platform/web/webcontext" "geeks-accelerator/oss/saas-starter-kit/internal/platform/web/weberror" + "github.com/pkg/errors" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" @@ -372,6 +373,8 @@ func (r *TemplateRenderer) Render(ctx context.Context, w http.ResponseWriter, re data["error"] = terr } + data["trans"] = webcontext.ContextTranslator(ctx) + // Append request data map to render data last so any previous value can be overwritten. if data != nil { for k, v := range data { diff --git a/internal/platform/web/webcontext/transvalidate.go b/internal/platform/web/webcontext/transvalidate.go index 542e777..519a15b 100644 --- a/internal/platform/web/webcontext/transvalidate.go +++ b/internal/platform/web/webcontext/transvalidate.go @@ -2,6 +2,7 @@ package webcontext import ( "context" + "log" "reflect" "strings" @@ -63,6 +64,16 @@ func init() { // Provide one or more arguments for additional supported locales. uniTrans = ut.New(en, en, fr, id, ja, nl, zh) + err := uniTrans.Import(ut.FormatJSON, "templates/content/translations") + if err != nil { + log.Fatal(err) + } + + err = uniTrans.VerifyTranslations() + if err != nil { + log.Fatal(err) + } + // this is usually know or extracted from http 'Accept-Language' header // also see uni.FindTranslator(...) transEn, _ := uniTrans.GetTranslator(en.Locale()) @@ -72,15 +83,6 @@ func init() { transNl, _ := uniTrans.GetTranslator(nl.Locale()) transZh, _ := uniTrans.GetTranslator(zh.Locale()) - transEn.Add("{{name}}", "Name", false) - transFr.Add("{{name}}", "Nom", false) - - transEn.Add("{{first_name}}", "First Name", false) - transFr.Add("{{first_name}}", "Prénom", false) - - transEn.Add("{{last_name}}", "Last Name", false) - transFr.Add("{{last_name}}", "Nom de famille", false) - validate = newValidator() en_translations.RegisterDefaultTranslations(validate, transEn) @@ -90,23 +92,22 @@ func init() { nl_translations.RegisterDefaultTranslations(validate, transNl) zh_translations.RegisterDefaultTranslations(validate, transZh) - /* - validate.RegisterTranslation("unique", transEn, func(ut ut.Translator) error { - return ut.Add("unique", "{0} must be unique", true) // see universal-translator for details - }, func(ut ut.Translator, fe validator.FieldError) string { - t, _ := ut.T("unique", fe.Field()) + validate.RegisterTranslation("unique", transEn, func(ut ut.Translator) error { + return nil + }, func(ut ut.Translator, fe validator.FieldError) string { + t, _ := ut.T("unique", fe.Field()) - return t - }) + return t + }) - validate.RegisterTranslation("unique", transFr, func(ut ut.Translator) error { - return ut.Add("unique", "{0} must be unique", true) // see universal-translator for details - }, func(ut ut.Translator, fe validator.FieldError) string { - t, _ := ut.T("unique", fe.Field()) + validate.RegisterTranslation("unique", transFr, func(ut ut.Translator) error { + return nil + }, func(ut ut.Translator, fe validator.FieldError) string { + t, _ := ut.T("unique", fe.Field()) + + return t + }) - return t - }) - */ } // ctxKeyTagUnique represents the type of unique value for the context key used by the validation function.