diff options
Diffstat (limited to 'hugolib/multilingual.go')
-rw-r--r-- | hugolib/multilingual.go | 119 |
1 files changed, 28 insertions, 91 deletions
diff --git a/hugolib/multilingual.go b/hugolib/multilingual.go index 9c5342f99..610587659 100644 --- a/hugolib/multilingual.go +++ b/hugolib/multilingual.go @@ -1,3 +1,16 @@ +// Copyright 2016-present The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package hugolib import ( @@ -10,58 +23,21 @@ import ( "fmt" "github.com/spf13/cast" - "github.com/spf13/viper" + "github.com/spf13/hugo/helpers" ) -type Language struct { - Lang string - Title string - Weight int - params map[string]interface{} - paramsInit sync.Once -} - -func NewLanguage(lang string) *Language { - return &Language{Lang: lang, params: make(map[string]interface{})} -} - -func newDefaultLanguage() *Language { - defaultLang := viper.GetString("DefaultContentLanguage") - - if defaultLang == "" { - defaultLang = "en" - } - - return NewLanguage(defaultLang) -} - -type Languages []*Language - -func NewLanguages(l ...*Language) Languages { - languages := make(Languages, len(l)) - for i := 0; i < len(l); i++ { - languages[i] = l[i] - } - sort.Sort(languages) - return languages -} - -func (l Languages) Len() int { return len(l) } -func (l Languages) Less(i, j int) bool { return l[i].Weight < l[j].Weight } -func (l Languages) Swap(i, j int) { l[i], l[j] = l[j], l[i] } - type Multilingual struct { - Languages Languages + Languages helpers.Languages - DefaultLang *Language + DefaultLang *helpers.Language - langMap map[string]*Language + langMap map[string]*helpers.Language langMapInit sync.Once } -func (ml *Multilingual) Language(lang string) *Language { +func (ml *Multilingual) Language(lang string) *helpers.Language { ml.langMapInit.Do(func() { - ml.langMap = make(map[string]*Language) + ml.langMap = make(map[string]*helpers.Language) for _, l := range ml.Languages { ml.langMap[l.Lang] = l } @@ -70,7 +46,7 @@ func (ml *Multilingual) Language(lang string) *Language { } func newMultiLingualFromSites(sites ...*Site) (*Multilingual, error) { - languages := make(Languages, len(sites)) + languages := make(helpers.Languages, len(sites)) for i, s := range sites { if s.Language == nil { @@ -79,61 +55,22 @@ func newMultiLingualFromSites(sites ...*Site) (*Multilingual, error) { languages[i] = s.Language } - return &Multilingual{Languages: languages, DefaultLang: newDefaultLanguage()}, nil + return &Multilingual{Languages: languages, DefaultLang: helpers.NewDefaultLanguage()}, nil } func newMultiLingualDefaultLanguage() *Multilingual { - return newMultiLingualForLanguage(newDefaultLanguage()) + return newMultiLingualForLanguage(helpers.NewDefaultLanguage()) } -func newMultiLingualForLanguage(language *Language) *Multilingual { - languages := Languages{language} +func newMultiLingualForLanguage(language *helpers.Language) *Multilingual { + languages := helpers.Languages{language} return &Multilingual{Languages: languages, DefaultLang: language} } func (ml *Multilingual) enabled() bool { return len(ml.Languages) > 1 } -func (l *Language) Params() map[string]interface{} { - l.paramsInit.Do(func() { - // Merge with global config. - // TODO(bep) consider making this part of a constructor func. - - globalParams := viper.GetStringMap("Params") - for k, v := range globalParams { - if _, ok := l.params[k]; !ok { - l.params[k] = v - } - } - }) - return l.params -} - -func (l *Language) SetParam(k string, v interface{}) { - l.params[k] = v -} - -func (l *Language) GetString(key string) string { return cast.ToString(l.Get(key)) } -func (ml *Language) GetStringMap(key string) map[string]interface{} { - return cast.ToStringMap(ml.Get(key)) -} - -func (l *Language) GetStringMapString(key string) map[string]string { - return cast.ToStringMapString(l.Get(key)) -} - -func (l *Language) Get(key string) interface{} { - if l == nil { - panic("language not set") - } - key = strings.ToLower(key) - if v, ok := l.params[key]; ok { - return v - } - return viper.Get(key) -} - func (s *Site) multilingualEnabled() bool { return s.Multilingual != nil && s.Multilingual.enabled() } @@ -143,12 +80,12 @@ func (s *Site) currentLanguageString() string { return s.currentLanguage().Lang } -func (s *Site) currentLanguage() *Language { +func (s *Site) currentLanguage() *helpers.Language { return s.Language } -func toSortedLanguages(l map[string]interface{}) (Languages, error) { - langs := make(Languages, len(l)) +func toSortedLanguages(l map[string]interface{}) (helpers.Languages, error) { + langs := make(helpers.Languages, len(l)) i := 0 for lang, langConf := range l { @@ -158,7 +95,7 @@ func toSortedLanguages(l map[string]interface{}) (Languages, error) { return nil, fmt.Errorf("Language config is not a map: %v", langsMap) } - language := NewLanguage(lang) + language := helpers.NewLanguage(lang) for k, v := range langsMap { loki := strings.ToLower(k) |