mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
parent
e3dc5240f0
commit
4d221ce468
3 changed files with 49 additions and 15 deletions
|
@ -15,6 +15,9 @@ package hugolib
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
qt "github.com/frankban/quicktest"
|
||||||
|
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
@ -186,3 +189,17 @@ ExpiryDate: 2099-07-13 15:28:01 +0000 UTC`
|
||||||
b.AssertFileContent("public/nn/short-date-toml-qouted/index.html", expectShortDateNn)
|
b.AssertFileContent("public/nn/short-date-toml-qouted/index.html", expectShortDateNn)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Issue 8832
|
||||||
|
func TestTimeZoneInvalid(t *testing.T) {
|
||||||
|
b := newTestSitesBuilder(t)
|
||||||
|
|
||||||
|
b.WithConfigFile("toml", `
|
||||||
|
|
||||||
|
timeZone = "America/LosAngeles" # Should be America/Los_Angeles
|
||||||
|
`)
|
||||||
|
|
||||||
|
err := b.CreateSitesE()
|
||||||
|
b.Assert(err, qt.Not(qt.IsNil))
|
||||||
|
b.Assert(err.Error(), qt.Contains, `failed to load config: invalid timeZone for language "en": unknown time zone America/LosAngeles`)
|
||||||
|
}
|
||||||
|
|
|
@ -161,6 +161,12 @@ func LoadLanguageSettings(cfg config.Provider, oldLangs Languages) (c LanguagesC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, language := range c.Languages {
|
||||||
|
if language.initErr != nil {
|
||||||
|
return c, language.initErr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,6 +203,10 @@ func toSortedLanguages(cfg config.Provider, l map[string]interface{}) (Languages
|
||||||
for k, vv := range m {
|
for k, vv := range m {
|
||||||
language.SetParam(k, vv)
|
language.SetParam(k, vv)
|
||||||
}
|
}
|
||||||
|
case "timezone":
|
||||||
|
if err := language.loadLocation(cast.ToString(v)); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put all into the Params map
|
// Put all into the Params map
|
||||||
|
|
|
@ -19,6 +19,8 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
translators "github.com/bep/gotranslators"
|
translators "github.com/bep/gotranslators"
|
||||||
"github.com/go-playground/locales"
|
"github.com/go-playground/locales"
|
||||||
"github.com/gohugoio/hugo/common/maps"
|
"github.com/gohugoio/hugo/common/maps"
|
||||||
|
@ -77,8 +79,10 @@ type Language struct {
|
||||||
// TODO(bep) do the same for some of the others.
|
// TODO(bep) do the same for some of the others.
|
||||||
translator locales.Translator
|
translator locales.Translator
|
||||||
|
|
||||||
locationInit sync.Once
|
|
||||||
location *time.Location
|
location *time.Location
|
||||||
|
|
||||||
|
// Error during initialization. Will fail the buld.
|
||||||
|
initErr error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Language) String() string {
|
func (l *Language) String() string {
|
||||||
|
@ -113,6 +117,11 @@ func NewLanguage(lang string, cfg config.Provider) *Language {
|
||||||
params: params,
|
params: params,
|
||||||
translator: translator,
|
translator: translator,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := l.loadLocation(cfg.GetString("timeZone")); err != nil {
|
||||||
|
l.initErr = err
|
||||||
|
}
|
||||||
|
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,18 +257,6 @@ func (l *Language) IsSet(key string) bool {
|
||||||
return l.Cfg.IsSet(key)
|
return l.Cfg.IsSet(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Language) getLocation() *time.Location {
|
|
||||||
l.locationInit.Do(func() {
|
|
||||||
location, err := time.LoadLocation(l.GetString("timeZone"))
|
|
||||||
if err != nil {
|
|
||||||
location = time.UTC
|
|
||||||
}
|
|
||||||
l.location = location
|
|
||||||
})
|
|
||||||
|
|
||||||
return l.location
|
|
||||||
}
|
|
||||||
|
|
||||||
// Internal access to unexported Language fields.
|
// Internal access to unexported Language fields.
|
||||||
// This construct is to prevent them from leaking to the templates.
|
// This construct is to prevent them from leaking to the templates.
|
||||||
|
|
||||||
|
@ -268,5 +265,15 @@ func GetTranslator(l *Language) locales.Translator {
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetLocation(l *Language) *time.Location {
|
func GetLocation(l *Language) *time.Location {
|
||||||
return l.getLocation()
|
return l.location
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Language) loadLocation(tzStr string) error {
|
||||||
|
location, err := time.LoadLocation(tzStr)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrapf(err, "invalid timeZone for language %q", l.Lang)
|
||||||
|
}
|
||||||
|
l.location = location
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue