diff options
author | Alexandre Bourget <alex@bourget.cc> | 2016-05-14 00:35:16 -0400 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-09-06 18:32:15 +0300 |
commit | ec33732fbe84f67c1164fb713d6cb738609f2e2e (patch) | |
tree | e4d361fda15e254617fb0fc2fdba275a269afc65 /commands/multilingual.go | |
parent | faa3472fa299adb287d575e6d404d4ddcddbff4e (diff) |
Add multilingual support in Hugo
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..
Diffstat (limited to 'commands/multilingual.go')
-rw-r--r-- | commands/multilingual.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/commands/multilingual.go b/commands/multilingual.go new file mode 100644 index 000000000..68da7c96d --- /dev/null +++ b/commands/multilingual.go @@ -0,0 +1,41 @@ +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"]) +} |