diff --git a/helpers/general.go b/helpers/general.go index 2237125d7..7fac7cb59 100644 --- a/helpers/general.go +++ b/helpers/general.go @@ -229,6 +229,11 @@ func NewDistinctFeedbackLogger() *DistinctLogger { // DistinctErrorLog cann be used to avoid spamming the logs with errors. var DistinctErrorLog = NewDistinctErrorLogger() +// InitLoggers sets up the global distinct loggers. +func InitLoggers() { + DistinctErrorLog = NewDistinctErrorLogger() +} + // Deprecated logs ERROR logs about a deprecation, but only once for a given set of arguments' values. func Deprecated(object, item, alternative string) { // deprecatedLogger.Printf("%s's %s is deprecated and will be removed in Hugo %s. Use %s instead.", object, item, NextHugoReleaseVersion(), alternative) diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index c0e077bd1..9c8331838 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -276,6 +276,8 @@ func (h *HugoSites) Rebuild(config BuildCfg, events ...fsnotify.Event) error { s.resetBuildState() } + helpers.InitLoggers() + changed, err := firstSite.reBuild(events) if err != nil { diff --git a/tpl/template_i18n.go b/tpl/template_i18n.go index e46e49bdb..7abe29980 100644 --- a/tpl/template_i18n.go +++ b/tpl/template_i18n.go @@ -33,21 +33,22 @@ type translate struct { current bundle.TranslateFunc } -var translater *translate = &translate{translateFuncs: make(map[string]bundle.TranslateFunc)} +var translator *translate // SetTranslateLang sets the translations language to use during template processing. // This construction is unfortunate, but the template system is currently global. func SetTranslateLang(lang string) error { - if f, ok := translater.translateFuncs[lang]; ok { - translater.current = f + if f, ok := translator.translateFuncs[lang]; ok { + translator.current = f } else { jww.WARN.Printf("Translation func for language %v not found, use default.", lang) - translater.current = translater.translateFuncs[viper.GetString("DefaultContentLanguage")] + translator.current = translator.translateFuncs[viper.GetString("DefaultContentLanguage")] } return nil } func SetI18nTfuncs(bndl *bundle.Bundle) { + translator = &translate{translateFuncs: make(map[string]bundle.TranslateFunc)} defaultContentLanguage := viper.GetString("DefaultContentLanguage") var ( defaultT bundle.TranslateFunc @@ -66,10 +67,10 @@ func SetI18nTfuncs(bndl *bundle.Bundle) { if err != nil { jww.WARN.Printf("could not load translations for language %q (%s), will use default content language.\n", lang, err) - translater.translateFuncs[currentLang] = defaultT + translator.translateFuncs[currentLang] = defaultT continue } - translater.translateFuncs[currentLang] = func(translationID string, args ...interface{}) string { + translator.translateFuncs[currentLang] = func(translationID string, args ...interface{}) string { if translated := tFunc(translationID, args...); translated != translationID { return translated } @@ -85,8 +86,9 @@ func SetI18nTfuncs(bndl *bundle.Bundle) { } func I18nTranslate(id string, args ...interface{}) (string, error) { - if translater == nil || translater.current == nil { - return "", fmt.Errorf("i18n not initialized, have you configured everything properly?") + if translator == nil || translator.current == nil { + helpers.DistinctErrorLog.Printf("i18n not initialized, check that you have language file (in i18n) that matches the site language or the default language.") + return "", nil } - return translater.current(id, args...), nil + return translator.current(id, args...), nil }