diff --git a/htesting/test_helpers.go b/htesting/test_helpers.go index 3804f28fe..599e460f6 100644 --- 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 new file mode 100644 index 000000000..9c3e434c2 --- /dev/null +++ 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 index 08cd15009..3afd15df0 100644 --- 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 index 83144b89c..c0eac5837 100644 --- 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 index 10570a4e3..fa78f708c 100644 --- 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 index 6f1837279..b2dad2210 100644 --- 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: