Add a way to disable one or more languages

This commit adds a new config setting:

```toml
disableLanguages = ["fr"]
```

If this is a multilingual site:

* No site for the French language will be created
* French content pages will be ignored/not read
* The French language configuration (menus etc.) will also be ignored

This makes it possible to start translating new languages and turn it on when you're happy etc.

Fixes #4297
Fixed #4329
This commit is contained in:
Bjørn Erik Pedersen
2018-01-25 17:03:29 +01:00
parent 322c567220
commit 6413559f75
10 changed files with 160 additions and 42 deletions

View File

@@ -72,16 +72,46 @@ func LoadConfig(fs afero.Fs, relativeSourcePath, configFilename string) (*viper.
}
func loadLanguageSettings(cfg config.Provider, oldLangs helpers.Languages) error {
multilingual := cfg.GetStringMap("languages")
defaultLang := cfg.GetString("defaultContentLanguage")
var languages map[string]interface{}
languagesFromConfig := cfg.GetStringMap("languages")
disableLanguages := cfg.GetStringSlice("disableLanguages")
if len(disableLanguages) == 0 {
languages = languagesFromConfig
} else {
languages = make(map[string]interface{})
for k, v := range languagesFromConfig {
isDisabled := false
for _, disabled := range disableLanguages {
if disabled == defaultLang {
return fmt.Errorf("cannot disable default language %q", defaultLang)
}
if strings.EqualFold(k, disabled) {
isDisabled = true
break
}
}
if !isDisabled {
languages[k] = v
}
}
}
var (
langs helpers.Languages
err error
)
if len(multilingual) == 0 {
if len(languages) == 0 {
langs = append(langs, helpers.NewDefaultLanguage(cfg))
} else {
langs, err = toSortedLanguages(cfg, multilingual)
langs, err = toSortedLanguages(cfg, languages)
if err != nil {
return fmt.Errorf("Failed to parse multilingual config: %s", err)
}
@@ -114,8 +144,6 @@ func loadLanguageSettings(cfg config.Provider, oldLangs helpers.Languages) error
}
}
defaultLang := cfg.GetString("defaultContentLanguage")
// The defaultContentLanguage is something the user has to decide, but it needs
// to match a language in the language definition list.
langExists := false