github.com/gocaveman/caveman@v0.0.0-20191211162744-0ddf99dbdf6e/i18n/processor.go (about) 1 package i18n 2 3 import ( 4 "bytes" 5 "html/template" 6 "strings" 7 ) 8 9 // Process provides a simple and fast way to execute Go template rendering logic in an i18n string. 10 // TODO: examples of use-cases 11 type Processor interface { 12 Process(s string, ctx interface{}) (string, error) 13 } 14 15 // NewDefaultProcessor makes a new instance with default settings. 16 func NewDefaultProcessor() *DefaultProcessor { 17 return &DefaultProcessor{} 18 } 19 20 // DefaultProcessor is the default implementation of the Processor interface. 21 type DefaultProcessor struct{} 22 23 func (p *DefaultProcessor) Process(s string, ctx interface{}) (string, error) { 24 25 // if no template code in string just return as-is 26 if !strings.Contains(s, "{{") { 27 return s, nil 28 } 29 30 // TODO: LRU cache? 31 32 var err error 33 t := template.New("_") 34 t, err = t.Parse(s) 35 if err != nil { 36 return s, err 37 } 38 39 var buf bytes.Buffer 40 err = t.ExecuteTemplate(&buf, "_", ctx) 41 if err != nil { 42 return s, err 43 } 44 45 return buf.String(), nil 46 }