summaryrefslogtreecommitdiffstats
path: root/langs/language.go
diff options
context:
space:
mode:
Diffstat (limited to 'langs/language.go')
-rw-r--r--langs/language.go22
1 files changed, 19 insertions, 3 deletions
diff --git a/langs/language.go b/langs/language.go
index 67cb3689a..0e04324e9 100644
--- a/langs/language.go
+++ b/langs/language.go
@@ -16,6 +16,7 @@ package langs
import (
"sort"
"strings"
+ "sync"
"github.com/gohugoio/hugo/common/maps"
"github.com/gohugoio/hugo/config"
@@ -56,7 +57,9 @@ type Language struct {
// These are params declared in the [params] section of the language merged with the
// site's params, the most specific (language) wins on duplicate keys.
- params map[string]interface{}
+ params map[string]interface{}
+ paramsMu sync.Mutex
+ paramsSet bool
// These are config values, i.e. the settings declared outside of the [params] section of the language.
// This is the map Hugo looks in when looking for configuration values (baseURL etc.).
@@ -123,7 +126,15 @@ func (l Languages) Less(i, j int) bool {
func (l Languages) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
// Params retunrs language-specific params merged with the global params.
-func (l *Language) Params() map[string]interface{} {
+func (l *Language) Params() maps.Params {
+ // TODO(bep) this construct should not be needed. Create the
+ // language params in one go.
+ l.paramsMu.Lock()
+ defer l.paramsMu.Unlock()
+ if !l.paramsSet {
+ maps.ToLower(l.params)
+ l.paramsSet = true
+ }
return l.params
}
@@ -163,7 +174,12 @@ func (l Languages) IsMultihost() bool {
// SetParam sets a param with the given key and value.
// SetParam is case-insensitive.
func (l *Language) SetParam(k string, v interface{}) {
- l.params[strings.ToLower(k)] = v
+ l.paramsMu.Lock()
+ defer l.paramsMu.Unlock()
+ if l.paramsSet {
+ panic("params cannot be changed once set")
+ }
+ l.params[k] = v
}
// GetBool returns the value associated with the key as a boolean.