URI: 
       Reset the i18n func map on reload - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit fe0c270577325dcd08d5e21faa42c5288a205f93
   DIR parent 5ef45bec63b157eb8e1bd3a6a4c6cb1e98a43a94
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Thu,  8 Sep 2016 17:04:04 +0300
       
       Reset the i18n func map on reload
       
       Also improve the error message on missing resource bundles.
       
       Diffstat:
         M helpers/general.go                  |       5 +++++
         M hugolib/hugo_sites.go               |       2 ++
         M tpl/template_i18n.go                |      20 +++++++++++---------
       
       3 files changed, 18 insertions(+), 9 deletions(-)
       ---
   DIR diff --git 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)
   DIR diff --git 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 {
   DIR diff --git 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
        }