hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 506820435cacb39ce7bb1835f46a15e913b95828
parent 49972d07925604fea45afe1ace7b5dcc6efc30bf
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Fri,  9 Oct 2020 10:00:50 +0200

lang/i18n: Fix for language code case issue with pt-br etc.

Fixes #7804

Diffstat:
Mhtesting/test_helpers.go | 7++++---
Ahugolib/language_test.go | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlangs/config.go | 2+-
Mlangs/i18n/i18n.go | 5++---
Mlangs/i18n/i18n_test.go | 12++++++++++++
Mresources/transform_test.go | 2+-
6 files changed, 77 insertions(+), 8 deletions(-)
diff --git a/htesting/test_helpers.go b/htesting/test_helpers.go
@@ -51,10 +51,11 @@ func BailOut(after time.Duration) {
 
 }
 
-var rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
+// Rnd is used only for testing.
+var Rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
 
-func RandIntn(n int) int {
-	return rnd.Intn(n)
+func RandBool() bool {
+	return Rnd.Intn(2) != 0
 }
 
 // DiffStringSlices returns the difference between two string slices.
diff --git a/hugolib/language_test.go b/hugolib/language_test.go
@@ -0,0 +1,57 @@
+// Copyright 2020 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
+
+import (
+	"fmt"
+	"strings"
+	"testing"
+
+	"github.com/gohugoio/hugo/htesting"
+
+	qt "github.com/frankban/quicktest"
+)
+
+func TestI18n(t *testing.T) {
+
+	c := qt.New(t)
+
+	//https://github.com/gohugoio/hugo/issues/7804
+	c.Run("pt-br should be case insensitive", func(c *qt.C) {
+		b := newTestSitesBuilder(c)
+		langCode := func() string {
+			c := "pt-br"
+			if htesting.RandBool() {
+				c = strings.ToUpper(c)
+			}
+			return c
+		}
+
+		b.WithConfigFile(`toml`, fmt.Sprintf(`
+baseURL = "https://example.com"
+defaultContentLanguage = "%s"
+
+[languages]
+[languages.%s]
+weight = 1
+`, langCode(), langCode()))
+
+		b.WithI18n(fmt.Sprintf("i18n/%s.toml", langCode()), `hello.one = "Hello"`)
+		b.WithTemplates("index.html", `Hello: {{ i18n "hello" 1 }}`)
+		b.WithContent("p1.md", "")
+		b.Build(BuildCfg{})
+
+		b.AssertFileContent("public/index.html", "Hello: Hello")
+	})
+}
diff --git a/langs/config.go b/langs/config.go
@@ -36,7 +36,7 @@ type LanguagesConfig struct {
 
 func LoadLanguageSettings(cfg config.Provider, oldLangs Languages) (c LanguagesConfig, err error) {
 
-	defaultLang := cfg.GetString("defaultContentLanguage")
+	defaultLang := strings.ToLower(cfg.GetString("defaultContentLanguage"))
 	if defaultLang == "" {
 		defaultLang = "en"
 		cfg.Set("defaultContentLanguage", defaultLang)
diff --git a/langs/i18n/i18n.go b/langs/i18n/i18n.go
@@ -66,12 +66,11 @@ func (t Translator) Func(lang string) translateFunc {
 func (t Translator) initFuncs(bndl *i18n.Bundle) {
 	enableMissingTranslationPlaceholders := t.cfg.GetBool("enableMissingTranslationPlaceholders")
 	for _, lang := range bndl.LanguageTags() {
-
 		currentLang := lang
 		currentLangStr := currentLang.String()
-		currentLangKey := strings.TrimPrefix(currentLangStr, artificialLangTagPrefix)
+		// This may be pt-BR; make it case insensitive.
+		currentLangKey := strings.ToLower(strings.TrimPrefix(currentLangStr, artificialLangTagPrefix))
 		localizer := i18n.NewLocalizer(bndl, currentLangStr)
-
 		t.translateFuncs[currentLangKey] = func(translationID string, templateData interface{}) string {
 
 			var pluralCount interface{}
diff --git a/langs/i18n/i18n_test.go b/langs/i18n/i18n_test.go
@@ -226,6 +226,18 @@ one =  "abc"`),
 		expected:     "Show Me The Money",
 		expectedFlag: "Show Me The Money",
 	},
+	// https: //github.com/gohugoio/hugo/issues/7804
+	{
+		name: "lang-with-hyphen",
+		data: map[string][]byte{
+			"pt-br.toml": []byte(`foo.one =  "abc"`),
+		},
+		args:         1,
+		lang:         "pt-br",
+		id:           "foo",
+		expected:     "abc",
+		expectedFlag: "abc",
+	},
 }
 
 func doTestI18nTranslate(t testing.TB, test i18nTest, cfg config.Provider) string {
diff --git a/resources/transform_test.go b/resources/transform_test.go
@@ -152,7 +152,7 @@ func TestTransform(t *testing.T) {
 
 		// The transformed file should only be published if RelPermalink
 		// or Permalink is called.
-		n := htesting.RandIntn(3)
+		n := htesting.Rnd.Intn(3)
 		shouldExist := true
 		switch n {
 		case 0: