From d8a256c155d23ad451625fcb292b297d85888c4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 10 Aug 2016 22:46:02 +0200 Subject: [PATCH] Fix YAML loading of multilingual config And some other minor fixes from code review. Updates #2309 --- helpers/url.go | 7 ++-- hugolib/hugo_sites.go | 4 +-- hugolib/hugo_sites_test.go | 67 ++++++++++++++++++++++++++++++++++++-- hugolib/multilingual.go | 6 ++-- hugolib/site.go | 2 +- 5 files changed, 74 insertions(+), 12 deletions(-) diff --git a/helpers/url.go b/helpers/url.go index 4d06fb042..1d87cf89f 100644 --- a/helpers/url.go +++ b/helpers/url.go @@ -183,12 +183,13 @@ func AbsURL(in string, addLanguage bool) string { } func getLanguagePrefix() string { - defaultLang := viper.GetString("DefaultContentLanguage") - defaultInSubDir := viper.GetBool("DefaultContentLanguageInSubdir") - if !viper.GetBool("Multilingual") { return "" } + + defaultLang := viper.GetString("DefaultContentLanguage") + defaultInSubDir := viper.GetBool("DefaultContentLanguageInSubdir") + currentLang := viper.Get("CurrentContentLanguage").(*Language).Lang if currentLang == "" || (currentLang == defaultLang && !defaultInSubDir) { return "" diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index 8e97e0783..d05415d98 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -385,9 +385,9 @@ func (h *HugoSites) setupTranslations(master *Site) { } } -// preRender performs build tasks that needs to be done as late as possible. +// preRender performs build tasks that need to be done as late as possible. // Shortcode handling is the main task in here. -// TODO(bep) We need to look at the whole handler-chain construct witht he below in mind. +// TODO(bep) We need to look at the whole handler-chain construct with he below in mind. func (h *HugoSites) preRender() error { for _, s := range h.Sites { diff --git a/hugolib/hugo_sites_test.go b/hugolib/hugo_sites_test.go index 26a294d5e..c5a226dc2 100644 --- a/hugolib/hugo_sites_test.go +++ b/hugolib/hugo_sites_test.go @@ -160,9 +160,22 @@ func assertFileContent(t *testing.T, filename string, defaultInSubDir bool, matc } } +// func TestMultiSitesBuild(t *testing.T) { + for _, config := range []struct { + content string + suffix string + }{ + {multiSiteTomlConfig, "toml"}, + {multiSiteYAMLConfig, "yml"}, + } { + doTestMultiSitesBuild(t, config.content, config.suffix) + } +} + +func doTestMultiSitesBuild(t *testing.T, configContent, configSuffix string) { testCommonResetState() - sites := createMultiTestSites(t, multiSiteTomlConfig) + sites := createMultiTestSitesForConfig(t, configContent, configSuffix) err := sites.Build(BuildCfg{}) @@ -598,7 +611,54 @@ title = "Bokmål" lag = "lag" ` +var multiSiteYAMLConfig = ` +DefaultExtension: "html" +baseurl: "http://example.com/blog" +DisableSitemap: false +DisableRSS: false +RSSUri: "index.xml" + +paginate: 1 +DefaultContentLanguage: "fr" + +permalinks: + other: "/somewhere/else/:filename" + +blackfriday: + angledQuotes: true + +Taxonomies: + tag: "tags" + +Languages: + en: + weight: 10 + title: "English" + blackfriday: + angledQuotes: false + fr: + weight: 20 + title: "Français" + Taxonomies: + plaque: "plaques" + nn: + weight: 30 + title: "Nynorsk" + Taxonomies: + lag: "lag" + nb: + weight: 40 + title: "Bokmål" + Taxonomies: + lag: "lag" + +` + func createMultiTestSites(t *testing.T, tomlConfig string) *HugoSites { + return createMultiTestSitesForConfig(t, tomlConfig, "toml") +} + +func createMultiTestSitesForConfig(t *testing.T, configContent, configSuffix string) *HugoSites { // Add some layouts if err := afero.WriteFile(hugofs.Source(), @@ -760,8 +820,9 @@ lag: `)}, } - writeSource(t, "multilangconfig.toml", tomlConfig) - if err := LoadGlobalConfig("", "multilangconfig.toml"); err != nil { + configFile := "multilangconfig." + configSuffix + writeSource(t, configFile, configContent) + if err := LoadGlobalConfig("", configFile); err != nil { t.Fatalf("Failed to load config: %s", err) } diff --git a/hugolib/multilingual.go b/hugolib/multilingual.go index c59b3b649..493a8e8a3 100644 --- a/hugolib/multilingual.go +++ b/hugolib/multilingual.go @@ -83,10 +83,10 @@ func toSortedLanguages(l map[string]interface{}) (helpers.Languages, error) { i := 0 for lang, langConf := range l { - langsMap, ok := langConf.(map[string]interface{}) + langsMap, err := cast.ToStringMapE(langConf) - if !ok { - return nil, fmt.Errorf("Language config is not a map: %v", langsMap) + if err != nil { + return nil, fmt.Errorf("Language config is not a map: %T", langConf) } language := helpers.NewLanguage(lang) diff --git a/hugolib/site.go b/hugolib/site.go index 8403a6af0..94c9efab7 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -777,7 +777,7 @@ func (s *Site) setupPrevNext() { } func (s *Site) render() (err error) { - // There are sadly some global template funcs etc. that needs the language information. + // There are sadly some global template funcs etc. that need the language information. viper.Set("Multilingual", s.multilingualEnabled()) viper.Set("CurrentContentLanguage", s.Language) if err = tpl.SetTranslateLang(s.Language.Lang); err != nil {