move translation logic from notifications to own package
Signed-off-by: jkoberg <jkoberg@owncloud.com>
This commit is contained in:
@@ -2,29 +2,36 @@ package email
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"embed"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/owncloud/ocis/v2/services/notifications/pkg/email/l10n"
|
||||
"github.com/owncloud/ocis/v2/ocis-pkg/l10n"
|
||||
)
|
||||
|
||||
var (
|
||||
//go:embed l10n/locale
|
||||
_translationFS embed.FS
|
||||
_domain = "notifications"
|
||||
)
|
||||
|
||||
// NewTextTemplate replace the body message template placeholders with the translated template
|
||||
func NewTextTemplate(mt MessageTemplate, locale, defaultLocale string, translationPath string, vars map[string]string) (MessageTemplate, error) {
|
||||
var err error
|
||||
t := l10n.NewTranslator(locale, defaultLocale, translationPath)
|
||||
mt.Subject, err = composeMessage(t.Translate(mt.Subject), vars)
|
||||
t := l10n.NewTranslatorFromCommonConfig(defaultLocale, _domain, translationPath, _translationFS, "l10n/locale").Locale(locale)
|
||||
mt.Subject, err = composeMessage(t.Get(mt.Subject), vars)
|
||||
if err != nil {
|
||||
return mt, err
|
||||
}
|
||||
mt.Greeting, err = composeMessage(t.Translate(mt.Greeting), vars)
|
||||
mt.Greeting, err = composeMessage(t.Get(mt.Greeting), vars)
|
||||
if err != nil {
|
||||
return mt, err
|
||||
}
|
||||
mt.MessageBody, err = composeMessage(t.Translate(mt.MessageBody), vars)
|
||||
mt.MessageBody, err = composeMessage(t.Get(mt.MessageBody), vars)
|
||||
if err != nil {
|
||||
return mt, err
|
||||
}
|
||||
mt.CallToAction, err = composeMessage(t.Translate(mt.CallToAction), vars)
|
||||
mt.CallToAction, err = composeMessage(t.Get(mt.CallToAction), vars)
|
||||
if err != nil {
|
||||
return mt, err
|
||||
}
|
||||
@@ -34,20 +41,20 @@ func NewTextTemplate(mt MessageTemplate, locale, defaultLocale string, translati
|
||||
// NewHTMLTemplate replace the body message template placeholders with the translated template
|
||||
func NewHTMLTemplate(mt MessageTemplate, locale, defaultLocale string, translationPath string, vars map[string]string) (MessageTemplate, error) {
|
||||
var err error
|
||||
t := l10n.NewTranslator(locale, defaultLocale, translationPath)
|
||||
mt.Subject, err = composeMessage(t.Translate(mt.Subject), vars)
|
||||
t := l10n.NewTranslatorFromCommonConfig(defaultLocale, _domain, translationPath, _translationFS, "l10n/locale").Locale(locale)
|
||||
mt.Subject, err = composeMessage(t.Get(mt.Subject), vars)
|
||||
if err != nil {
|
||||
return mt, err
|
||||
}
|
||||
mt.Greeting, err = composeMessage(newlineToBr(t.Translate(mt.Greeting)), vars)
|
||||
mt.Greeting, err = composeMessage(newlineToBr(t.Get(mt.Greeting)), vars)
|
||||
if err != nil {
|
||||
return mt, err
|
||||
}
|
||||
mt.MessageBody, err = composeMessage(newlineToBr(t.Translate(mt.MessageBody)), vars)
|
||||
mt.MessageBody, err = composeMessage(newlineToBr(t.Get(mt.MessageBody)), vars)
|
||||
if err != nil {
|
||||
return mt, err
|
||||
}
|
||||
mt.CallToAction, err = composeMessage(callToActionToHTML(t.Translate(mt.CallToAction)), vars)
|
||||
mt.CallToAction, err = composeMessage(callToActionToHTML(t.Get(mt.CallToAction)), vars)
|
||||
if err != nil {
|
||||
return mt, err
|
||||
}
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
// Package l10n implements utility for translation the text templates.
|
||||
//
|
||||
// The l10n package use transifex translation for text templates.
|
||||
package l10n
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"io/fs"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
)
|
||||
|
||||
var (
|
||||
//go:embed locale
|
||||
_translationFS embed.FS
|
||||
_domain = "notifications"
|
||||
)
|
||||
|
||||
// Translator is the interface to the translation
|
||||
type Translator interface {
|
||||
Translate(str string) string
|
||||
}
|
||||
|
||||
type translator struct {
|
||||
locale *gotext.Locale
|
||||
}
|
||||
|
||||
// NewTranslator Create Translator with library path and language code and load default domain
|
||||
func NewTranslator(locale, defaultLocale string, path string) Translator {
|
||||
l := newLocate(locale, path)
|
||||
if locale != "en" && len(l.GetTranslations()) == 0 {
|
||||
l = newLocate(defaultLocale, path)
|
||||
}
|
||||
return &translator{locale: l}
|
||||
}
|
||||
|
||||
func newLocate(local string, path string) *gotext.Locale {
|
||||
var l *gotext.Locale
|
||||
if path == "" {
|
||||
filesystem, _ := fs.Sub(_translationFS, "locale")
|
||||
l = gotext.NewLocaleFS(local, filesystem)
|
||||
} else { // use custom path instead
|
||||
l = gotext.NewLocale(path, local)
|
||||
}
|
||||
l.AddDomain(_domain) // make domain configurable only if needed
|
||||
return l
|
||||
}
|
||||
|
||||
func (t *translator) Translate(str string) string {
|
||||
return t.locale.Get(str)
|
||||
}
|
||||
Reference in New Issue
Block a user