|
|
|
@ -18,10 +18,12 @@ limitations under the License.
|
|
|
|
|
package services
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"errors"
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
|
"github.com/yuin/goldmark"
|
|
|
|
|
|
|
|
|
|
"code.cacert.org/cacert/oidc_idp/translations"
|
|
|
|
|
|
|
|
|
@ -195,6 +197,35 @@ func (m *MessageCatalog) LookupMessage(
|
|
|
|
|
return id
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *MessageCatalog) LookupMarkdownMessage(
|
|
|
|
|
id string,
|
|
|
|
|
templateData map[string]interface{},
|
|
|
|
|
localizer *i18n.Localizer,
|
|
|
|
|
) string {
|
|
|
|
|
if message, ok := m.messages[id]; ok {
|
|
|
|
|
translation, err := localizer.Localize(&i18n.LocalizeConfig{
|
|
|
|
|
DefaultMessage: message,
|
|
|
|
|
TemplateData: templateData,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return m.handleLocalizeError(id, translation, err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
buf := &bytes.Buffer{}
|
|
|
|
|
|
|
|
|
|
err = goldmark.Convert([]byte(translation), buf)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return m.handleLocalizeError(id, translation, fmt.Errorf("markdown conversion error: %w", err))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return buf.String()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m.logger.Warnf("no translation found for %s", id)
|
|
|
|
|
|
|
|
|
|
return id
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *MessageCatalog) LookupMessagePlural(
|
|
|
|
|
id string,
|
|
|
|
|
templateData map[string]interface{},
|
|
|
|
@ -223,13 +254,13 @@ func (m *MessageCatalog) handleLocalizeError(id string, translation string, err
|
|
|
|
|
var messageNotFound *i18n.MessageNotFoundErr
|
|
|
|
|
|
|
|
|
|
if errors.As(err, &messageNotFound) {
|
|
|
|
|
m.logger.Warnf("message %s not found: %v", id, err)
|
|
|
|
|
m.logger.WithError(err).WithField("message", id).Warn("message not found")
|
|
|
|
|
|
|
|
|
|
if translation != "" {
|
|
|
|
|
return translation
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
m.logger.Error(err)
|
|
|
|
|
m.logger.WithError(err).WithField("message", id).Error("translation error")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return id
|
|
|
|
|