mirror of
https://github.com/gohugoio/hugo.git
synced 2024-07-02 15:20:28 +00:00
![Alexandre Bourget](/assets/img/avatar_default.png)
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..
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
package hugolib
|
|
|
|
import (
|
|
"github.com/spf13/cast"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
type Multilingual struct {
|
|
enabled bool
|
|
config *viper.Viper
|
|
|
|
Languages []string
|
|
}
|
|
|
|
func (ml *Multilingual) GetString(key string) string { return cast.ToString(ml.Get(key)) }
|
|
func (ml *Multilingual) GetStringMap(key string) map[string]interface{} {
|
|
return cast.ToStringMap(ml.Get(key))
|
|
}
|
|
|
|
func (ml *Multilingual) GetStringMapString(key string) map[string]string {
|
|
return cast.ToStringMapString(ml.Get(key))
|
|
}
|
|
|
|
func (ml *Multilingual) Get(key string) interface{} {
|
|
if ml != nil && ml.config != nil && ml.config.IsSet(key) {
|
|
return ml.config.Get(key)
|
|
}
|
|
return viper.Get(key)
|
|
}
|
|
|
|
func (s *Site) SetMultilingualConfig(currentLang string, orderedLanguages []string, langConfigs map[string]interface{}) {
|
|
conf := viper.New()
|
|
for k, val := range cast.ToStringMap(langConfigs[currentLang]) {
|
|
conf.Set(k, val)
|
|
}
|
|
conf.Set("CurrentLanguage", currentLang)
|
|
ml := &Multilingual{
|
|
enabled: len(langConfigs) > 0,
|
|
config: conf,
|
|
Languages: orderedLanguages,
|
|
}
|
|
viper.Set("Multilingual", ml.enabled)
|
|
s.Multilingual = ml
|
|
}
|
|
|
|
func (s *Site) multilingualEnabled() bool {
|
|
return s.Multilingual != nil && s.Multilingual.enabled
|
|
}
|