summaryrefslogtreecommitdiffstats
path: root/hugolib/multilingual.go
diff options
context:
space:
mode:
Diffstat (limited to 'hugolib/multilingual.go')
-rw-r--r--hugolib/multilingual.go119
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)