diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-01-30 17:51:18 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-01-30 18:53:07 +0100 |
commit | ae742cb1bdf35b81aa0ede5453da6b0c4a4fccf2 (patch) | |
tree | f2922d4343f9819e7ff4220ebc333b467c8f0d4b /hugolib | |
parent | feeed073c3320b09fb38168ce272ac88b987f1d2 (diff) |
Fix language params handling
This fixes some issues with language params handling by separating params from configuration values per language.
This means that you can now do this:
```toml
[languages]
[languages.en]
languageName = "English"
weight = 1
title = "My Cool Site"
[languages.en.params]
myParam = "Hi!"
```
This is not a breaking change, but the above is a less suprising way of configuring custom params.
It also fixes some hard-to-debug corner-cases in multilingual sites.
Fixes #4356
Fixes #4352
Diffstat (limited to 'hugolib')
-rw-r--r-- | hugolib/hugo_sites_build_test.go | 28 | ||||
-rw-r--r-- | hugolib/multilingual.go | 10 |
2 files changed, 32 insertions, 6 deletions
diff --git a/hugolib/hugo_sites_build_test.go b/hugolib/hugo_sites_build_test.go index cc3a940de..0cececfd7 100644 --- a/hugolib/hugo_sites_build_test.go +++ b/hugolib/hugo_sites_build_test.go @@ -141,6 +141,9 @@ func doTestMultiSitesMainLangInRoot(t *testing.T, defaultInSubDir bool) { func TestMultiSitesWithTwoLanguages(t *testing.T) { t.Parallel() + + assert := require.New(t) + mm := afero.NewMemMapFs() writeToFs(t, mm, "config.toml", ` @@ -152,11 +155,15 @@ defaultContentLanguage = "nn" languageName = "Nynorsk" weight = 1 title = "Tittel på Nynorsk" +[languages.nn.params] +p1 = "p1nn" [languages.en] title = "Title in English" languageName = "English" weight = 2 +[languages.en.params] +p1 = "p1en" `, ) @@ -176,15 +183,24 @@ weight = 2 // Add some data writeSource(t, fs, filepath.Join("data", "hugo.toml"), "slogan = \"Hugo Rocks!\"") - require.NoError(t, sites.Build(BuildCfg{})) - require.Len(t, sites.Sites, 2) + assert.NoError(sites.Build(BuildCfg{})) + assert.Len(sites.Sites, 2) nnSite := sites.Sites[0] - nnSiteHome := nnSite.getPage(KindHome) - require.Len(t, nnSiteHome.AllTranslations(), 2) - require.Len(t, nnSiteHome.Translations(), 1) - require.True(t, nnSiteHome.IsTranslated()) + nnHome := nnSite.getPage(KindHome) + assert.Len(nnHome.AllTranslations(), 2) + assert.Len(nnHome.Translations(), 1) + assert.True(nnHome.IsTranslated()) + + enHome := sites.Sites[1].getPage(KindHome) + + p1, err := enHome.Param("p1") + assert.NoError(err) + assert.Equal("p1en", p1) + p1, err = nnHome.Param("p1") + assert.NoError(err) + assert.Equal("p1nn", p1) } // diff --git a/hugolib/multilingual.go b/hugolib/multilingual.go index 589df66e0..101de7ace 100644 --- a/hugolib/multilingual.go +++ b/hugolib/multilingual.go @@ -111,10 +111,20 @@ func toSortedLanguages(cfg config.Provider, l map[string]interface{}) (helpers.L language.LanguageName = cast.ToString(v) case "weight": language.Weight = cast.ToInt(v) + case "params": + m := cast.ToStringMap(v) + // Needed for case insensitive fetching of params values + helpers.ToLowerMap(m) + for k, vv := range m { + language.SetParam(k, vv) + } } // Put all into the Params map language.SetParam(loki, v) + + // Also set it in the configuration map (for baseURL etc.) + language.Set(loki, v) } langs[i] = language |