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 /hugolib/translations.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 'hugolib/translations.go')
-rw-r--r-- | hugolib/translations.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/hugolib/translations.go b/hugolib/translations.go new file mode 100644 index 000000000..b503071d8 --- /dev/null +++ b/hugolib/translations.go @@ -0,0 +1,59 @@ +// Copyright 2016 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 + +// Translations represent the other translations for a given page. The +// string here is the language code, as affected by the `post.LANG.md` +// filename. +type Translations map[string]*Page + +func pagesToTranslationsMap(pages []*Page) map[string]Translations { + out := make(map[string]Translations) + + for _, page := range pages { + base := page.TranslationBaseName() + + pageTranslation, present := out[base] + if !present { + pageTranslation = make(Translations) + } + + pageLang := page.Lang() + if pageLang == "" { + continue + } + + pageTranslation[pageLang] = page + out[base] = pageTranslation + } + + return out +} + +func assignTranslationsToPages(allTranslations map[string]Translations, pages []*Page) { + for _, page := range pages { + base := page.TranslationBaseName() + trans, exist := allTranslations[base] + if !exist { + continue + } + + for lang, translatedPage := range trans { + if translatedPage == page { + continue + } + page.Translations[lang] = translatedPage + } + } +} |