mirror of
https://github.com/gohugoio/hugo.git
synced 2024-12-26 12:41:07 +00:00
ec33732fbe
Implements: * support to render: * content/post/whatever.en.md to /en/2015/12/22/whatever/index.html * content/post/whatever.fr.md to /fr/2015/12/22/whatever/index.html * gets enabled when `Multilingual:` is specified in config. * support having language switchers in templates, that know where the translated page is (with .Page.Translations) (when you're on /en/about/, you can have a "Francais" link pointing to /fr/a-propos/) * all translations are in the `.Page.Translations` map, including the current one. * easily tweak themes to support Multilingual mode * renders in a single swift, no need for two config files. Adds a couple of variables useful for multilingual sites Adds documentation (content/multilingual.md) Added language prefixing for all URL generation/permalinking see in the code base. Implements i18n. Leverages the great github.com/nicksnyder/go-i18n lib.. thanks Nick. * Adds "i18n" and "T" template functions..
41 lines
992 B
Go
41 lines
992 B
Go
package commands
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"github.com/spf13/cast"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var langConfigs map[string]interface{}
|
|
var langConfigsList langConfigsSortable
|
|
|
|
func readMultilingualConfiguration() {
|
|
multilingual := viper.GetStringMap("Multilingual")
|
|
if len(multilingual) == 0 {
|
|
langConfigsList = append(langConfigsList, "")
|
|
return
|
|
}
|
|
|
|
langConfigs = make(map[string]interface{})
|
|
for lang, config := range multilingual {
|
|
langConfigs[lang] = config
|
|
langConfigsList = append(langConfigsList, lang)
|
|
}
|
|
sort.Sort(langConfigsList)
|
|
}
|
|
|
|
type langConfigsSortable []string
|
|
|
|
func (p langConfigsSortable) Len() int { return len(p) }
|
|
func (p langConfigsSortable) Less(i, j int) bool { return weightForLang(p[i]) < weightForLang(p[j]) }
|
|
func (p langConfigsSortable) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
|
|
|
func weightForLang(lang string) int {
|
|
conf := langConfigs[lang]
|
|
if conf == nil {
|
|
return 0
|
|
}
|
|
m := cast.ToStringMap(conf)
|
|
return cast.ToInt(m["weight"])
|
|
}
|