From e80453a991b84280181555b8186730918ae8ee0a Mon Sep 17 00:00:00 2001 From: digitalcraftsman Date: Fri, 16 Sep 2016 17:20:29 +0200 Subject: [PATCH] tpl: Add EnableMissingTranslationPlaceholders option Fixes #2451 --- docs/content/content/multilingual.md | 13 +++++++++++++ docs/content/overview/configuration.md | 2 ++ hugolib/config.go | 1 + tpl/template_i18n.go | 4 ++++ 4 files changed, 20 insertions(+) diff --git a/docs/content/content/multilingual.md b/docs/content/content/multilingual.md index a89b28108..86da75409 100644 --- a/docs/content/content/multilingual.md +++ b/docs/content/content/multilingual.md @@ -119,7 +119,9 @@ From within your templates, use the `i18n` function like this: ``` {{ i18n "home" }} ``` + This uses a definition like this one in `i18n/en-US.yaml`: + ``` - id: home translation: "Home" @@ -130,11 +132,14 @@ Often you will want to use to the page variables in the translations strings. To ``` {{ i18n "wordCount" . }} ``` + This uses a definition like this one in `i18n/en-US.yaml`: + ``` - id: wordCount translation: "This article has {{ .WordCount }} words." ``` + To track down missing translation strings, run Hugo with the `--i18n-warnings` flag: ```bash @@ -143,6 +148,7 @@ i18n|MISSING_TRANSLATION|en|wordCount ``` + ### Menus You can define your menus for each language independently. The [creation of a menu]({{< relref "extras/menus.md" >}}) works analogous to earlier versions of Hugo, except that they have to be defined in their language-specific block in the configuration file: @@ -184,6 +190,13 @@ The rendering of the main navigation works as usual. `.Site.Menus` will just con ``` +An empty string will be shown if the translation for the current language is missing and no default value is set. + +While translating a Hugo website it can be handy to have a visual indicator as well. The `EnableMissingTranslationPlaceholders` config option allows you to replace the empty string with a placeholder like `[i18n] identifier`, where `identifier` is the id of the missing translation. + +**Remember: Hugo will generate your website with these placeholders. It might not be suited for production environments.** + + ### Multilingual Themes support To support Multilingual mode in your themes, some considerations must be taken for the URLs in the templates. If there are more than one language, URLs must either come from the built-in `.Permalink` or `.URL`, be constructed with `relLangURL` or `absLangURL` template funcs -- or prefixed with `{{.LanguagePrefix }}`. diff --git a/docs/content/overview/configuration.md b/docs/content/overview/configuration.md index 67b0a6b96..0d07bc947 100644 --- a/docs/content/overview/configuration.md +++ b/docs/content/overview/configuration.md @@ -118,6 +118,8 @@ Following is a list of Hugo-defined variables that you can configure and their c # Enable Emoji emoticons support for page content. # See www.emoji-cheat-sheet.com enableEmoji: false + # Show a placeholder like "[i18n] foo" instead of an empty string if a translation is missing + enableMissingTranslationPlaceholders: false footnoteAnchorPrefix: "" footnoteReturnLinkContents: "" # google analytics tracking id diff --git a/hugolib/config.go b/hugolib/config.go index d31a38a5a..86c35964c 100644 --- a/hugolib/config.go +++ b/hugolib/config.go @@ -105,4 +105,5 @@ func loadDefaultSettings() { viper.SetDefault("CurrentContentLanguage", helpers.NewDefaultLanguage()) viper.SetDefault("DefaultContentLanguage", "en") viper.SetDefault("DefaultContentLanguageInSubdir", false) + viper.SetDefault("EnableMissingTranslationPlaceholders", false) } diff --git a/tpl/template_i18n.go b/tpl/template_i18n.go index b973f4cd0..bac449035 100644 --- a/tpl/template_i18n.go +++ b/tpl/template_i18n.go @@ -82,6 +82,10 @@ func SetI18nTfuncs(bndl *bundle.Bundle) { return translated } } + + if !viper.GetBool("EnableMissingTranslationPlaceholders") { + return "" + } return fmt.Sprintf("[i18n] %s", translationID) } }