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 /tpl | |
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 'tpl')
-rw-r--r-- | tpl/template_funcs.go | 2 | ||||
-rw-r--r-- | tpl/template_i18n.go | 47 |
2 files changed, 49 insertions, 0 deletions
diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go index 09191f41a..ed931c44b 100644 --- a/tpl/template_funcs.go +++ b/tpl/template_funcs.go @@ -1920,5 +1920,7 @@ func init() { "upper": func(a string) string { return strings.ToUpper(a) }, "urlize": helpers.URLize, "where": where, + "i18n": I18nTranslate, + "T": I18nTranslate, } } diff --git a/tpl/template_i18n.go b/tpl/template_i18n.go new file mode 100644 index 000000000..3b0f0cb63 --- /dev/null +++ b/tpl/template_i18n.go @@ -0,0 +1,47 @@ +// Copyright 2015 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 tpl + +import ( + "fmt" + + "github.com/nicksnyder/go-i18n/i18n/bundle" + jww "github.com/spf13/jwalterweatherman" +) + +var i18nTfunc bundle.TranslateFunc + +func SetI18nTfunc(lang string, bndl *bundle.Bundle) { + tFunc, err := bndl.Tfunc(lang) + if err == nil { + i18nTfunc = tFunc + return + } + + jww.WARN.Printf("could not load translations for language %q (%s), will not translate!\n", lang, err.Error()) + i18nTfunc = bundle.TranslateFunc(func(id string, args ...interface{}) string { + // TODO: depending on the site mode, we might want to fall back on the default + // language's translation. + // TODO: eventually, we could add --i18n-warnings and print something when + // such things happen. + return fmt.Sprintf("[i18n: %s]", id) + }) +} + +func I18nTranslate(id string, args ...interface{}) (string, error) { + if i18nTfunc == nil { + return "", fmt.Errorf("i18n not initialized, have you configured everything properly?") + } + return i18nTfunc(id, args...), nil +} |