Reset the i18n func map on reload
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 8 Sep 2016 14:04:04 +0000 (17:04 +0300)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 8 Sep 2016 14:18:11 +0000 (17:18 +0300)
Also improve the error message on missing resource bundles.

helpers/general.go
hugolib/hugo_sites.go
tpl/template_i18n.go

index 2237125d7667c21056ebea092321cedff687407f..7fac7cb590d6be184a9013c83feda726efb4dfe2 100644 (file)
@@ -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)
index c0e077bd16b24d8e9c451871d7b6aef14e9b97e2..9c8331838516fca7f4e7a68429322c4c3d25be47 100644 (file)
@@ -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 {
index e46e49bdb97199847a6bf4f5bd276d7def890c89..7abe29980f40efd607d775d869bd9218a7799d44 100644 (file)
@@ -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
 }