Fix multihost detection for sites without language definition
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 6 Jan 2018 17:42:32 +0000 (18:42 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 6 Jan 2018 18:14:31 +0000 (19:14 +0100)
Static content was wrongly put into the lang-code subfolder.

Fixes #4221

helpers/language.go
hugolib/config.go

index 3cb388abbb7789bf22f7acaa4501d7881585d8ed..fa933fddd7692925b1eaa5fd3d61944adffa7607 100644 (file)
@@ -100,9 +100,13 @@ func (l *Language) Params() map[string]interface{} {
        return l.params
 }
 
-// IsMultihost returns whether the languages has baseURL specificed on the
-// language level.
+// IsMultihost returns whether there are more than one language and at least one of
+// the languages has baseURL specificed on the language level.
 func (l Languages) IsMultihost() bool {
+       if len(l) <= 1 {
+               return false
+       }
+
        for _, lang := range l {
                if lang.GetLocal("baseURL") != nil {
                        return true
index c83f38cce84bc882aac03a2c43d311052fb77e8f..8e06d3e8e9227d88d43391f4ed7ba6859d6e0a15 100644 (file)
@@ -134,27 +134,26 @@ func loadLanguageSettings(cfg config.Provider, oldLangs helpers.Languages) error
        cfg.Set("languagesSorted", langs)
        cfg.Set("multilingual", len(langs) > 1)
 
-       // The baseURL may be provided at the language level. If that is true,
-       // then every language must have a baseURL. In this case we always render
-       // to a language sub folder, which is then stripped from all the Permalink URLs etc.
-       var baseURLFromLang bool
-
-       for _, l := range langs {
-               burl := l.GetLocal("baseURL")
-               if baseURLFromLang && burl == nil {
-                       return errors.New("baseURL must be set on all or none of the languages")
-               }
+       multihost := langs.IsMultihost()
 
-               if burl != nil {
-                       baseURLFromLang = true
-               }
-       }
-
-       if baseURLFromLang {
+       if multihost {
                cfg.Set("defaultContentLanguageInSubdir", true)
                cfg.Set("multihost", true)
        }
 
+       if multihost {
+               // The baseURL may be provided at the language level. If that is true,
+               // then every language must have a baseURL. In this case we always render
+               // to a language sub folder, which is then stripped from all the Permalink URLs etc.
+               for _, l := range langs {
+                       burl := l.GetLocal("baseURL")
+                       if burl == nil {
+                               return errors.New("baseURL must be set on all or none of the languages")
+                       }
+               }
+
+       }
+
        return nil
 }