diff options
author | Frédéric Guillot <fred@miniflux.net> | 2018-04-27 22:07:46 -0700 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2018-04-27 22:07:46 -0700 |
commit | ddd3af4b85f5a2fe85c17a9cc30cf54743b9eb59 (patch) | |
tree | 539b491fc9f67980b09a6ccd282454614a77f8b4 /template/engine.go | |
parent | 6b360d08c1f6c8a6cd1b7608f7af734a3ceef8d7 (diff) |
Do not use shared variable to translate templates
Diffstat (limited to 'template/engine.go')
-rw-r--r-- | template/engine.go | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/template/engine.go b/template/engine.go index 7d19c8f..1afeaf9 100644 --- a/template/engine.go +++ b/template/engine.go @@ -8,8 +8,10 @@ import ( "bytes" "html/template" "io" + "time" "github.com/miniflux/miniflux/config" + "github.com/miniflux/miniflux/errors" "github.com/miniflux/miniflux/locale" "github.com/miniflux/miniflux/logger" @@ -35,18 +37,37 @@ func (e *Engine) parseAll() { } } -// SetLanguage change the language for template processing. -func (e *Engine) SetLanguage(language string) { - e.funcMap.Language = e.translator.GetLanguage(language) -} - -// Execute process a template. -func (e *Engine) Execute(w io.Writer, name string, data interface{}) { +// Render process a template and write the ouput. +func (e *Engine) Render(w io.Writer, name, language string, data interface{}) { tpl, ok := e.templates[name] if !ok { logger.Fatal("[Template] The template %s does not exists", name) } + lang := e.translator.GetLanguage(language) + tpl.Funcs(template.FuncMap{ + "elapsed": func(timezone string, t time.Time) string { + return elapsedTime(lang, timezone, t) + }, + "t": func(key interface{}, args ...interface{}) string { + switch key.(type) { + case string: + return lang.Get(key.(string), args...) + case errors.LocalizedError: + return key.(errors.LocalizedError).Localize(lang) + case *errors.LocalizedError: + return key.(*errors.LocalizedError).Localize(lang) + case error: + return key.(error).Error() + default: + return "" + } + }, + "plural": func(key string, n int, args ...interface{}) string { + return lang.Plural(key, n, args...) + }, + }) + var b bytes.Buffer err := tpl.ExecuteTemplate(&b, "base", data) if err != nil { @@ -61,7 +82,7 @@ func NewEngine(cfg *config.Config, router *mux.Router, translator *locale.Transl tpl := &Engine{ templates: make(map[string]*template.Template), translator: translator, - funcMap: newFuncMap(cfg, router, translator.GetLanguage("en_US")), + funcMap: newFuncMap(cfg, router), } tpl.parseAll() |